Как получить тест Уолда для конкретной переменной в многомерном Коксфе?

Я применил многомерную модель Кокса, используя пакет выживания R, как показано ниже:

library(survival)
data(lung)
res.cox1 <- coxph(Surv(time, status) ~  sex + ph.karno + wt.loss, data =  lung)
res.cox1
Call:
coxph(formula = Surv(time, status) ~ sex + ph.karno + wt.loss, 
    data = lung)

              coef exp(coef)  se(coef)      z       p
sex      -0.521839  0.593428  0.174454 -2.991 0.00278
ph.karno -0.015243  0.984873  0.005988 -2.546 0.01091
wt.loss  -0.002523  0.997480  0.006233 -0.405 0.68558

Likelihood ratio test=16.42  on 3 df, p=0.0009298
n= 214, number of events= 152 
   (14 observations deleted due to missingness)

Как можно получить 3 значения теста Вальда для каждой переменной (пол, ph.karno и wt.loss) в многомерной модели Кокса (sex + ph.karno + wt.loss)?

Я попытался взглянуть на структуру coxph и сводку объекта coxph и нашел только одно единственное значение теста wald $wald.test : num 16.5, $ waldtest : Named num [1:3] 1.65e+01 3.00 8.81e-04 ..- attr(*, "names")= chr [1:3] "test" "df" "pvalue"!

Чему соответствует это тестовое значение? Как получить 3 значения теста пола Вальда, ph.karno и wt.loss?

str(res.cox1)
List of 20
 $ coefficients     : Named num [1:3] -0.52184 -0.01524 -0.00252
  ..- attr(*, "names")= chr [1:3] "sex" "ph.karno" "wt.loss"
 $ var              : num [1:3, 1:3] 3.04e-02 -6.78e-05 2.77e-05 -6.78e-05 3.59e-05 ...
 $ loglik           : num [1:2] -680 -672
 $ score            : num 16.9
 $ iter             : int 4
 $ linear.predictors: num [1:214] 0.0756 0.0756 0.0857 -0.039 0.7232 ...
 $ residuals        : Named num [1:214] -0.147 -2.93 0.58 -1.613 -5.599 ...
  ..- attr(*, "names")= chr [1:214] "2" "3" "4" "5" ...
 $ means            : Named num [1:3] 1.4 82.06 9.83
  ..- attr(*, "names")= chr [1:3] "sex" "ph.karno" "wt.loss"
 $ method           : chr "efron"
 $ n                : int 214
 $ nevent           : num 152
 $ terms            :Classes 'terms', 'formula'  language Surv(time, status) ~ sex + ph.karno + wt.loss
  .. ..- attr(*, "variables")= language list(Surv(time, status), sex, ph.karno, wt.loss)
  .. ..- attr(*, "factors")= int [1:4, 1:3] 0 1 0 0 0 0 1 0 0 0 ...
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr [1:4] "Surv(time, status)" "sex" "ph.karno" "wt.loss"
  .. .. .. ..$ : chr [1:3] "sex" "ph.karno" "wt.loss"
  .. ..- attr(*, "term.labels")= chr [1:3] "sex" "ph.karno" "wt.loss"
  .. ..- attr(*, "specials")=Dotted pair list of 2
  .. .. ..$ strata: NULL
  .. .. ..$ tt    : NULL
  .. ..- attr(*, "order")= int [1:3] 1 1 1
  .. ..- attr(*, "intercept")= num 1
  .. ..- attr(*, "response")= int 1
  .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  .. ..- attr(*, "predvars")= language list(Surv(time, status), sex, ph.karno, wt.loss)
  .. ..- attr(*, "dataClasses")= Named chr [1:4] "nmatrix.2" "numeric" "numeric" "numeric"
  .. .. ..- attr(*, "names")= chr [1:4] "Surv(time, status)" "sex" "ph.karno" "wt.loss"
 $ assign           :List of 3
  ..$ sex     : int 1
  ..$ ph.karno: int 2
  ..$ wt.loss : int 3
 $ wald.test        : num 16.5
 $ concordance      : Named num [1:7] 11071 6046 96 22 0 ...
  ..- attr(*, "names")= chr [1:7] "concordant" "discordant" "tied.x" "tied.y" ...
 $ na.action        : 'omit' Named int [1:14] 1 20 36 44 56 63 108 138 178 183 ...
  ..- attr(*, "names")= chr [1:14] "1" "20" "36" "44" ...
 $ y                : 'Surv' num [1:214, 1:2]  455  1010+  210   883  1022+  310   361   218   166   170  ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:214] "2" "3" "4" "5" ...
  .. ..$ : chr [1:2] "time" "status"
  ..- attr(*, "type")= chr "right"
 $ timefix          : logi TRUE
 $ formula          :Class 'formula'  language Surv(time, status) ~ sex + ph.karno + wt.loss
  .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
 $ call             : language coxph(formula = Surv(time, status) ~ sex + ph.karno +      wt.loss, data = lung)
 - attr(*, "class")= chr "coxph"


