我正在尝试使用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'的无效类型(列表)
任何帮助请...
答案 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)