3
$\begingroup$

I am doing a survival analysis of time p$os.neck to death p$mors using a Cox Regression.

Please, find my data sample p below.

Question: how can I apply a survSplit from the rms-package on this Cox Regression with two covariates having time-varying coefficients, one being a categorial covariate (cancer stage, p$uicc, with four levels 1,2,3,4) and the other being a discrete covariate (number of lymph nodes having cancer, p$n.sygdom, currently ranging from 0 to 10 in p but theoretically could increase to higher values)?

First

library(rms)

p$sex <- factor(p$sex,levels=c("0","1"),labels=c("0","1"))
p$ecs <- factor(p$ecs,levels=c("0","1"),labels=c("0","1"))
p$uicc <- factor(p$uicc,levels=c("1","2","3","4"),labels=c("1","2","3","4"))
p$rt.kemo <- factor(p$rt.kemo,levels=c("0","1"),labels=c("0","1"))

And

d <- datadist(p)
options(datadist="d")

I then have

a < - cph(Surv(os.neck,mors)~alder+sex+n.fjernet+rcs(n.sygdom)+ecs+uicc+rt.kemo,data=p,surv=TRUE,x=TRUE,y=TRUE)

> cox.zph(a)
               chisq df      p
alder          0.539  1 0.4627
sex            0.593  1 0.4411
n.fjernet      1.052  1 0.3051
rcs(n.sygdom) 10.291  2 0.0058
ecs            0.646  1 0.4216
uicc          12.987  3 0.0047
rt.kemo        1.099  1 0.2945
GLOBAL        26.705 10 0.0029 

For the two time-depedent covariates:

> table(p$uicc)

  1   2   3   4 
126  99  59 146

And

> table(p$n.sygdom)

  0   1   2   3   4   5   6   7   9  10 
292  72  29  13  10   3   4   3   2   2 

