Почему мои p-значения отличаются между выходом логистической регрессии, тестом хи-квадрат и доверительным интервалом для ИЛИ?

37

Я построил логистическую регрессию, где переменная результата излечивается после получения лечения (по Cureсравнению сNo Cure ). Все пациенты в этом исследовании получали лечение. Мне интересно узнать, связан ли диабет с этим результатом.

В R мой вывод по логистической регрессии выглядит следующим образом:

Call:
glm(formula = Cure ~ Diabetes, family = binomial(link = "logit"), data = All_patients)
...
Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.2735     0.1306   9.749   <2e-16 ***
Diabetes     -0.5597     0.2813  -1.990   0.0466 *  
...
    Null deviance: 456.55  on 415  degrees of freedom
Residual deviance: 452.75  on 414  degrees of freedom
  (2 observations deleted due to missingness)
AIC: 456.75

Однако доверительный интервал для отношения шансов включает 1 :

                   OR     2.5 %   97.5 %
(Intercept) 3.5733333 2.7822031 4.646366
Diabetes    0.5713619 0.3316513 1.003167

Когда я делаю тест хи-квадрат на этих данных, я получаю следующее:

data:  check
X-squared = 3.4397, df = 1, p-value = 0.06365

Если вы хотите рассчитать его самостоятельно, распределение диабета в вылеченных и неизлеченных группах выглядит следующим образом:

Diabetic cure rate:      49 /  73 (67%)
Non-diabetic cure rate: 268 / 343 (78%)

Мой вопрос: почему не согласуются p-значения и доверительный интервал, включая 1?

SniperBro2000
источник
Как рассчитывали доверительный интервал для диабета? Если вы используете оценку параметра и стандартную ошибку для формирования КИ Wald, вы получаете exp (-. 5597 + 1.96 * .2813) = .99168 в качестве верхней конечной точки.
hard2fathom
@ hard2fathom, скорее всего, используется ОП confint(). То есть вероятность была профилирована. Таким образом вы получаете КИ, аналогичные LRT. Ваш расчет верен, но вместо этого составляют Уолда. Более подробная информация в моем ответе ниже.
gung - Восстановить Монику
Я проголосовал за это после того, как я прочитал это более внимательно. Имеет смысл.
hard2fathom

Ответы:

64

С обобщенными линейными моделями можно выполнить три различных типа статистических тестов. Это: тесты Вальда, тесты отношения правдоподобия и тесты баллов. Отличный сайт помощи статистики UCLA обсуждает их здесь . Следующий рисунок (скопированный с их сайта) помогает проиллюстрировать их:

введите описание изображения здесь

  1. ZNNN
  2. Тесты отношения правдоподобия смотрят на отношение правдоподобия (или разницы в логарифмических правдоподобиях) на его максимум и на ноль. Это часто считается лучшим тестом.
  3. Тест оценки основан на наклоне вероятности при нулевом значении. Это обычно менее мощно, но бывают случаи, когда полная вероятность не может быть вычислена, и поэтому это хороший запасной вариант.

summary.glm()confint()profile()1,96χ2

Nппαзнак равно+0,05+0,05

Ниже я профилирую коэффициенты на шкале линейного предиктора и запускаю тест отношения правдоподобия явно (через anova.glm()). Я получаю те же результаты, что и вы:

library(MASS)
x = matrix(c(343-268,268,73-49,49), nrow=2, byrow=T);  x
#      [,1] [,2]
# [1,]   75  268
# [2,]   24   49
D = factor(c("N","Diabetes"), levels=c("N","Diabetes"))
m = glm(x~D, family=binomial)
summary(m)
# ...
# Coefficients:
#             Estimate Std. Error z value Pr(>|z|)    
# (Intercept)  -1.2735     0.1306  -9.749   <2e-16 ***
# DDiabetes     0.5597     0.2813   1.990   0.0466 *  
# ...
confint(m)
# Waiting for profiling to be done...
#                    2.5 %    97.5 %
# (Intercept) -1.536085360 -1.023243
# DDiabetes   -0.003161693  1.103671
anova(m, test="LRT")
# ...
#      Df Deviance Resid. Df Resid. Dev Pr(>Chi)  
# NULL                     1     3.7997           
# D     1   3.7997         0     0.0000  0.05126 .
chisq.test(x)
#         Pearson's Chi-squared test with Yates' continuity correction
# 
# X-squared = 3.4397, df = 1, p-value = 0.06365

Как отметил @JWilliman в комментарии (теперь удаленном), Rвы также можете получить p-значение, основанное на оценке, используя anova.glm(model, test="Rao"). В приведенном ниже примере, заметим , что р-значение не совсем такой же , как в тесте хи-квадрат выше, потому что по умолчанию, R«ы chisq.test()применяет коррекцию непрерывности. Если мы изменим этот параметр, значения p будут соответствовать:

anova(m, test="Rao")
# ...
#      Df Deviance Resid. Df Resid. Dev   Rao Pr(>Chi)  
# NULL                     1     3.7997                 
# D     1   3.7997         0     0.0000 4.024  0.04486 *
chisq.test(x, correct=FALSE)
#   Pearson's Chi-squared test
# 
# data:  x
# X-squared = 4.024, df = 1, p-value = 0.04486
Gung - Восстановить Монику
источник
12
+1 Это очень информативный анализ, в котором четко и авторитетно рассматривается несколько загадочное поведение и дается полезное руководство.
whuber
Хороший ответ, блин, хотя я не понимаю, что вы подразумеваете под «я бы сказал, что ваши данные не совсем« значимы »по общепринятым критериям».
mark999
@ mark999, самые надежные тесты здесь (LRT и хи-квадрат) немного превышают 0,05.
gung - Восстановить Монику