在R中查找NLS函数的起始值

时间:2014-07-15 07:24:14

标签: r formula nls

我正在尝试使用R中的NLS函数来拟合幂函数,但是我找不到好的起始值。

这是我的数据“CentroM”的一部分:

Wg  TLcm
3200    79
2650    77
2750    74
870     45
1480    52
3400    80.5
2400    76
2800    76.5
2900    77.5
2700    76
3215    76
3300    83
3100    79
3000    78.5
2800    76
2700    77
2500    74.5
2300    69
2700    73.5
3350    79

这是我使用的脚本:

plot(CentroM$TLcm,CentroM$Wg,xlab="Total Length(cm)",ylab="Total Weight(g)",pch=1,type="p")
f<-function(TLcm,a,b){a*TLcm^b}
fit<-nls(CentroM$Wg~f(CentroM$TLcm,a,b),start=list(a=0.5,b=0.5),data=CentroM)

以下是我得到的:

  

model.frame.default中的错误(公式= ~CentroM + Wg + TLcm,data = CentroM):     变量'CentroM'的无效类型(列表)

任何帮助请...

1 个答案:

答案 0 :(得分:1)

您可以获取日志,拟合线性模型并使用其中的coef起始值:

df <- read.table(header = TRUE, text = 'Wg  TLcm
3200    79
2650    77
2750    74
870     45
1480    52
3400    80.5
2400    76
2800    76.5
2900    77.5
2700    76
3215    76
3300    83
3100    79
3000    78.5
2800    76
2700    77
2500    74.5
2300    69
2700    73.5
3350    79')


mod1 <- lm(log(Wg) ~ log(TLcm), data = df)
fit <- nls(Wg ~ a*TLcm^b, 
         start = list(a = exp(coef(mod1)[1]),
                      b = coef(mod1)[2]), 
         data = df)