【问题标题】:Fit multiple Gompertz curves and skip errors in R (nlsList and SSgompertz)在 R 中拟合多条 Gompertz 曲线并跳过错误(nlsList 和 SSgompertz)
【发布时间】:2016-03-06 15:31:28
【问题描述】:

我正在尝试使用 SSgompertz 拟合数百条 gompertz 形曲线。数据集包含三列,其中包含“x”和“y”值,以及用于将数据分成不同样本的编码列:“GROUPING”。稍后,这些参数将用于使用 predict() 从 y 轴上的固定点确定所有样本(拟合点方法)的 x。

在使用以下代码将参数输入 predict() 之前,我设法将多个多项式拟合到数据中:

参数

不过,他们中的许多人并不适合。理想情况下,我可以使用非线性回归将数据拟合到 gompertz 曲线。所以我尝试了这个:

参数

但是,无法获得拟合的情况(不良样本或非典型曲线形状)会导致错误并停止整个过程。

例如。 “迭代次数超过最大值 50”

有没有办法忽略不建模的样本,但保留那些建模的参数?

编辑: 我已经尝试按照建议使用循环,但我无法让它工作(见下面的脚本)。 输出也不能输入 coef()

uniq <- unique(unlist(data$GROUPING)) 
results=list()
for (i in uniq){
Singledata <-data[which(data$GROUPING ==uniq[i]), ]
x<-Singledata$x
y<-Singledata$y
ModelSS <- tryCatch(nls(y~SSgompertz(x, Asym, xmid, scal)))
print(ModelSS)
results[i] = ModelS
}
coef(results)

有人可以帮我理解我哪里出错了吗?

示例数据:

data<-data.frame(x=c(0,1,2,4,8,16,32,64,0,1,2,4,8,16,32,64,0,1,2,4,8,16,32,64),
                 y=c(70,90,160,250,410,510,610,650,
                     NA,NA,NA,NA,NA,NA,NA,NA,
                     70,90,160,250,410,510,610,650),
                 GROUPING=c(1,1,1,1,1,1,1,1,
                            45,45,45,45,45,45,45,45,643,643,643,643,643,643,643,643))

【问题讨论】:

标签: r lm nls


【解决方案1】:

nlsList 已在内部使用try。您的问题似乎是 na.action 设置(na.fail 是默认设置)。使用na.omit

nlsList(y~SSgompertz(x, Asym, xmid, scal)|GROUPING, data=data, na.action = na.omit)
#Call:
#  Model: y ~ SSgompertz(x, Asym, xmid, scal) | GROUPING 
#   Data: data 
#
#Coefficients:
#       Asym     xmid     scal
#1   618.774 2.031473 0.831752
#643 618.774 2.031473 0.831752

Degrees of freedom: 16 total; 10 residual
Residual standard error: 30.44042

【讨论】:

  • 有没有办法跳过拟合不佳的数据,这些数据会产生错误,例如:“迭代次数超过最大值 50”
  • 我相信nlsList 已经做到了。提供一个没有的例子。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2017-06-20
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2014-12-02
相关资源
最近更新 更多