全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4152 4
2011-12-29
对 y1=a*x+b+K/(1+exp(c-r*x)) ,其中a,b,K,c,r为常数,现有
x=c(1:12)
y=c(7098.00,7498.00,7848.00,8254.00,8761.00,8801.12,8951.32,9325.03,9683.90,10200.00,11000.00,12360.74)
要用nls回归求这些常数~~
我写的程序如下
x=c(1:12)
y1=c(7098.00,7498.00,7848.00,8254.00,8761.00,8801.12,8951.32,9325.03,9683.90,10200.00,11000.00,12360.74)
m1=nls(y1~a*x+K/(1+exp(c-r*x)),start=list(a=10,K=100,c=10,r=100),trace=T)
提示错误于nlsModel(formula, mf, start, wts) :
  参数初始估计值里有奇异梯度矩阵
请问是不是初值设置的问题,或是其他问题,要怎么修正呢~~~
谢谢各位~~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-12-29 19:17:08
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-29 22:57:43
你可以试试optim
我总感觉你的公式里后面那个K/(1+exp(c-r*x))项没有什么用处,不可能准确描述你的曲线变化

x=c(1:12)
y1=c(7098.00,7498.00,7848.00,8254.00,8761.00,8801.12,8951.32,9325.03,9683.90,10200.00,11000.00,12360.74)
f <- function(params) {
    a=params[1]
    K=params[2]
    c=params[3]
    r=params[4]
    return(sum((y1-a*x-K/(1+exp(c-r*x)))^2))
}
est = optim(c(600,1,1,1), f)$par
plot(y1 ~ x)
xx = seq(1, 12, length=200)
yy = rep(NA, length(xx))
for (i in 1:length(xx)) {
    yy = est[1]*xx + est[2]/(1+exp(est[3]-est[4]*xx))
}
lines(yy ~ xx)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-30 13:53:22
正在学这中迭代方法求参数,观摩一下~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-12-30 20:55:56
qoiqpwqr 发表于 2011-12-29 22:57
你可以试试optim
我总感觉你的公式里后面那个K/(1+exp(c-r*x))项没有什么用处,不可能准确描述你的曲线变化 ...
谢谢~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群