str(summary(res.cox1))
List of 14
 $ call        : language coxph(formula = Surv(time, status) ~ sex + ph.karno +      wt.loss, data = lung)
 $ fail        : NULL
 $ na.action   : 'omit' Named int [1:14] 1 20 36 44 56 63 108 138 178 183 ...
  ..- attr(*, "names")= chr [1:14] "1" "20" "36" "44" ...
 $ n           : int 214
 $ loglik      : num [1:2] -680 -672
 $ nevent      : num 152
 $ coefficients: num [1:3, 1:5] -0.52184 -0.01524 -0.00252 0.59343 0.98487 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "sex" "ph.karno" "wt.loss"
  .. ..$ : chr [1:5] "coef" "exp(coef)" "se(coef)" "z" ...
 $ conf.int    : num [1:3, 1:4] 0.593 0.985 0.997 1.685 1.015 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "sex" "ph.karno" "wt.loss"
  .. ..$ : chr [1:4] "exp(coef)" "exp(-coef)" "lower .95" "upper .95"
 $ logtest     : Named num [1:3] 16.42029 3 0.00093
  ..- attr(*, "names")= chr [1:3] "test" "df" "pvalue"
 $ sctest      : Named num [1:3] 1.69e+01 3.00 7.52e-04
  ..- attr(*, "names")= chr [1:3] "test" "df" "pvalue"
 $ rsq         : Named num [1:2] 0.0739 0.9983
  ..- attr(*, "names")= chr [1:2] "rsq" "maxrsq"
 $ waldtest    : Named num [1:3] 1.65e+01 3.00 8.81e-04
  ..- attr(*, "names")= chr [1:3] "test" "df" "pvalue"
 $ used.robust : logi FALSE
 $ concordance : Named num [1:2] 0.646 0.0274
  ..- attr(*, "names")= chr [1:2] "C" "se(C)"
 - attr(*, "class")= chr "summary.coxph"

Спасибо!


person Ph.D.Student    schedule 02.06.2020    source источник


Ответы (2)


«Тест Вальда» основан на предположении, что значения параметров из процессов регрессии будут нормально распределены. Вы исследуете отношение оценки коэффициента («coef») к стандартной ошибке оценки («coef (se)») и проверяете, будет ли 95% доверительный интервал для этого отношения включать нулевое значение. Оперативно заявлено: возьмите coef +/- 1.96 * se (coef) и посмотрите, включает ли интервал ноль. В качестве альтернативы и эквивалентно вы можете взять соотношение: coef / se (coef) и посмотреть, больше ли его абсолютное значение 1,96. Возможно, я педантичен, когда говорю, что «тест» - это результат да / нет, отвечая на вопрос «находится ли значение отношения в критическом интервале или нет», тогда как «статистика теста», например, z-значение , является чистым числом.

На самом деле в составленном вами резюме включены 4 теста Вальда. Три из них предназначены для индивидуальных коэффициентов, а один - для общей модели и называется «wald». Но вам не нужен общий модельный тест Вальда. Вам нужны результаты из матрицы «коэффициентов» результата обработки summary() (а не значения «коэффициента» из результата coxph()). Когда вы берете такие отношения, они анализируются как z-тест, поэтому вы не возводите статистику в квадрат. (если, конечно, вы не хотите использовать таблицу хи-квадрат, когда Z ^ 2 будет использоваться для оценки.)

summ.coef <- summary(res.cox1)$coefficients

( Wald.ratios <- summ.coef[,"coef"]/summ.coef[,"se(coef)"] )
       sex   ph.karno    wt.loss 
-2.9912645 -2.5456273 -0.4048609 
identical(Wald.ratios, summ.coef[, "z"])
#[1] TRUE

Если вы хотите сосредоточиться на одной переменной по имени:

 summ.coef["sex", "coef"]/summ.coef["sex", "se(coef)"]
person IRTFM    schedule 03.06.2020

http://www.sthda.com/english/wiki/cox-proportional-hazards-model

Столбец «z» совпадает со статистикой критерия Вальда для каждой ковариации в многомерной модели Кокса.

Вы также можете вызвать статистику модели Кокса следующим образом:

summary(res.cox1)

person TJ87    schedule 02.06.2020
comment
Спасибо за ваш ответ! Я попробовал str (summary (res.cox1)) и поделился результатом в своем вопросе. Это дает мне одно и то же значение waldtest: Named num [1: 3] 1.65e + 01 3.00 8.81e-04. Я не нашел трех значений теста Вальда для каждой переменной. В ссылке я увидел, что: столбец с пометкой «z» дает статистическое значение Вальда. Можно ли получить значения теста Вальда, возведя Z в квадрат? Тест Вальда = Z² верен? - person Ph.D.Student; 02.06.2020