¿Por qué mis valores p difieren entre la salida de regresión logística, la prueba de ji cuadrado y el intervalo de confianza para el OR?

37

He construido una regresión logística donde la variable de resultado se está curando después de recibir el tratamiento ( Curevs. No Cure). Todos los pacientes en este estudio recibieron tratamiento. Estoy interesado en ver si tener diabetes está asociado con este resultado.

En R mi salida de regresión logística se ve de la siguiente manera:

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

Sin embargo, el intervalo de confianza para el odds ratio incluye 1 :

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

Cuando hago una prueba de chi cuadrado con estos datos, obtengo lo siguiente:

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

Si desea calcularlo usted mismo, la distribución de diabetes en los grupos curados y no curados es la siguiente:

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

Mi pregunta es: ¿por qué los valores p y el intervalo de confianza incluido 1 no están de acuerdo?

SniperBro2000
fuente
¿Cómo se calculó el intervalo de confianza para la diabetes? Si usa la estimación de parámetros y el error estándar para formar un Wald CI, obtiene exp (-. 5597 + 1.96 * .2813) = .99168 como el punto final superior.
hard2fathom
@ hard2fathom, muy probablemente el OP usado confint(). Es decir, la probabilidad fue perfilada. De esa manera, obtienes CI que son análogos al LRT. Su cálculo es correcto, pero en su lugar constituyen los CI de Wald. Hay más información en mi respuesta a continuación.
gung - Restablecer Monica
Lo voté después de leerlo con más cuidado. Tiene sentido.
hard2fathom

Respuestas:

64

Con los modelos lineales generalizados, hay tres tipos diferentes de pruebas estadísticas que se pueden ejecutar. Estos son: pruebas de Wald, pruebas de razón de probabilidad y pruebas de puntaje. El excelente sitio de ayuda de estadísticas de UCLA tiene una discusión de ellos aquí . La siguiente figura (copiada de su sitio) ayuda a ilustrarlos:

ingrese la descripción de la imagen aquí

  1. znortenortenorte
  2. Las pruebas de razón de probabilidad observan la razón de las probabilidades (o la diferencia en las probabilidades de registro) en su máximo y en el nulo. Esto a menudo se considera la mejor prueba.
  3. La prueba de puntuación se basa en la pendiente de la probabilidad en el valor nulo. Por lo general, esto es menos potente, pero hay momentos en que no se puede calcular la probabilidad completa, por lo que esta es una buena opción de reserva.

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

nortepagspagsα=.05.05

A continuación, perfilo los coeficientes en la escala del predictor lineal y ejecuto la prueba de razón de probabilidad explícitamente (vía anova.glm()). Obtengo los mismos resultados que tú:

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

Como @JWilliman señaló en un comentario (ahora eliminado), en R, también puede obtener un valor p basado en la puntuación utilizando anova.glm(model, test="Rao"). En el siguiente ejemplo, nota que el valor p no es exactamente lo mismo que en la prueba de chi-cuadrado anterior, porque por defecto, R's chisq.test()se aplica una corrección de continuidad. Si cambiamos esa configuración, los valores p coinciden:

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 - Restablece a Monica
fuente
12
+1 Este es un análisis muy informativo, que aborda un comportamiento un tanto misterioso de manera clara y autoritaria y proporciona una guía útil.
whuber
Buena respuesta entusiasta, aunque no entiendo lo que quiere decir con "Diría que sus datos no son muy 'significativos' según los criterios convencionales".
mark999
@ mark999, las pruebas más confiables aquí (LRT y chi-cuadrado) están ligeramente por encima de 0,05.
gung - Restablece a Monica