为每个患者拟合模型时出现循环错误

Error in Loop when fitting models per patients

我正在为每个科目拟合逻辑增长模型。

当我 运行 我的循环为每位患者拟合模型时。存在一个错误,因为一些患者模型没有收敛,因为他们没有逻辑增长。如果在拟合模型时出现错误并且在我捕获系数的数据集中只有 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