如何从R中的Coxph和脆弱模型更改危险比的单位增量?

时间:2018-08-18 01:16:52

标签: r

我运行了一个Coxph模型和一个脆弱模型,但是现在我想更改连续变量(年龄)的危险比,以5单位增量而不是1单位表示。 R中是否有可以执行此类任务的功能?如果是这样,该功能是否也适用于脆弱模式?我使用了“ frailtypack”包。

2 个答案:

答案 0 :(得分:0)

只需添加一个代表每个受试者所属年龄组的新变量;例如1:0-4、2:5-9、3:10-15等。

这是一个使用veteran包中的survival数据集的示例。数据具有连续变量age。将其作为模型的预测变量,将为您提供一年的年龄增加或增加的相对风险(危险比)。如果您对x年的增量感兴趣,则应生成一个新变量,将其相应地分组。对于这些数据,我应用了以下分组;组1:younger than 40,组2:40 - <50,组3:50 - < 60,组4:60 - <70和组5:70 or older。这样,十年期的HR为1.049。另外,每增加10年,风险就会增加5%。请注意,该关联在统计上并不显着。

library(survival)
data(veteran)

veteran$ageCat <- 5
veteran$ageCat[veteran$age < 70] <- 4
veteran$ageCat[veteran$age < 60] <- 3
veteran$ageCat[veteran$age < 50] <- 2
veteran$ageCat[veteran$age < 40] <- 1

table(veteran$ageCat)

 1  2  3  4  5 
11 20 22 72 12 

cox <- coxph(Surv(time, status) ~ ageCat, data = veteran)
summary(cox)


Call:
coxph(formula = Surv(time, status) ~ ageCat, data = veteran)

  n= 137, number of events= 128 

          coef exp(coef) se(coef)     z Pr(>|z|)
ageCat 0.04793   1.04910  0.09265 0.517    0.605

       exp(coef) exp(-coef) lower .95 upper .95
ageCat     1.049     0.9532    0.8749     1.258

Concordance= 0.509  (se = 0.028 )
Rsquare= 0.002   (max possible= 0.999 )
Likelihood ratio test= 0.27  on 1 df,   p=0.6024
Wald test            = 0.27  on 1 df,   p=0.6049
Score (logrank) test = 0.27  on 1 df,   p=0.6048

答案 1 :(得分:0)

@milan的帖子回答了类似的问题,但没有回答。由于将年龄分为几十年并建模为连续变量,因此危险比会将受试者的年龄十年与下一个最小的十年进行比较。也就是说,尽管年龄在2岁或18岁之间,但51岁,49岁,59岁和41岁的受试者的HR相同。

无论如何,建议的默认值是连续变量以1单位递增,在这种情况下为age。按单位变化比较主体并不总是有用的,尤其是当范围变大时。

您可以对模型进行幼稚的以下操作,因此对于lmglmsurvival::coxphfrailtypack::frailtyPenal等应该如此。

library('survival')
data(veteran)

## 1-year increase in age
cox <- coxph(Surv(time, status) ~ age, data = veteran)
exp(coef(cox))
#      age
# 1.007528

对于像Cox回归这样的乘法模型,可以在模型拟合后得到x单位的变化:

## 5-year increase in age
exp(coef(cox)) ^ 5
#      age
# 1.038211

## or equivalently
exp(coef(cox) * 5)
#      age
# 1.038211

但是,为年龄转换创建变量然后拟合模型更容易:

## or you can create a variable to model
veteran <- within(veteran, {
  age5 <- age / 5
})
cox5_1 <- coxph(Surv(time, status) ~ age5, data = veteran)
exp(coef(cox5_1))
#    age10
# 1.038211

cox5_2 <- coxph(Surv(time, status) ~ I(age / 5), data = veteran)
exp(coef(cox5_2))
# I(age/5)
# 1.038211

请注意,您需要在公式界面中使用I,因为某些运算符在公式中具有特殊含义。例如,lm(mpg ~ wt - 1, mtcars)lm(mpg ~ I(wt - 1), mtcars)是两个不同的模型。

您可以在其他模型中使用这些方法,例如frailtyPenal(如果确实是您正在使用的方法)

library('frailtypack')
fp <- frailtyPenal(Surv(time, status) ~ age, data = veteran, n.knots = 12, kappa = 1e5)
exp(fp$coef)
exp(fp$coef) ^ 5

fp5_1 <- frailtyPenal(Surv(time, status) ~ age5, data = veteran, n.knots = 12, kappa = 1e5)
fp5_2 <- frailtyPenal(Surv(time, status) ~ I(age / 5), data = veteran, n.knots = 12, kappa = 1e5)
exp(fp5_1$coef)
exp(fp5_2$coef)