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