我正在运行一个Coxph。我的设置:我有一个参考(不治疗),然后有三种不同的治疗方法(A,B和C)。我也有A,B和C的相互作用(例如,同时用A和B或A和C等处理的样品)。我为这些处理创建了虚拟变量,编码为1或2(1 =已接受治疗,2 =未接受治疗)。我使用as.factor()
来加载这些变量。
example:
A<-as.factor(Data$A)
我可以按以下方式进行操作,并得到一个结果,表明接受治疗B(又名B = 1)对寿命有帮助(系数为正)。这三种方式在某些方面都很重要:
> coxph1<-coxph(Surv(Lifespan,Status)~A+B+C
> summary(coxph1)
Call:
coxph(formula = Surv(Life, Status) ~ A + B + C, data = FlyData,
method = "efron")
n= 162, number of events= 140
coef exp(coef) se(coef) z Pr(>|z|)
A -0.3486 0.7057 0.1761 -1.980 0.047753 *
B 0.5911 1.8059 0.1787 3.307 0.000944 ***
C -0.6956 0.4988 0.1815 -3.832 0.000127 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
exp(coef) exp(-coef) lower .95 upper .95
A 0.7057 1.4170 0.4997 0.9966
B 1.8059 0.5537 1.2722 2.5635
C 0.4988 2.0050 0.3494 0.7119
Concordance= 0.822 (se = 0.095 )
Rsquare= 0.227 (max possible= 1 )
Likelihood ratio test= 41.75 on 3 df, p=5e-09
Wald test = 41.35 on 3 df, p=6e-09
Score (logrank) test = 43.6 on 3 df, p=2e-09
但是当我使用交互作用项运行一个Coxph时,我想知道A:B或A:C等...是否具有与A或B不同的交互作用,我得到以下信息:
> int.coxph <- coxph(Surv(Life, Status)~A*B*C, data=FlyData, method='efron')
警告消息: 在钳工中(X,Y,分层,偏移,初始,控制,权重=权重,: Loglik在变量1,2,3,4,5,6,7之前收敛; beta可能是无限的。
> summary(int.coxph)
Call:
coxph(formula = Surv(Life, Status) ~ A * B * C, data = FlyData,
method = "efron")
n= 162, number of events= 140
coef exp(coef) se(coef) z Pr(>|z|)
A 3.987e+01 2.066e+17 4.945e+03 0.008 0.994
B 1.856e+01 1.148e+08 2.472e+03 0.008 0.994
C 3.799e+01 3.144e+16 4.945e+03 0.008 0.994
A:B -1.964e+01 2.967e-09 2.472e+03 -0.008 0.994
A:C -3.954e+01 6.737e-18 4.945e+03 -0.008 0.994
B:C -1.874e+01 7.241e-09 2.472e+03 -0.008 0.994
A:B:C 1.962e+01 3.318e+08 2.472e+03 0.008 0.994
exp(coef) exp(-coef) lower .95 upper .95
A 2.066e+17 4.841e-18 0 Inf
B 1.148e+08 8.714e-09 0 Inf
C 3.144e+16 3.180e-17 0 Inf
A:B 2.967e-09 3.370e+08 0 Inf
A:C 6.737e-18 1.484e+17 0 Inf
B:C 7.241e-09 1.381e+08 0 Inf
A:B:C 3.318e+08 3.014e-09 0 Inf
Concordance= 0.869 (se = 0.095 )
Rsquare= 0.51 (max possible= 1 )
Likelihood ratio test= 115.6 on 7 df, p=<2e-16
Wald test = 9.24 on 7 df, p=0.2
Score (logrank) test = 73.69 on 7 df, p=3e-13
所以...这类似于其他一些问题...但是为什么beta趋于无限?对于这个问题,我有一个额外的困惑,就是如果我将变量重新编码为0或1(而不是1和2),那么我可以在交互coxph()中更改输出。对于coxph的重新编码:
coxph2<-coxph(Surv(Lifespan, Status)~A2+B2+C2))
summary(coxph2)
Call:
coxph(formula = Surv(Life, Status) ~ A2 + B2 + C2, data = FlyData,
method = "efron")
n= 162, number of events= 140
coef exp(coef) se(coef) z Pr(>|z|)
A2 0.3486 1.4170 0.1761 1.980 0.047753 *
B2 -0.5911 0.5537 0.1787 -3.307 0.000944 ***
C2 0.6956 2.0050 0.1815 3.832 0.000127 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
exp(coef) exp(-coef) lower .95 upper .95
A2 1.4170 0.7057 1.0035 2.001
B2 0.5537 1.8059 0.3901 0.786
C2 2.0050 0.4988 1.4048 2.862
Concordance= 0.822 (se = 0.095 )
Rsquare= 0.227 (max possible= 1 )
Likelihood ratio test= 41.75 on 3 df, p=5e-09
Wald test = 41.35 on 3 df, p=6e-09
Score (logrank) test = 43.6 on 3 df, p=2e-09
只是反函数,但交互coxph是不同的...
> full.coxph <- coxph(Surv(Life, Status)~A2*B2*C2, data=FlyData, method='efron')
Warning message:
In fitter(X, Y, strats, offset, init, control, weights = weights, :
Loglik converged before variable 2,4,6,7 ; beta may be infinite.
> summary(full.coxph)
Call:
coxph(formula = Surv(Life, Status) ~ A2 * B2 * C2, data = FlyData,
method = "efron")
n= 162, number of events= 140
coef exp(coef) se(coef) z Pr(>|z|)
A2 -7.067e-15 1.000e+00 3.204e-01 0.000 1.000
B2 -2.028e+01 1.558e-09 2.472e+03 -0.008 0.993
C2 9.821e-02 1.103e+00 3.204e-01 0.307 0.759
A2:B2 1.960e+01 3.266e+08 2.472e+03 0.008 0.994
A2:C2 -2.991e-01 7.415e-01 4.475e-01 -0.668 0.504
B2:C2 2.050e+01 7.970e+08 2.472e+03 0.008 0.993
A2:B2:C2 -1.962e+01 3.014e-09 2.472e+03 -0.008 0.994
exp(coef) exp(-coef) lower .95 upper .95
A2 1.000e+00 1.000e+00 0.5337 1.874
B2 1.558e-09 6.417e+08 0.0000 Inf
C2 1.103e+00 9.065e-01 0.5888 2.067
A2:B2 3.266e+08 3.062e-09 0.0000 Inf
A2:C2 7.415e-01 1.349e+00 0.3085 1.782
B2:C2 7.970e+08 1.255e-09 0.0000 Inf
A2:B2:C2 3.014e-09 3.318e+08 0.0000 Inf
Concordance= 0.869 (se = 0.095 )
Rsquare= 0.51 (max possible= 1 )
Likelihood ratio test= 115.6 on 7 df, p=<2e-16
Wald test = 9.24 on 7 df, p=0.2
Score (logrank) test = 73.69 on 7 df, p=3e-13
为什么要更改分类变量的数值很重要? :S我在这里缺少什么...使用非数字变量(“ no”和“ yes”)重试此结果与使用0和1的结果相同。 A的上限.95为“ 1.874”,B的上限为“ inf”。同样,coxph(Surv()~A+B+C)
给出B的负系数,就像上面一样。
答案 0 :(得分:2)
您(实际上几乎可以肯定)拥有一个几乎退化的“帽子矩阵”,它是由具有交互作用的模型矩阵形成的。您具有所有二阶交互以及 第三阶互动。根据因素中级别的数量,完全填充模型矩阵所需的术语数量可能非常大。我接下来要尝试的是一个模型,该模型中的术语要少一些。您可以使用R的公式接口删除三阶项,而只用以下两种方式之一保留第一项和第二项:
int.coxph <- coxph(Surv(Life, Status)~( A+B+C)^2, data=FlyData, method='efron')
或者:
int.coxph <- coxph(Surv(Life, Status)~ A*B*C - A:B:C, data=FlyData, method='efron')
不确定您是否会以这种方式获得满足。可能没有足够的数据来避免构造XX ^ t矩阵时的简并性,但是如果您的结果没有以上述明显的方式爆发,那么结果可能是有意义的。另一种更安全的方法是先查看简化的模型,然后再添加特定的交互:
int.coxph.base <- coxph(Surv(Life, Status)~A+B+C, data=FlyData, method='efron')
int.coxph.intAB <- coxph(Surv(Life, Status)~A+B+C +A:B, data=FlyData, method='efron')
第二个选项的另一个优点是,您可以根据对数似然率的变化轻松构建测试,而不必依赖在print.coxph
的默认打印输出中看到的不那么可靠的Wald型测试或summary.coxph
。
答案 1 :(得分:0)
我已经意识到引起我问题的一个问题:生存数据根本没有足够的分辨率。我无法区分交互条件的影响。如果我设计数据以得出答案,那么我可以获得合理的模型加载输出和交互项。最终,我计划使用所有三种模型类型的组合方法。即:
coxph(Surv(Time, Status)~A+B+C, data=data) #Additive effects
coxph(Surv(Time, Status)~Treatment, data=data) #Base treatment effects
coxph(Surv(Time, Status)~A+B+A:B, data=data) #Test interactions of interest
对加性效应的基本了解可以使您了解协变量如何全局性地促进生存。通过分析治疗效果(即感兴趣的基本变量),您可以了解各组是否不同,然后可以使用累加效应和感兴趣的变量来推断模式。
使用42-的仅研究兴趣项的方法在分析数据时也非常有用。无论我如何处理数据,当您将所有交互项都包含在三方模型中时,即使是我设计用来提供信息的数据也会遇到麻烦。但是,仅使用感兴趣的交互可以增加理解。
我想这种事后分析需要第二个针对感兴趣的术语的实验进行独立验证。