11 votos

glm en R - ¿qué valor p representa la bondad de ajuste de todo el modelo?

Estoy corriendo glms en R (modelos lineales generalizados). Pensé que conocía los pvalores - hasta que vi que llamar a un resumen para una glms no te da un valor p representativo del modelo en su conjunto - al menos no en el lugar donde lo hacen los modelos lineales.

Me pregunto si esto se da como el valor p para la intercepción, en la parte superior de la tabla de coeficientes. Así que en el siguiente ejemplo, mientras que Wind.speed..nnots y canopy_density pueden ser significativos para el modelo, ¿cómo sabemos si el modelo en sí mismo es significativo? ¿Cómo sé si debo confiar en estos valores? ¿Tengo razón al preguntarme si el Pr(>|z|) para (Intercept) representa la importancia del modelo? ¿Este modelo es significativo, gente? ¡Gracias!

Debo notar que ejecutar un test F no dará un valor p, ya que recibo un mensaje de error diciendo que ejecutar un test F en la familia del binomio es inapropiado.

Call:
glm(formula = Empetrum_bin ~ Wind.speed..knots. + canopy_density, 
    family = binomial, data = CAIRNGORM)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.2327  -0.7167  -0.4302  -0.1855   2.3194  

Coefficients:
                   Estimate Std. Error z value Pr(>|z|)  
(Intercept)          1.8226     1.2030   1.515   0.1298  
Wind.speed..knots.  -0.5791     0.2628  -2.203   0.0276 *
canopy_density      -2.5733     1.1346  -2.268   0.0233 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 59.598  on 58  degrees of freedom
Residual deviance: 50.611  on 56  degrees of freedom
  (1 observation deleted due to missingness)
AIC: 56.611

1 votos

Si no recuerdo mal, en una regresión binomial debería utilizar una prueba de desviación, también conocida como prueba de probabilidad logarítmica, que es análoga a la prueba F utilizada en una regresión lineal. Este es el -2 * (LL nulo - LL saturado) que se ajusta a una distribución chi-cuadrado. Aunque no puedo ver un modelo de Log likelihood en su salida de resumen. ¿Está en el objeto del modelo pero no en la salida del resumen?

10voto

AdamSane Puntos 1825

Puede hacer una prueba asintótica de chi-cuadrado de (59,598-50,611) frente a una chi-cuadrado con (58-56) df, o utilizar anova() en su objeto glm (que no hace la prueba directamente, pero al menos calcula (59.598-50.611) y (58-56) para usted).

Esto es efectivamente análisis de la desviación .

Este es el tipo de cálculos que podrías hacer (en un conjunto de datos diferente, que viene con R):

spray1=glm(count~spray,family=poisson,data=InsectSprays)  # full model
spray0=glm(count~1,family=poisson,data=InsectSprays)      # null model
with(anova(spray0,spray1),pchisq(Deviance,Df,lower.tail=FALSE)[2]) 

Lo que da el valor p para un estadística asintótica de chi cuadrado basada en la desviación .

O puede utilizar el deviance y df.residual funciones para hacerlo:

 pchisq(deviance(spray0)-deviance(spray1),
     df.residual(spray0)-df.residual(spray1),
    lower.tail=FALSE)

--

Mucha gente utilizaría la comparación entre el AIC del modelo completo y el nulo (o, en algunos casos, quizá una comparación entre un modelo de interés y el modelo saturado) para averiguar si el modelo es mejor que el nulo en ese sentido.

--

¿Estoy en lo cierto al preguntarme si la Pr(>|z|) para (Intercept) representa la significación del modelo?

No es así. De hecho, el valor p del intercepto no suele ser de interés directo.

Si está considerando un modelo con un parámetro de dispersión, he visto a algunas personas argumentar a favor de hacer una prueba F en lugar de un chi-cuadrado asintótico; corresponde a las personas que utilizan una prueba t en lugar de una z en los coeficientes individuales. No es probable que sea una aproximación razonable en muestras pequeñas. No he visto una derivación o simulación que sugiera que la F es necesariamente una aproximación adecuada (sustancialmente mejor que el resultado asintótico) en el caso de los MLG en general. Es posible que exista una, pero no la he visto.

2 votos

También puede ejecutar Anova(fit, type = 2) de la car biblioteca

3voto

Patrick Puntos 36

Asumiendo que tu modelo está en el objeto 'fit' podrías usar este código para realizar una prueba de log-liklihood en tu modelo binomial Como has notado una prueba F no es apropiada, pero esta prueba probará si tu modelo se predice mejor que al azar.

LLR = -2 * (fit$null.deviance - fit$deviance)

Esta es la fórmula de la prueba de la razón de logaritmos.

pchisq(LLR, 2, lower.tail = FALSE)

Y esto le dará el valor p. Aunque no estoy 100% seguro de que sea la df correcta. Estoy bastante seguro de que es la diferencia en el número de parámetros, de los cuales tienes 2 en tu modelo saturado y ninguno en el modelo nulo, ergo df = 3 - 1 = 2. Pero eso podría ser algo a seguir.

2voto

chowdhry Puntos 1

Como mencionó @SamPassmore, se puede utilizar el Análisis de Desviación (ver por ejemplo car::Anova() para algo similar) para obtener algo más o menos equivalente al $F$ -pero con un $\chi^2$ distribución. En relación con esto está la prueba de la razón de verosimilitud (comparación de su modelo con el modelo nulo), pero estas pruebas sólo funcionan bien asintóticamente.

Como alternativa, puede consultar el AIC, o medidas relacionadas como el BIC.

Sin embargo, tenga en cuenta: Para este tipo de modelo, es difícil obtener algo como el valor p por las mismas razones por las que es difícil definir un $R^2$ -valor, véase por ejemplo esto "Sermón" de Doug Bates .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X