Based on plot(cox.zph(a),var=..., I have found that one survival split at time=24 months may be adequate and should be investigated further.

However, I am not experienced in doing survSplit in case of (1) more than one time-dependent covariate and (2) other than categorial covariates with two levels, such as gender.

So, currently, I have something like

v <- survSplit(Surv(os.neck, mors) ~ ., cut=c(24), data=p, episode="time_group")

Please, how can I incorporate rcs(n.sygdom) and p$uicc in the abovementioned survSplit?

My data p

p <- structure(list(alder = structure(c(58.53, 51.43, 78.5, 48.44, 
68.61, 58.28, 55.06, 67.33, 86.51, 61.57, 76.98, 63.73, 63.72, 
55.29, 55.34, 60.85, 60.54, 56.13, 76.09, 71.54, 80.24, 81.67, 
59.49, 61.07, 58.28, 60.2, 58.57, 60, 71.95, 40.48, 81.41, 30.08, 
51.39, 62.44, 75.43, 69.68, 52.99, 34.77, 55.09, 57.18, 34.91, 
67.34, 68.6, 73.74, 52.82, 64.58, 59.18, 48.63, 73.14, 68.9, 
53.71, 58.13, 60.87, 55.65, 68.94, 61.49, 59.14, 89.1, 71.57, 
86.25, 59, 94.49, 46.5, 81.39, 57.28, 53.39, 60.37, 56.82, 73.79, 
62.41, 73.13, 48.68, 50.68, 65.01, 60.67, 71.99, 58.98, 50.76, 
64.04, 61.04, 65.57, 61, 67.92, 55.03, 54.33, 51.94, 82.55, 62.53, 
57.13, 65.87, 60.54, 60.93, 72.49, 61.87, 51.87, 63.94, 82.42, 
51.7, 76.35, 60.46, 65.49, 51.83, 61.07, 63.25, 74.82, 59.19, 
60.2, 52.85, 52.38, 53.64, 65.87, 59.94, 69.86, 60.91, 65.09, 
63.97, 67.49, 57.29, 50.1, 56.08, 76.79, 69.58, 58.48, 61.8, 
83.28, 66.18, 71.04, 45.58, 81.72, 52.92, 56.14, 56.2, 73.12, 
55.06, 63.84, 67.65, 45.81, 84.85, 65.72, 69.39, 63.69, 62.42, 
67.92, 44, 56.44, 87.48, 63.1, 54.79, 36.45, 28.08, 56.54, 52.56, 
59.92, 75.97, 47.35, 46.79, 29.12, 57.3, 66.9, 48.35, 49.7, 53.84, 
51.34, 53.83, 60.29, 72.79, 73.68, 73.63, 62.6, 32.78, 40.55, 
48.03, 67.11, 53.23, 70.34, 64.54, 87.24, 81.97, 55.27, 79.79, 
68.88, 53.22, 61.04, 63.91, 93.75, 58.33, 69.92, 63.66, 82.98, 
64.6, 74.47, 67.52, 65.67, 56.1, 71.71, 57.65, 83.1, 60.1, 49.07, 
59.52, 33.07, 49.69, 63.14, 40.61, 62.57, 78.63, 66.54, 55.35, 
55.43, 72.71, 65.31, 69.52, 69.03, 48.47, 56.74, 70.16, 56.94, 
95.7, 75.9, 67.49, 66.07, 78.65, 82.91, 63.76, 68.2, 54.28, 73.65, 
74.49, 76.37, 91.65, 66.31, 42.7, 68.14, 86.09, 38.79, 53.81, 
70.56, 63.36, 62.38, 77.92, 61.42, 50.07, 70.28, 63.85, 69.17, 
65.83, 58.17, 49.18, 50.27, 59.33, 53.08, 70.95, 62.99, 45.54, 
67.55, 57.72, 67.31, 59.91, 61.15, 69.92, 78.56, 68.9, 69.73, 
57.3, 51.94, 68.96, 60.58, 65.23, 67.02, 65.41, 64.12, 82.47, 
72.53, 58.44, 74.02, 75.52, 63.56, 66.73, 67.89, 60.17, 54.37, 
54.91, 58.34, 68.6, 60.02, 59.28, 48.95, 72.54, 54.16, 65.88, 
67.27, 45.78, 78.15, 36.62, 69.72, 61.72, 56.28, 69.47, 56.82, 
68.63, 73.13, 70.35, 55.47, 52.06, 87.93, 73.5, 66.1, 69.71, 
50.65, 62.57, 74.45, 63.75, 67.12, 79.28, 65.53, 63.38, 54.71, 
54.68, 68.66, 64.87, 94.64, 75.63, 88.05, 51.13, 66.58, 56.24, 
51.39, 52.47, 46.08, 59.73, 52.8, 64.19, 63.6, 68.64, 73.52, 
68.37, 57.05, 77.54, 70.7, 53.69, 68.34, 76.95, 51.52, 69.73, 
55.36, 56.26, 61.88, 60.64, 71.92, 69.59, 75.28, 71.66, 59.23, 
58.2, 61.8, 66.01, 56.3, 46.69, 45.61, 62.79, 59.76, 66.75, 73.65, 
48.46, 51.56, 79.86, 47.76, 58.45, 45.84, 64.38, 56.4, 63.02, 
49.47, 57.17, 68.35, 63.56, 61.11, 35.65, 61.18, 67.96, 75.21, 
62.62, 65.29, 74.27, 68.93, 61.2, 70.19, 51, 66.94, 53.47, 64.25, 
51.97, 67.07, 71.39, 58.03, 60.67, 73.35, 78.87, 75.14, 74.39, 
63.44, 79.67, 45.01, 58.78, 57.44, 67.86, 55.85, 65.79, 58.67, 
60.55, 76.89, 80.2, 62.94, 43.76, 65.12, 50.4, 67.4, 45.98, 23.17, 
30.57, 57.62, 70.49, 43.84, 77.53, 45.88, 63.86, 63.11, 68.27, 
83.6, 57.02), label = c(alder = "Age"), class = c("labelled", 
"numeric")), n.fjernet = structure(c(4L, 27L, 18L, 11L, 14L, 
15L, 9L, 6L, 3L, 16L, 4L, 6L, 10L, 13L, 33L, 16L, 6L, 9L, 15L, 
23L, 5L, 9L, 10L, 8L, 17L, 14L, 13L, 13L, 5L, 9L, 30L, 16L, 9L, 
25L, 3L, 19L, 10L, 8L, 9L, 9L, 10L, 12L, 7L, 38L, 21L, 24L, 5L, 
7L, 15L, 4L, 4L, 35L, 9L, 6L, 10L, 15L, 9L, 8L, 7L, 4L, 21L, 
6L, 10L, 6L, 3L, 8L, 4L, 9L, 10L, 14L, 14L, 3L, 4L, 6L, 6L, 20L, 
7L, 6L, 17L, 3L, 26L, 13L, 13L, 14L, 19L, 13L, 13L, 3L, 7L, 6L, 
8L, 18L, 23L, 6L, 5L, 6L, 5L, 4L, 10L, 7L, 15L, 29L, 13L, 18L, 
7L, 7L, 26L, 18L, 27L, 4L, 22L, 15L, 6L, 20L, 11L, 13L, 17L, 
17L, 26L, 8L, 5L, 14L, 17L, 17L, 9L, 12L, 56L, 16L, 18L, 35L, 
28L, 22L, 12L, 7L, 24L, 9L, 17L, 16L, 20L, 16L, 21L, 20L, 34L, 
7L, 9L, 8L, 4L, 8L, 6L, 8L, 16L, 6L, 11L, 3L, 15L, 3L, 10L, 4L, 
4L, 9L, 6L, 5L, 5L, 3L, 30L, 6L, 2L, 4L, 8L, 5L, 5L, 8L, 16L, 
18L, 7L, 12L, 9L, 9L, 13L, 9L, 22L, 20L, 24L, 8L, 18L, 8L, 15L, 
19L, 5L, 4L, 14L, 18L, 18L, 11L, 15L, 22L, 46L, 11L, 18L, 13L, 
9L, 12L, 13L, 26L, 8L, 30L, 11L, 14L, 22L, 23L, 26L, 5L, 4L, 
26L, 32L, 6L, 9L, 11L, 22L, 6L, 25L, 15L, 22L, 20L, 35L, 5L, 
5L, 20L, 8L, 18L, 7L, 15L, 22L, 13L, 7L, 20L, 11L, 4L, 2L, 7L, 
7L, 4L, 11L, 13L, 13L, 9L, 9L, 9L, 12L, 11L, 13L, 16L, 6L, 13L, 
8L, 17L, 5L, 8L, 22L, 12L, 19L, 3L, 15L, 14L, 7L, 18L, 24L, 9L, 
27L, 9L, 6L, 9L, 4L, 21L, 10L, 36L, 18L, 24L, 19L, 11L, 8L, 15L, 
37L, 7L, 7L, 6L, 18L, 9L, 4L, 22L, 5L, 2L, 24L, 2L, 23L, 30L, 
55L, 9L, 24L, 7L, 8L, 20L, 9L, 22L, 11L, 2L, 24L, 15L, 30L, 5L, 
10L, 8L, 11L, 11L, 11L, 15L, 6L, 16L, 7L, 9L, 16L, 11L, 33L, 
5L, 27L, 27L, 16L, 57L, 5L, 7L, 8L, 11L, 15L, 15L, 12L, 5L, 25L, 
9L, 21L, 13L, 3L, 55L, 27L, 28L, 33L, 23L, 49L, 49L, 11L, 7L, 
28L, 19L, 13L, 23L, 4L, 5L, 11L, 12L, 10L, 4L, 14L, 6L, 12L, 
7L, 32L, 13L, 5L, 12L, 10L, 4L, 4L, 11L, 8L, 17L, 25L, 10L, 8L, 
5L, 15L, 21L, 19L, 11L, 31L, 9L, 20L, 11L, 16L, 12L, 6L, 16L, 
27L, 30L, 18L, 18L, 10L, 7L, 23L, 16L, 15L, 4L, 12L, 9L, 10L, 
12L, 11L, 7L, 7L, 8L, 8L, 8L, 7L, 6L, 9L, 9L, 13L, 15L, 12L, 
35L, 12L, 5L, 5L, 19L, 13L, 27L, 34L, 10L, 16L, 18L, 6L, 22L), label = c(n.fjernet = "LNY"), class = c("labelled", 
"integer")), n.sygdom = structure(c(0L, 0L, 4L, 1L, 0L, 0L, 0L, 
0L, 0L, 4L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 
3L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 5L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 
0L, 1L, 0L, 3L, 0L, 0L, 1L, 1L, 0L, 0L, 5L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 2L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 
1L, 0L, 10L, 3L, 0L, 0L, 0L, 0L, 0L, 6L, 1L, 2L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 2L, 
0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 2L, 1L, 2L, 1L, 0L, 0L, 3L, 
0L, 0L, 1L, 0L, 0L, 4L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 2L, 0L, 0L, 
0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 3L, 3L, 0L, 0L, 
2L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 
0L, 2L, 10L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L, 7L, 4L, 0L, 2L, 1L, 0L, 4L, 0L, 2L, 0L, 7L, 
0L, 4L, 6L, 2L, 0L, 0L, 1L, 1L, 0L, 2L, 1L, 0L, 2L, 3L, 2L, 0L, 
0L, 0L, 0L, 4L, 0L, 0L, 1L, 1L, 1L, 0L, 2L, 3L, 2L, 0L, 1L, 3L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 
1L, 0L, 2L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 2L, 0L, 1L, 0L, 2L, 2L, 
0L, 0L, 0L, 0L, 9L, 0L, 2L, 6L, 0L, 9L, 0L, 1L, 0L, 7L, 0L, 0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 5L, 2L, 4L, 6L, 0L, 0L, 
1L, 0L, 4L, 0L, 0L, 1L, 1L, 2L, 1L), label = c(n.sygdom = "No. LN+"), class = c("labelled", 
"integer")), ecs = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 
2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 
1L, 1L, 2L, 2L, 1L, 1L), .Label = c("0", "1"), class = c("labelled", 
"factor"), label = c(ecs = "ECS")), uicc = structure(c(2L, 2L, 
4L, 3L, 3L, 2L, 2L, 2L, 2L, 4L, 1L, 1L, 2L, 1L, 4L, 2L, 1L, 2L, 
3L, 3L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 1L, 1L, 1L, 1L, 2L, 
3L, 2L, 3L, 1L, 2L, 4L, 1L, 1L, 1L, 2L, 1L, 4L, 4L, 4L, 1L, 3L, 
4L, 1L, 4L, 3L, 1L, 4L, 3L, 1L, 4L, 2L, 2L, 3L, 4L, 2L, 1L, 4L, 
4L, 3L, 2L, 4L, 1L, 4L, 2L, 4L, 4L, 2L, 1L, 1L, 1L, 4L, 4L, 1L, 
4L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 4L, 4L, 2L, 3L, 2L, 2L, 2L, 1L, 
4L, 4L, 4L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 4L, 1L, 4L, 2L, 3L, 1L, 
1L, 1L, 4L, 4L, 2L, 3L, 4L, 4L, 4L, 2L, 2L, 4L, 2L, 2L, 4L, 4L, 
4L, 4L, 2L, 1L, 1L, 4L, 3L, 4L, 2L, 4L, 3L, 3L, 2L, 3L, 2L, 2L, 
1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 4L, 2L, 1L, 2L, 4L, 1L, 1L, 1L, 
2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 3L, 1L, 2L, 3L, 
1L, 1L, 3L, 4L, 1L, 1L, 1L, 2L, 4L, 1L, 1L, 1L, 3L, 4L, 3L, 4L, 
4L, 1L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 4L, 4L, 
4L, 2L, 1L, 4L, 1L, 1L, 3L, 1L, 3L, 4L, 2L, 4L, 2L, 3L, 3L, 4L, 
1L, 1L, 3L, 1L, 4L, 2L, 1L, 3L, 4L, 1L, 2L, 1L, 1L, 4L, 1L, 1L, 
4L, 4L, 1L, 1L, 3L, 2L, 2L, 1L, 4L, 1L, 1L, 4L, 2L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 4L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 
1L, 1L, 4L, 1L, 4L, 4L, 4L, 4L, 1L, 1L, 2L, 3L, 4L, 2L, 4L, 1L, 
1L, 3L, 1L, 3L, 2L, 1L, 1L, 3L, 4L, 4L, 2L, 4L, 4L, 3L, 4L, 4L, 
4L, 1L, 4L, 1L, 4L, 4L, 3L, 2L, 2L, 4L, 3L, 1L, 4L, 3L, 3L, 4L, 
4L, 4L, 2L, 3L, 4L, 3L, 4L, 1L, 1L, 4L, 3L, 3L, 1L, 4L, 4L, 4L, 
2L, 3L, 4L, 2L, 2L, 4L, 4L, 1L, 4L, 2L, 4L, 2L, 1L, 4L, 3L, 1L, 
4L, 4L, 3L, 3L, 2L, 4L, 2L, 3L, 3L, 4L, 4L, 2L, 4L, 4L, 2L, 4L, 
4L, 4L, 4L, 1L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 1L, 2L, 4L, 3L, 2L, 1L, 2L, 1L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 
4L, 2L, 1L, 3L, 1L, 4L, 4L, 1L, 3L, 3L, 4L, 3L), .Label = c("1", 
"2", "3", "4"), class = c("labelled", "factor"), label = c(uicc = "UICC Stage")), 
    rt.kemo = structure(c(2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 
    2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 
    1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 
    1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 
    2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 
    2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 
    1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 
    1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 
    1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 
    2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
    1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 
    2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 
    1L), .Label = c("0", "1"), class = c("labelled", "factor"
    ), label = c(rt.kemo = "Radiochemotherapy")), sex = structure(c(2L, 
    2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 
    1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 
    1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 
    1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 
    1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 
    2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 
    2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 
    1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
    1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 
    1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 
    2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 
    2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 
    1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 
    2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 
    1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 
    1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("Female", 
    "Male"), class = c("labelled", "factor"), label = c(sex = "Sex")), 
    mors = structure(c(0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 
    0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 
    0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 
    1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 
    1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 
    1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 
    0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 
    0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 
    1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 
    0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
    0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
    1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
    1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 
    1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 
    0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 
    0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 
    0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 
    0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 
    0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 
    1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
    ), label = c(os.neck = "os.neck"), class = c("labelled", 
    "integer")), os.neck = structure(c(77.01, 75.96, 11.5, 74.38, 
    17.02, 7.89, 96.03, 40.48, 17.74, 14.65, 62.46, 12.55, 9.92, 
    26.05, 45.47, 17.38, 39.72, 51.45, 119, 8.61, 117.39, 76.98, 
    115.78, 67.09, 113.74, 113.22, 111.64, 94.79, 72.15, 110.23, 
    93.93, 108.16, 106.91, 17.05, 12.48, 104.22, 103.69, 131.98, 
    91.6, 15.87, 101.85, 11.04, 67.22, 67.02, 120.28, 149.88, 
    8.94, 6.6, 5.09, 10.68, 150.21, 135.4, 128.69, 17.15, 122.78, 
    0.07, 5.19, 40.77, 0.2, 170.88, 164.7, 5.55, 1.61, 162.11, 
    167.53, 38.28, 10.58, 32.99, 110.98, 103.69, 122.32, 14.78, 
    42.74, 4.04, 8.28, 84.96, 144.04, 150.67, 145.05, 11.7, 49.97, 
    120.48, 52.6, 139.04, 137.83, 71.26, 16.3, 100.14, 55.03, 
    130.96, 123.44, 118.67, 114.04, 6.51, 119.1, 112.76, 89.89, 
    114.83, 51.71, 95.84, 24.97, 55.66, 85.39, 77.73, 83.42, 
    21.91, 88.41, 86.9, 85.92, 84.17, 71.56, 77.08, 81.48, 79.21, 
    30.92, 68.27, 1.58, 67.65, 64.53, 71.66, 61.47, 7.52, 61.21, 
    61.93, 61.14, 36.34, 35.71, 35.61, 30.75, 34.17, 32.3, 3.45, 
    32.89, 32.76, 31.93, 19.22, 31.74, 30.62, 28.72, 30, 29.64, 
    5.42, 17.68, 178.7, 45.54, 76.22, 151.07, 125.34, 146.96, 
    143.08, 142.36, 140.95, 83.62, 30.82, 137.92, 137.56, 136.41, 
    90.32, 1.84, 135.23, 134.34, 133.62, 19.98, 20.53, 130.47, 
    128.33, 32.59, 128.53, 54.77, 126.52, 2.3, 125.67, 125.64, 
    106.84, 22.28, 90.38, 82.99, 45.18, 4.47, 80.76, 80.46, 80, 
    78.23, 77.83, 39.66, 74.74, 71.33, 32.3, 70.41, 71.95, 16.23, 
    66.63, 64.13, 58.58, 57.92, 3.68, 3.88, 47.9, 47.02, 46.72, 
    46.69, 45.44, 44.55, 44.62, 40.87, 41.73, 40.84, 39.82, 37.98, 
    2.23, 31.38, 52.04, 23.59, 29.24, 28.32, 91.99, 74.09, 0.23, 
    62.39, 18.73, 56.31, 53.03, 45.37, 43.07, 43.37, 41.66, 36.63, 
    28.95, 29.24, 0.79, 27.07, 144.92, 33.61, 83.32, 180.34, 
    28.75, 29.83, 79.54, 14.46, 15.15, 54.97, 48.59, 34.83, 58.42, 
    35.29, 45.73, 57.53, 63.11, 65.05, 29.54, 132.57, 77.21, 
    63.48, 83.35, 34.3, 64.49, 29.54, 62.69, 21.62, 67.52, 49.35, 
    99.02, 15.8, 41.89, 12.98, 13.8, 35.19, 163.78, 44.81, 43.6, 
    90.48, 81.68, 36.14, 137.96, 57.23, 94.33, 31.38, 70.74, 
    59.34, 39.46, 32.07, 20.76, 49.94, 67.22, 91.11, 127.15, 
    121.56, 89.6, 74.12, 31.8, 77.31, 159.35, 1.97, 40.38, 7.39, 
    40.54, 40.02, 38.9, 38.41, 37.49, 25.17, 28.22, 14, 36.53, 
    20.83, 19.55, 40.77, 27.76, 62.56, 45.31, 42.32, 34.46, 35.55, 
    26.94, 9.43, 10.51, 6.8, 8.18, 8.02, 14.29, 6.11, 13.8, 4.9, 
    141.21, 4.04, 40.94, 14.82, 11.66, 73.07, 92.91, 99.98, 10.64, 
    10.05, 95.8, 7.23, 12.81, 114.93, 43.99, 61.93, 66.2, 34, 
    32.99, 30.39, 48.69, 29.31, 27.34, 33.18, 13.9, 10.25, 45.04, 
    16.36, 18.2, 18.76, 12.32, 145.12, 173.7, 8.64, 11.79, 112.04, 
    70.97, 31.28, 28.85, 21.49, 138.68, 19.94, 22.14, 148.31, 
    29.44, 175.61, 164.08, 67.62, 11.01, 84.17, 45.24, 46.82, 
    110.72, 154.71, 20.24, 14.06, 12.88, 31.51, 8.08, 13.08, 
    21.45, 24.28, 21.98, 32.89, 23.26, 15.41, 15.41, 13.8, 40.12, 
    8.02, 15.77, 49.81, 18.17, 24.21, 47.08, 6.6, 37.16, 13.01, 
    8.38, 14.36, 91.86, 18.27, 80.43, 17.28, 66.76, 73.76, 68.21, 
    22.83, 2.66, 69.06, 17.05, 8.61, 23.33, 13.34, 12.65, 8.77, 
    152.45, 128.92, 16.1, 42.28, 4.99, 11.73, 22.97, 40.12, 20.37, 
    2.04, 45.73), label = c(mors = "mors"), class = c("labelled", 
    "numeric"))), row.names = c(NA, 430L), class = "data.frame")

The other covariates are age (alder), sex, the number of lymph nodes removed during surgery (n.fjernet), cancer extending outside the capsule of a lymph node (ecs), and the use of chemoradiotherapy as adjuvant therapy following surgery (rt.kemo).

$\endgroup$
3
  • $\begingroup$ I don't think you mean to say that uicc and n.sygdom are time-varying. That would mean that their values change over the course of the study. Rather, they do not meet the proportional hazards assumption, so you would like to fit separate models for different time periods, using the survSplit() function (actually from the survival package) to re-organize the data. If I'm correct, please edit your question to make that distinction clearer to others who might read it. $\endgroup$
    – EdM
    May 9, 2020 at 20:30
  • $\begingroup$ The higher prevalence of men, the covariates uicc, n.fjernet and n.sygdom (I believe numbers of lymph nodes surgically removed and containing cancer, respectively), ecs (presumably extra-capsular spread of cancer outside walls of nodes), and rt.kemo (presumably chemoradiation, CR, as a treatment modality) suggest that these are head/neck cancer data. Is that correct? If so, do the data include multiple anatomic sub-sites? Might some have been HPV-related? Were these all primary surgery (some with adjuvant CR) or were some primary CR? That's important to know for a good answer. $\endgroup$
    – EdM
    May 10, 2020 at 17:36
  • $\begingroup$ Hi @EdM. Thank you for replying. You are absolutely right, they do not meet the PH assumption, so I would like to fit separate models for different time periods. And, again, you are right, this is about (HPV-neg) laryngeal cancer and spread to regional lymph nodes n_sygdom and the lymph nodal yield n_fjernet. We actively did not include anatomical subsite, as this study focuses on the 7th versus 8th AJCC pN-staging manual in terms of predictive ability. All were primary surgeries subjected to neck dissection. Some received adjuvant CT (rt.kemo) while other did not. Thank you! $\endgroup$
    – cmirian
    May 13, 2020 at 15:22

1 Answer 1

1
+100
$\begingroup$

Setting up separate time strata with survSplit() is only one way to deal with violations of the proportional hazards (PH) assumption in a Cox model. Sometimes it's better to try other approaches that might provide more insight into the underlying survival phenomena.

For example, violation of the assumption of linearity can lead to corresponding problems with PH. The nonlinear term for n.sygdom is not significant:

> anova(a)
                Wald Statistics          Response: Surv(os.neck, mors) 

 Factor     Chi-Square d.f. P     
 alder       28.56      1   <.0001
 sex          6.49      1   0.0108
 n.fjernet    4.97      1   0.0258
 n.sygdom    21.98      2   <.0001
  Nonlinear   1.10      1   0.2939
 ecs          0.01      1   0.9348
 uicc        14.28      3   0.0025
 rt.kemo      1.26      1   0.2622
 TOTAL      116.98     10   <.0001

and (somewhat to my surprise) removing the cubic spline solved that part of the PH problem:

> a1 <- cph(Surv(os.neck,mors)~alder+sex+n.fjernet+n.sygdom+ecs+uicc+rt.kemo,data=p,surv=TRUE,x=TRUE,y=TRUE,time.inc=60)
> cox.zph(a1)
           chisq df      p
alder      0.612  1 0.4339
sex        0.548  1 0.4591
n.fjernet  0.857  1 0.3546
n.sygdom   0.642  1 0.4229
ecs        0.478  1 0.4892
uicc      12.987  3 0.0047
rt.kemo    1.102  1 0.2939
GLOBAL    23.427  9 0.0053

There is still a major PH problem with the cancer stage uicc; a plot of the cox.zph() object you obtained shows a steadily decreasing apparent value of its coefficients over time. Looking at the calibration curve for this model shows something striking.

> set.seed(430)
> cal1 <- calibrate(a1,u=60)
Using Cox survival estimates at  60 Months
> plot(cal1)

calibration plot

The model agrees reasonably well with ideal calibration of the linear predictor except for individuals predicted to have 80% or better probability of survival at 5 years: they do even better than predicted. It's possible that there are two populations here. For example, it's possible that some of these patients (all with laryngeal cancer, based on your comment) had disease related to the human papillomavirus (HPV), who typically have better outcome despite having high levels of disease in lymph nodes and thus high stage. Unless HPV was explicitly ruled out (it's usually not evaluated for laryngeal cancer) that it's still possible, as The Cancer Genome Atlas did find some HPV-positive laryngeal cases by RNAseq. Or possibly a subpopulation really was cured by therapy, and they went toward more of a typical age-association of mortality.

If all you were interested in was overcoming the PH problem, you could go back to survSplit() with that model having a single violator of PH, but then you might miss a lot in terms of underlying biology. Try instead stratifying by uicc (cancer disease stage), another approach that often solves PH problems.

a2 <- cph(Surv(os.neck,mors)~alder+sex+n.fjernet+n.sygdom+ecs+strat(uicc)+rt.kemo,data=p,surv=TRUE,x=TRUE,y=TRUE,time.inc=60)

But that just transfers the problem to rt.kemo (use of chemoradiotherapy after the cancer surgery):

> cox.zph(a2)
             chisq df      p
alder      0.02623  1 0.8713
sex        0.63673  1 0.4249
n.fjernet  0.00569  1 0.9398
n.sygdom   0.86029  1 0.3537
ecs        0.23198  1 0.6301
rt.kemo    8.54452  1 0.0035
GLOBAL    10.04684  6 0.1227

This suggests that there might be a significant interaction between uicc and rt.kemo, which is the case:

a3 <- cph(Surv(os.neck,mors)~alder+sex+n.fjernet+n.sygdom+ecs+strat(uicc)*rt.kemo,data=p,surv=TRUE,x=TRUE,y=TRUE,time.inc=60)
> anova(a3)
                    Wald Statistics          Response: Surv(os.neck, mors) 

 Factor                                        Chi-Square d.f. P     
 alder                                         21.93      1    <.0001
 sex                                            5.84      1    0.0156
 n.fjernet                                      4.29      1    0.0384
 n.sygdom                                      19.51      1    <.0001
 ecs                                            0.08      1    0.7737
 rt.kemo  (Factor+Higher Order Factors)        11.75      4    0.0193
  All Interactions                             11.19      3    0.0107
 uicc * rt.kemo  (Factor+Higher Order Factors) 11.19      3    0.0107
 TOTAL                                         61.01      9    <.0001

and the individual interaction coefficients show an important part of what's going on:

                    Coef    S.E.   Wald Z Pr(>|Z|)
 alder               0.0288 0.0062  4.68  <0.0001 
 sex=Male            0.3450 0.1427  2.42  0.0156  
 n.fjernet          -0.0170 0.0082 -2.07  0.0384  
 n.sygdom            0.2092 0.0474  4.42  <0.0001 
 ecs=1               0.0604 0.2102  0.29  0.7737  
 rt.kemo=1           0.3014 0.3582  0.84  0.4001  
 uicc=2 * rt.kemo=1  0.2557 0.4623  0.55  0.5802  
 uicc=3 * rt.kemo=1 -0.4985 0.4945 -1.01  0.3134  
 uicc=4 * rt.kemo=1 -0.8687 0.4157 -2.09  0.0366 

Based on the coefficient values (exponentiate to get hazard ratios), for patients at the lowest 2 disease stages (uicc of 1, the reference level, or 2), adjuvant chemoradiotherapy is associated with an increased hazard of death, while it is about neutral for uicc=3 (coefficient = 0.30 - 0.50 = -0.2) and significantly improves survival for uicc=4 (coefficient = 0.30 - 0.87 = -0.57).

This might not be surprising. Chemoradiotherapy is not without its own risks. It's possible that using it after surgery does more harm than good to patients with less severe disease, for whom surgery might have succeeded in removing all the cancer anyway.

Even that stratified model with an interaction doesn't completely fix the PH problem, although it is much less (no significant cox.zph(a3,terms=FALSE) values except for 0.0064 for the uicc=4:rt.kemo).

Some of the complication here might come from collinearity among the predictors in the model, as is typical of cancer survival models. For example, by definition the cancer stage uicc is associated with the number of lymph nodes found to have cancer, n.sygdom:

> with(p,ftable(uicc,cut(n.sygdom,c(-Inf,0,2,5,10))))
      (-Inf,0] (0,2] (2,5] (5,10]
uicc                             
1          126     0     0      0
2           99     0     0      0
3           12    47     0      0
4           55    54    26     11

and, as clinicians generally reserve chemoradiation after surgery for patients with the highest disease stage (based the size and invasion of the tumor itself and on the nodes found to have cancer) along with other signs of aggressive disease (like ecs), stage is also associated with rt.kemo:

 > with(p,ftable(rt.kemo,uicc))
        uicc   1   2   3   4
rt.kemo                     
0            108  69  30  47
1             18  30  29  99
$\endgroup$
3
  • $\begingroup$ Hi @EdM. This is exactly what I needed. Thank you very much for your time and elaboration, I learned from this. I wish you a great day. $\endgroup$
    – cmirian
    May 16, 2020 at 5:41
  • 1
    $\begingroup$ @cmirian a few other things to consider. First, n.fjernet is yet another measure of disease severity, as surgeons may do more extensive neck dissections with clinical signs of aggressive disease. So that's another potential collinearity. Second, if modeling is your goal, try modeling T and N as separate covariates instead of using their combination into a single Stage. Third, this question does not directly get at what seems to be your primary goal, which is to compare different AJCC staging versions. That comparison is likely to raise more questions. $\endgroup$
    – EdM
    May 16, 2020 at 15:42
  • $\begingroup$ Hi @EdM. Thank you for your valuable inputs. They are much appreciated. The intention with the Cox Regression models (one for the AJCC 7 and one for AJCC 8), is to cross-validate the predictive ability of pN AJCC 7th ed. vs. 8th ed. with the riskRegression-package yielding AUC and Brier. $\endgroup$
    – cmirian
    May 16, 2020 at 17:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.