如何解决寻找适合 sigmoid 族的 NLS 起始值
我正在尝试为我的数据拟合一个复杂的 sigmoid 函数。
x<-c(0.069,0.112,0.183,0.255,0.326,0.756,1.472,2.188,2.903,7.199,14.357,0.069,14.357)
y<-c(0.653,0.642,0.601,0.552,0.495,0.419,0.391,0.382,0.322,0.250,0.207,0.669,0.598,0.557,0.521,0.488,0.435,0.376,0.354,0.310,0.243,0.203,0.724,0.652,0.592,0.549,0.523,0.441,0.377,0.335,0.296,0.232,0.202)
函数的基本形式来源于科学 上下文。
nls(y ~ c1+(c2-c1)/(1+c3*exp(log10(x))^c4),start=list(c1=start1,c2=start2,c3=start3,c4=start4))
但是,我正在努力为 nls 算法找到合适的起始值来收敛。我知道最好理解函数并从这种理解中推导出好的估计量。根据我的理解,c1 应该是 y 的下边界,c2 是 y 的上边界(如果我错了,请纠正我),这样 start 1 = min(y)
和 start 2 = max(y)
。
然而,从这一点来看,我发现估计其他参数非常困难。我已经尝试使用带有蛮力和随机算法的 nls2 函数(nls2 包),但到目前为止还没有成功。我收到了“step factor below minFactor”错误,我试图通过设置 control=nls.control(minFactor=1/10000000)
或 singular gradient
错误来解决。
我被困在这一点上,如果有人能帮助我,我会很高兴。
编辑: 我只是将函数重新排列为更“常见”的格式:
nls(y ~ c1+(c2-c1)/(1+exp(c4*(x+c3)))
start=list(c1=start1,c4=start4))
其中新的 x 是前 x 的 log10:
x<-log10(c(0.069,14.357))
而新的 c4 是前 c4 的 log()。 也许现在更容易解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。