2017-04-11 111 views
2

我想適合類型的功率模型:R:冪函數擬合 - 錯誤修復和更

y = b*x(^z) 

我的數據是從大量的軟件包動物的數據。

我的代碼是在這裏:

library(MASS) 
nls(brain~b*body^z,start = list(b = 0, z = 1),data=Animals) 

它有一個錯誤,我不知道如何解決

Error in nlsModel(formula, mf, start, wts) : 
    singular gradient matrix at initial parameter estimates 

我想問這是正確的,以適應這種模式用我的功能。

感謝您的幫助!

+0

若b = 0,則z的微小擾動對rhs的價值沒有影響,所以它的單數性如上所述。 –

+0

即時通訊對不起,我是r新手,你能告訴我如何設置b和z。謝謝 – kkjoe

+1

你將b的起始值設置爲0.不要這樣做。 –

回答

2

你有兩個錯誤。一個是由於b = 0引起的奇異梯度,另一個是有兩種不同類型的動物遵循完全不同的分佈。

看分佈:

enter image description here 固定奇異梯度仍然會產生一個錯誤:

> nls(brain~b*body^z,start = list(b = 0.1, z = 1),data=Animals) 
Error in numericDeriv(form[[3L]], names(ind), env) : 
    Missing value or an infinity produced when evaluating the model 

因此,你也應該這樣做:

subset(Animals, ! body > 9000) -> mammals 
nls(brain~b*body^z,start = list(b = 0.1, z = 1),data=mammals) 
Nonlinear regression model 
    model: brain ~ b * body^z 
    data: mammals 
     b  z 
15.5540 0.6795 
residual sum-of-squares: 4301588 

Number of iterations to convergence: 13 
Achieved convergence tolerance: 3.321e-06