如何找到适合非线性数据的起始值?
How do I find starting values to fit nonlinear data?
我正在尝试计算最能最小化非线性模型最小二乘法的两个参数(下图)。我已经在 Whosebug 和其他地方搜索了一个很好的方法,但无济于事。
数据
x<-c(0.0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.0);
y<-c(0,0.501766379,0.508975489, 0.531691175, 0.503410116, 0.539983481, 0.551075694, 0.695050048, 1);
data1 <- data.frame(x,y)
模特
y~(a*x^2+x*(1-x))/(a*x^2+2*x*(1-x)+b*(1-x)^2)
我的微薄努力
min.RSS <- function(data, par) {
with(data, sum((par[1]*x^2+x*(1-x))/(par[1]*x^2+2*x*(1-x)+par[2]*(1-x)^2)))
}
result <- optim(par = c(0, 1), min.RSS, data = data1$y)
我使用 nls 函数解决了这个问题。我担心获得合适的起始值,但我的担忧似乎没有根据,因为任何合理的起始值都有效。
解决方案:
m<-nls(y ~ (a*x^2+x*(1-x))/(a*x^2+2*x*(1-x)+b*(1-x)^2), start=list(a=1,b=.5))
beta <- coefficients(m)
这会产生所需的参数(在对象 "beta" 中)。
我正在尝试计算最能最小化非线性模型最小二乘法的两个参数(下图)。我已经在 Whosebug 和其他地方搜索了一个很好的方法,但无济于事。
数据
x<-c(0.0, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1.0);
y<-c(0,0.501766379,0.508975489, 0.531691175, 0.503410116, 0.539983481, 0.551075694, 0.695050048, 1);
data1 <- data.frame(x,y)
模特
y~(a*x^2+x*(1-x))/(a*x^2+2*x*(1-x)+b*(1-x)^2)
我的微薄努力
min.RSS <- function(data, par) {
with(data, sum((par[1]*x^2+x*(1-x))/(par[1]*x^2+2*x*(1-x)+par[2]*(1-x)^2)))
}
result <- optim(par = c(0, 1), min.RSS, data = data1$y)
我使用 nls 函数解决了这个问题。我担心获得合适的起始值,但我的担忧似乎没有根据,因为任何合理的起始值都有效。
解决方案:
m<-nls(y ~ (a*x^2+x*(1-x))/(a*x^2+2*x*(1-x)+b*(1-x)^2), start=list(a=1,b=.5))
beta <- coefficients(m)
这会产生所需的参数(在对象 "beta" 中)。