【发布时间】:2019-08-22 12:22:37
【问题描述】:
我正在尝试使用 R 的 nls 方法将指数模型拟合到我拥有的一组数据中。有问题的模型是:
y=ae^(bx)
我通过取两边的对数然后从线性回归模型中找到系数来获得估计的起点,然后将它们传递给 nls。当我这样做时,nls 会抛出“评估模型时产生的缺失值或无穷大”错误。
当我使用手动设置的值(a=1,b=1)对其进行测试时,该模型可以正常工作,但我希望我的代码不仅仅可以使用测试数据。我尝试交换 a 和 b 的值,还尝试使用 selfStart 方法(尽管我没有完全理解它们)。
这是我目前的代码:
csvfile <- read.csv("testdata.csv")
col1<-unlist(lapply(csvfile[colnames(csvfile)[1]], log))
col2<-unlist(lapply(csvfile[colnames(csvfile)[2]], log))
a_start<-as.numeric(summary(lm(col2~col1))$coefficients[2])
b_start<-as.numeric(summary(lm(col2~col1))$coefficients[4])
f=as.formula(paste(as.name(colnames(csvfile)[1]),"~I(a*exp(b*",as.name(colnames(csvfile[2])),"))"))
expo<-nls(f,data=csvfile, start=list(a=a_start,b=b_start))
这是 testdata.csv 的内容:
"x","y"
1,7
2,10
3,24
4,47
5,96
我期望得到 a=2.78545 和 b=0.707868 的结果,这是我手动输入起始值时得到的结果。
感谢您提供任何和所有帮助/建议。
【问题讨论】: