拟合多个 Gompertz 曲线并跳过 R 中的错误(nlsList 和 SSgompertz)
Fit multiple Gompertz curves and skip errors in R (nlsList and SSgompertz)
我正在尝试使用 SSgompertz 拟合数百条 gompertz 形曲线。该数据集包含三列,其中包含 "x" 和 "y" 值,以及一个编码列以将数据分成不同的样本:"GROUPING"。稍后,参数将用于使用 predict() 从 y 轴上的固定点确定 x(拟合点方法)。
在使用以下代码将参数输入 predict() 之前,我设法将多个多项式拟合到数据中:
Parameters<-lmList(x~poly(y,3,raw=TRUE)|GROUPING,data=data, na.action=na.omit)
虽然他们中的许多人并不适合。理想情况下,我可以使用非线性回归将数据拟合到 Gompertz 曲线。所以我尝试了这个:
Parameters<-nlsList(y~SSgompertz(x, Asym, xmid, scal)|GROUPING, data=dataframe)
但是,无法获得拟合的情况(不良样本或非典型曲线形状)会导致错误并停止整个过程。
例如。 "iterations exceeded maximum of 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))
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
我正在尝试使用 SSgompertz 拟合数百条 gompertz 形曲线。该数据集包含三列,其中包含 "x" 和 "y" 值,以及一个编码列以将数据分成不同的样本:"GROUPING"。稍后,参数将用于使用 predict() 从 y 轴上的固定点确定 x(拟合点方法)。
在使用以下代码将参数输入 predict() 之前,我设法将多个多项式拟合到数据中:
Parameters<-lmList(x~poly(y,3,raw=TRUE)|GROUPING,data=data, na.action=na.omit)
虽然他们中的许多人并不适合。理想情况下,我可以使用非线性回归将数据拟合到 Gompertz 曲线。所以我尝试了这个:
Parameters<-nlsList(y~SSgompertz(x, Asym, xmid, scal)|GROUPING, data=dataframe)
但是,无法获得拟合的情况(不良样本或非典型曲线形状)会导致错误并停止整个过程。
例如。 "iterations exceeded maximum of 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))
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