¿Cómo calcula R el valor p para esta regresión binomial?

8

Considere la siguiente regresión binomial:

# Create some data
set.seed(10)
n <- 500
x <- runif(n,0,100)
y <- x + rnorm(n,sd=100) < 0
 
# Fit a binomial regression model
model <- glm(y ~ x, family="binomial")

summary(model)

La summaryfunción devuelve un valor p de 1.03e-05. Cuando se usa anova.glm, se obtienen valores p ligeramente más extremos, independientemente del método utilizado para calcular el valor p.

anova(model, test="Rao")   # p.value = 7.5e-6
anova(model, test="LRT")   # p.value = 6.3e-6
anova(model, test="Chisq") # p.value = 6.3e-6

¿El valor p de la summaryfunción se aplica a la misma hipótesis que los devueltos por la anovafunción? En caso afirmativo, ¿cómo summarycalculó este valor p y es posible realizar el mismo cálculo directamente con anova?

Remi.b
fuente
3
A pesar de que la función R toma "binomio" como argumento para la familia, la familia binomial predeterminada asume el enlace logit y usted está realizando una regresión logística.
AdamO

Respuestas:

5

Puede ayudarlo a leer mi respuesta aquí: ¿Por qué mis valores p difieren entre la salida de regresión logística, la prueba de chi-cuadrado y el intervalo de confianza para el OR? Su pregunta aquí es casi un duplicado de eso, pero hay un par de elementos adicionales en su pregunta que pueden abordarse.

Como señala @CliffAB, los valores p en la summary.glm()salida son de las pruebas de Wald. Estos son análogos a las pruebas de coeficientes para un modelo lineal, ya que son la diferencia entre el valor ajustado del coeficiente y el valor de referencia (tomado como ), dividido por el error estándar. La diferencia es que estos se toman para ser distribuidos como un estándar normal en lugar de . Por otro lado, estos son válidos para muestras grandes y no necesariamente sabemos qué constituye una 'muestra grande' en ningún caso. t0t

El uso anova.glm()le da acceso a diferentes pruebas. Cuando configura test="Rao", le da el valor p de una prueba de puntaje. Y cuando establece cualquiera test="Chisq"o test="LRT"(son lo mismo), le da el valor p de una prueba de razón de probabilidad.

La anova.glm()función prueba la misma hipótesis nula que la prueba de Wald en la summary()salida en este caso . Eso es solo porque su modelo tiene solo una variable. La anova.glm()función realizará pruebas secuenciales, que son análogas a 'SS tipo I' en un entorno lineal, mientras que las pruebas de Wald summary()son análogas a 'SS tipo III' en un entorno lineal (vea mi respuesta aquí: Cómo interpretar el tipo I, tipo II y tipo III ANOVA y MANOVA? ). Considerar:

x2 = rnorm(n)
m2 = glm(y~x+x2, family="binomial")
summary(m2)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01
anova(m2, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x     1  20.3841       498     598.72 6.335e-06 ***
# x2    1   0.3627       497     598.35     0.547    
m3 = glm(y~x2+x, family="binomial")  # I just switched the order of x & x2 here
summary(m3)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01  # these are the same
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06  #  as above
anova(m3, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x2    1   0.1585       498     618.94    0.6906      # these differ from the
# x     1  20.5883       497     598.35 5.694e-06 ***  #  anova output above

Puede calzar la anova.glm()función para darle pruebas de puntaje y razón de probabilidad de variables individuales en un modelo de regresión logística múltiple que es análogo al 'SS tipo III', pero es tedioso. Debería seguir reajustando su modelo para que cada variable a su vez aparezca en último lugar en la fórmula proporcionada a la glm()llamada. El último valor p listado en la anova.glm()salida es uno que será análogo al 'tipo III SS'.

Para obtener la puntuación o las pruebas de razón de verosimilitud de variables individuales más convenientemente, use drop1()en su lugar Considerar:

drop1(m3, test="LRT")
# Single term deletions
# 
# Model:
# y ~ x2 + x
#        Df Deviance    AIC     LRT  Pr(>Chi)    
# <none>      598.35 604.35                      
# x2      1   598.72 602.72  0.3627     0.547      # the same as when x2 is last above
# x       1   618.94 622.94 20.5883 5.694e-06 ***  # the same as when x  is last above
gung - Restablece a Monica
fuente
6

En R, la summaryfunción para glmcalcula el valor p usando una estadística de Wald simple, es decir

2×Φ(|β^|SE(β^))

donde es el parámetro de regresión de interés, es el error estándar de este parámetro de regresión estimado y es el CDF de una distribución normal estándar.β^SE(β^)Φ

Para recrear esto desde su salida, intente

 beta = coef(model)[2]
 # getting estimate
 B_SE = sqrt(vcov(model)[2,2])
 # extracting standard error
 pvalue =  pnorm(-abs(beta) / B_SE)  * 2
 # pvalue = 1.027859e-05
Acantilado
fuente