r - 如何为包含可变数量协变量的生存分析编写 tryCatch 函数?
问题描述
我正在运行一个重复超过 20,000 次的 cox 比例风险模型(根据不同基因组合的计算)。当我运行它几百或几千时,我没有收到任何错误。然而,考虑到绝对的概率,一些基因最终会(我假设)完美分离,这会阻止收敛并产生这个警告
Warning message:
In coxph.fit(X, Y, istrat, offset, init, control, weights = weights, ... :
Loglik converged before variable 1 ; coefficient may be infinite.
这会杀死该功能。因此,我想做一个 tryCatch 来解决我的问题,以便这个 coxph 的结果只是一个 NA 表(与通常的输出具有相同的维度)。
**Sample DF**
time - in days
status - censored(0), failed(1)
A,B,C - covariables
time status A B C
134 0 4 5 12
324 0 32 3 2
93 1 4 23 54
23 1 65 9 3
这是我尝试过的:
**original coxph() in the model**
results <- coxph(Surv(time, status) ~ A + B + C, data=data)
**tryCatch version of coxph()**
coxph.conv = function(time, status, preds, data) {
tryCatch(
coxph(Surv(time, status) ~ paste0(preds, collapse="+"), data=data),
warning = function(w) NA)
}
results <- coxph.conv(time, status, preds=c("A", "B", "C"), data=cox_df)
我尝试运行时收到的错误是
Error in model.frame.default(formula = Surv(time, status) ~ paste0(preds, :
variable lengths differ (found for 'paste0(preds, collapse = "+")')
如何编写这个 tryCatch 函数,以便我可以添加可变数量的协变量,它们之间有一个 +?
解决方案
我认为错误来自给定coxph
函数的公式。尝试类似下面的方法来制作您的公式,然后将其传递给函数内部的 coxphcoxph.conv
函数。
my_formula <- paste0("Surv(", time, " , " status,") ~ ", paste0(preds, collapse =" + "))
那是,
coxph.conv = function(time, status, preds, data) {
my_formula <- paste0("Surv(", time, " , ", status,") ~ ", paste0(preds, collapse =" + "))
# As suggested in comments by @IRTFM, you may need the following line
my_formula <- as.formula(my_formula)
tryCatch(
coxph(my_formula, data=data), warning = function(w) NA)
}
推荐阅读
- azure-devops - azure devops 中的 Pipeline 和 Release Pipeline 有什么区别?
- python - 列表中连续重复值的最大数量
- javascript - 具有模块化架构的 Vue 最佳国际化库
- sparql - wikidata 上的 sparql 查询
- mysql - 获取每个月(8 月到 11 月)的前 50 条记录,但只有唯一的记录
- algorithm - 对于 A* 算法,这是一个不错的启发式函数吗?为什么或者为什么不?
- swift - 从另一个类访问字典而不是它创建和附加的类返回空白结果
- string - 在 Julia 中,如何拒绝具有特定字符的单词?
- javascript - 我在网页的下拉框中看不到选项,但可以在元素中看到
- php - PHP 代码没有获取我在 wordpress 主题自定义中想要的链接