每个患者拟合模型时回路中的错误

问题描述

我正在为每个主题拟合逻辑增长模型。

当我运行循环以适合每个患者的模型时。存在错误,因为某些患者的模型没有逻辑增长,因此无法收敛。如果要拟合模型时出现错误,并且希望在捕获系数的数据集中有NA,我希望循环继续进行

    growth_rate_l <- function(patient,data) {
  data0 <- data %>% dplyr::filter(pat== patient)
  fit0 <- nls(MRDRSLT ~ SSlogis(TIME,phi1,phi2,phi3),data = data0)
  t_doubling <- (summary(fit0)$coefficients)
  aic <-AIC(fit0,k=3)
  outdata <- c(t_doubling,aic)
  outdata
}

for (i in unique(doub1log$pat)) {
  doub1log$phi1[doub1log$pat== i] <- growth_rate_l(i,doub1log)[1]
  doub1log$phi2[doub1log$pat== i] <- growth_rate_l(i,doub1log)[2]
  doub1log$phi3[doub1log$pat == i] <- growth_rate_l(i,doub1log)[3]
  doub1log$AIC[doub1log$pat== i] <- growth_rate_l(i,doub1log)[13]
}

对于某些主题,该模型不合适,我从nls收到一个错误

Error in nls(y ~ 1/(1 + exp((xmid - x)/scal)),data = xy,start = list(xmid = aux[[1L]],: 
  step factor 0.000488281 reduced below 'minFactor' of 0.000976562

一旦出错,循环就会停止,但我希望循环进行到最后,并为无法拟合模型的对象提供NA。

我尝试了“ try”和“ tryCatch”,但是关于如何处理此问题的想法并不直观?

I tried tryCatch(,error = function(e) { skip_to_next <<- TRUE})    if(skip_to_next) { next }  ``` i tired this in the loop above 

我把它放在上面的循环中,但是没有用。我不确定是否需要在循环或函数中捕获错误。

我曾经是stata用户,它有一个名为capture的命令,该命令允许循环运行而不会出错。

解决方法

growth_rate_l <- function(patient,data) {
  data0 <- data %>% dplyr::filter(pat== patient)
  fit0 <- nls(MRDRSLT ~ SSlogis(TIME,phi1,phi2,phi3),data = data0,na.action = na.omit)
  t_doubling <- (summary(fit0)$coefficients)
  aic <-AIC(fit0,k=3)
  outdata <- c(t_doubling,aic)
  outdata
}

for (i in unique(doub1log$pat)) {
tryCatch({
  doub1log$phi1[doub1log$pat== i] <- growth_rate_l(i,doub1log)[1]
  doub1log$phi2[doub1log$pat== i] <- growth_rate_l(i,doub1log)[2]
  doub1log$phi3[doub1log$pat== i] <- growth_rate_l(i,doub1log)[3]
  doub1log$AIC[doub1log$pat== i] <- growth_rate_l(i,doub1log)[13]
},error=function(e){})
}

您需要在公式中添加na.omit,并在循环中添加try catch使其起作用。 Skipping error in for-loop Fit multiple Gompertz curves and skip errors in R (nlsList and SSgompertz)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...