R:功率函数拟合 - 错误修复等

时间:2017-04-11 00:54:57

标签: r error-handling non-linear-regression

我想要适合类型的力量模型:

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

我想问一下,使用我的功能是否适合这个模型。

感谢您的帮助!

1 个答案:

答案 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