提问人:AP30 提问时间:5/11/2023 更新时间:5/11/2023 访问量:26
在 R 公式中使用 package::function 会给出不同的结果(特别是 coxph 内部的 survival::strata)
Using package::function inside formula in R gives different results (specifically survival::strata inside coxph)
问:
我认为以下两个公式调用应该是等效的。
install.packages("survival")
library(survival)
型号 1
coxph(Surv(futime, fustat) ~ age + strata(rx), data=ovarian)
Call:
coxph(formula = Surv(futime, fustat) ~ age + strata(rx), data = ovarian)
coef exp(coef) se(coef) z p
age 0.13735 1.14723 0.04741 2.897 0.00376
Likelihood ratio test=12.69 on 1 df, p=0.0003678
n= 26, number of events= 12
型号 2
coxph(Surv(futime, fustat) ~ age + survival::strata(rx), data=ovarian)
Call:
coxph(formula = Surv(futime, fustat) ~ age + survival::strata(rx),
data = ovarian)
coef exp(coef) se(coef) z p
age 0.14733 1.15873 0.04615 3.193 0.00141
survival::strata(rx)rx=2 -0.80397 0.44755 0.63205 -1.272 0.20337
Likelihood ratio test=15.89 on 2 df, p=0.0003551
n= 26, number of events= 12
然而,事实并非如此。第二个模型专门使用 “::” 运算符引用 'strata',将其视为模型中的固定效应变量,而不是将模型单独拟合在 'strata' 水平内。我不知道这是否是:
A) 在 R 的公式中使用“package::function”类型调用时出现问题,或者 B) 生存包和命名空间/依赖项的问题
我想使用对 Model 2 的调用,因为我正在构建一个包,并且不想在加载我的包时附加整个生存包(很大)。
对此的任何帮助将不胜感激。
答:
3赞
bretauv
5/11/2023
#1
在 中,有以下几行:coxph()
special <- c("strata", "tt", "frailty", "ridge", "pspline")
tform$formula <- if (missing(data))
terms(formula, special)
else terms(formula, special, data = data)
因此,在第一种情况下,正确检测,但在第二种情况下则不然。我们可以通过您的示例看到这一点:coxph
strata
library(survival)
formula1 <- Surv(futime, fustat) ~ age + strata(rx)
formula2 <- Surv(futime, fustat) ~ age + survival::strata(rx)
special <- c("strata", "tt", "frailty", "ridge", "pspline")
data <- ovarian
t1 <- terms(formula1, special, data = data)
t2 <- terms(formula2, special, data = data)
attr(t1, "specials")$strata
#> [1] 3
attr(t2, "specials")$strata
#> NULL
虽然我不知道具体细节,但我想说这种差异后来导致了结果的差异。coxph()
因此,应避免在公式中使用前缀。如果由于某种原因,您必须使用此前缀,则可以使用以下技巧:survival::
library(survival)
# here
strata <- survival::strata
coxph(Surv(futime, fustat) ~ age + strata(rx), data=ovarian)
#> Call:
#> coxph(formula = Surv(futime, fustat) ~ age + strata(rx), data = ovarian)
#>
#> coef exp(coef) se(coef) z p
#> age 0.13735 1.14723 0.04741 2.897 0.00376
#>
#> Likelihood ratio test=12.69 on 1 df, p=0.0003678
#> n= 26, number of events= 12
评论
0赞
AP30
5/11/2023
谢谢,绝对正确!这个技巧效果很好,所以我想我将使用它来避免在我的包裹中附加生存。非常感谢您的回复。
评论