我从某种日子开始自学R,而且我坚持使用cox回归分析。
我设法使用cut()
函数将我拥有的每个连续变量划分为2个分类组。
现在我想知道我是否可以在cox回归分析中单独组合这些类别。
例如:我有3个变量(A,B,C),每个变量由2个类别组成:A-,A +& B-,B +& C-,C +。现在,如果我运行coxph()
命名变量我只得到“+”类别的结果(据我所知,因为“ - ”类别用作参考组)。
然而,由于C-似乎对生存有负面影响,我更感兴趣的是收到该类别的结果。
另外我想知道是否有一种方法可以将每个类别定义为一个新的组/变量,并将它们单独组合以查看每个类别对生存的影响?或者这是不必要的?
编辑:我会尝试提供一个更具体的例子,我希望它有效:)
#example data:
test<-structure(list(A = c(8, 6, 42, 97, 55, 1, 5, 7, 55, 4), B = c(93, 9, 65, 2, 51, 89, 1, 1, 5, 62), C = c(58, 99, 100, 98, 92, 100, 99, 95, 81, 67), time = c(1.6, 34.6, 1.5, 35.8, 7.7, 38.6, 40.2, 4.7, 37.6, 8.6), event= c(1, 0, 0, 0, 1, 0, 0, 1, 0, 1)))
mydata<-as.data.frame(test)
看起来应该是这样的:
mydata
A B C time status
1 8 93 58 1.6 1
2 6 9 99 34.6 0
3 42 65 100 1.5 0
4 97 2 98 35.8 0
5 55 51 92 7.7 1
6 1 89 100 38.6 0
7 5 1 99 40.2 0
8 7 1 95 4.7 1
9 55 5 81 37.6 0
10 4 62 67 8.6 1
关于上述问题,这是我到目前为止所做的:
#load survival package
library("survival")
#define variables
A <- c(mydata[1:10,1])
B <- c(mydata[1:10,2])
C <- c(mydata[1:10,3])
OS <- c(mydata[1:10,4])
Event <- c(mydata[1:10,5])
# dependent and independent variables
y <- Surv(OS, Event)
x <- cbind(A, B, C)
mydata <- data.frame(cbind(x,y))
#Cox proportional hazard model, with the "raw data"
coxph1 <- coxph(y~x,data=mydata, method="breslow")
summary(coxph1)
#categorising the variables
CA=cut(mydata$A, br=c(-1,20,101), labels = c("[A-]", "[A+]"))
CB=cut(mydata$B, br=c(-1,20,101), labels = c("[B-]", "[B+]"))
CC=cut(mydata$C, br=c(-1,96,101), labels = c("[C-]", "[C+]"))
#Cox regression, combined with cut intervals
coxph2=coxph(y~CA+CB+CC, data=mydata, method="breslow")
summary(coxph2)
预期的输出是:
coxph(formula = y ~ x, data = mydata, method = "breslow")
n= 10, number of events= 4
coef exp(coef) se(coef) z Pr(>|z|)
xA 0.0001443 1.0001443 0.0238329 0.006 0.995
xB 0.0104826 1.0105378 0.0211830 0.495 0.621
xC -0.0497490 0.9514682 0.0383305 -1.298 0.194
exp(coef) exp(-coef) lower .95 upper .95
xA 1.0001 0.9999 0.9545 1.048
xB 1.0105 0.9896 0.9694 1.053
xC 0.9515 1.0510 0.8826 1.026
Concordance= 0.769 (se = 0.167 )
Rsquare= 0.29 (max possible= 0.799 )
Likelihood ratio test= 3.43 on 3 df, p=0.33
Wald test = 3.3 on 3 df, p=0.3476
Score (logrank) test = 4.24 on 3 df, p=0.2364
coxph(formula = y ~ CA + CB + CC, data = mydata, method = "breslow")
n= 10, number of events= 4
coef exp(coef) se(coef) z Pr(>|z|)
CA[A+] -1.036e+00 3.549e-01 1.262e+00 -0.821 0.412
CB[B+] 4.294e-01 1.536e+00 1.274e+00 0.337 0.736
CC[C+] -2.162e+01 4.095e-10 2.094e+04 -0.001 0.999
exp(coef) exp(-coef) lower .95 upper .95
CA[A+] 3.549e-01 2.818e+00 0.0299 4.213
CB[B+] 1.536e+00 6.509e-01 0.1266 18.653
CC[C+] 4.095e-10 2.442e+09 0.0000 Inf
Concordance= 0.904 (se = 0.165 )
Rsquare= 0.542 (max possible= 0.799 )
Likelihood ratio test= 7.8 on 3 df, p=0.05031
Wald test = 1.15 on 3 df, p=0.7653
Score (logrank) test = 6.42 on 3 df, p=0.09288
答案 0 :(得分:0)
首先,有几次会有不必要的错综复杂的代码。测试数据可以写成:
mydata <- data.frame(A = c(8, 6, 42, 97, 55, 1, 5, 7, 55, 4),
B = c(93, 9, 65, 2, 51, 89, 1, 1, 5, 62),
C = c(58, 99, 100, 98, 92, 100, 99, 95, 81, 67),
time = c(1.6, 34.6, 1.5, 35.8, 7.7, 38.6, 40.2, 4.7, 37.6, 8.6),
event= c(1, 0, 0, 0, 1, 0, 0, 1, 0, 1))
您可以写OS <- c(mydata[1:10,4])
代替OS <- mydata$time
,但不需要将它们视为mydata
。如您所见,该模型与您问题中的第一个模型相同:
> (coxph1 <- coxph(Surv(time, event) ~ ., data=mydata, method="breslow"))
Call:
coxph(formula = Surv(time, event) ~ ., data = mydata, method = "breslow")
coef exp(coef) se(coef) z p
A 0.000144 1.000144 0.023833 0.01 1.00
B 0.010483 1.010538 0.021183 0.49 0.62
C -0.049749 0.951468 0.038331 -1.30 0.19
Likelihood ratio test=3.43 on 3 df, p=0.33
n= 10, number of events= 4
关于单独组合协变量的问题 - ~.
表示使用所有其他协变量。您可以使用~ A + B + C
或任何其他组合专门指定它们。
关于更改参考类别 - 只需要&gt; 2类别。系数的含义是类别和参考类别之间的差异。如果只有2个类别,那么改变参考将给出相同的系数,比特为&#39; - &#39;标志。
要更改因子中的参考类别,请使用relevel
函数:
mydata$CA <- cut(mydata$A, br=c(-1,20,101), labels = c("[A-]", "[A+]"))
mydata$CB <- cut(mydata$B, br=c(-1,20,101), labels = c("[B-]", "[B+]"))
mydata$CC <- cut(mydata$C, br=c(-1,96,101), labels = c("[C-]", "[C+]"))
mydata$CA <- relevel(mydata$CA, 2)
> (coxph1 <- coxph(Surv(time, event) ~ CA, data=mydata, method="breslow"))
Call:
coxph(formula = Surv(time, event) ~ CA, data = mydata, method = "breslow")
coef exp(coef) se(coef) z p
CA[A-] 0.559 1.749 1.158 0.48 0.63
希望这会有所帮助:)