R-cuadrado en el modelo lineal versus desviación en el modelo lineal generalizado?

13

Aquí está mi contexto para esta pregunta: por lo que puedo decir, no podemos ejecutar una regresión de mínimos cuadrados ordinarios en R cuando usamos datos ponderados y el surveypaquete. Aquí, tenemos que usar svyglm(), que en su lugar ejecuta un modelo lineal generalizado (¿qué puede ser lo mismo? Estoy confuso aquí en términos de lo que es diferente).

En OLS y a través de la lm()función, calcula un valor R cuadrado, cuya interpretación sí entiendo. Sin embargo, svyglm()no parece calcular esto y, en cambio, me da una desviación, que mi breve viaje por Internet me dice que es una medida de bondad de ajuste que se interpreta de manera diferente que un R cuadrado.

Así que supongo que esencialmente tengo dos preguntas sobre las que esperaba obtener alguna dirección:

  1. ¿Por qué no podemos ejecutar OLS en el surveypaquete, mientras parece que esto es posible con datos ponderados en Stata?
  2. ¿Cuál es la diferencia en la interpretación entre la desviación de un modelo lineal generalizado y un valor r cuadrado?
RickyB
fuente
2
Bienvenido al sitio, @ RichardBlissett, +1 para una buena pregunta. La regresión de OLS es un caso especial del modelo lineal generalizado, donde la función de enlace es la función de identidad y la distribución de la respuesta es normal (vea mi respuesta aquí: modelos de diferencia entre logit y probit , para más información). Hay 'pseudo-R2 para GLiM, pero son controvertidos (ver aquí: which-pseudo-r2-to-report-for-logistic-regression , para más información).
gung - Restablece a Monica
1
Muchas gracias por su comentario (y lo siento, me tomó tanto tiempo responder ... Perdí esta pregunta y olvidé por completo que no la puse en SO). Fueron un par de explicaciones increíbles, gracias. Supongo que mi pregunta, entonces, es esta: supongo, entonces, que estos paquetes estadísticos no ejecutan OLS porque hay algún problema fundamental al ejecutar eso con datos ponderados por encuestas. Sin embargo, parece que no puedo entender cuál es ese problema.
RickyB
1
La desviación es una generalización de la varianza, y la desviación esperada es una generalización de R-cuadrado. El problema es que no parece haber una respuesta fácil o general a la desviación esperada, ver por ejemplo aquí: stats.stackexchange.com/questions/124306/…
nukimov

Respuestas:

2

Por lo que puedo decir, no podemos ejecutar una regresión ordinaria de mínimos cuadrados en R cuando usamos datos ponderados y el surveypaquete. Aquí, tenemos que usar svyglm(), que en su lugar ejecuta un modelo lineal generalizado (¿qué puede ser lo mismo? Estoy confuso aquí en términos de lo que es diferente).

svyglmle dará un modelo lineal si lo usa, family = gaussian()que parece ser el predeterminado de la viñeta de la encuesta (en la versión 3.32-1). Vea el ejemplo donde encuentran el regmodel.

Parece que el paquete solo se asegura de usar los pesos correctos cuando llama glm. Por lo tanto, si su resultado es continuo y asume que normalmente está distribuido en iid, entonces debe usarlo family = gaussian(). El resultado es un modelo lineal ponderado. Esta respuesta

¿Por qué no podemos ejecutar OLS en el surveypaquete, mientras parece que esto es posible con datos ponderados en Stata?

al afirmar que efectivamente puedes hacer eso con el surveypaquete. En cuanto a la siguiente pregunta

¿Cuál es la diferencia en la interpretación entre la desviación de un modelo lineal generalizado y un valor r cuadrado?

Hay una fórmula sencilla para obtener el R2con family = gaussian()como algunas personas han mencionado en los comentarios. Agregar pesas tampoco cambia nada como lo muestro a continuación

> set.seed(42293888)
> x <- (-4):5
> y <- 2 + x + rnorm(length(x))
> org <- data.frame(x = x, y = y, weights = 1:10)
> 
> # show data and fit model. Notice the R-squared
> head(org) 
   x          y weights
1 -4  0.4963671       1
2 -3 -0.5675720       2
3 -2 -0.3615302       3
4 -1  0.7091697       4
5  0  0.6485203       5
6  1  3.8495979       6
> summary(lm(y ~ x, org, weights = weights))

Call:
lm(formula = y ~ x, data = org, weights = weights)

Weighted Residuals:
    Min      1Q  Median      3Q     Max 
-3.1693 -0.4463  0.2017  0.9100  2.9667 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.7368     0.3514   4.942  0.00113 ** 
x             0.9016     0.1111   8.113 3.95e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 2.019 on 8 degrees of freedom
Multiple R-squared:  0.8916,    Adjusted R-squared:  0.8781 
F-statistic: 65.83 on 1 and 8 DF,  p-value: 3.946e-05

> 
> # make redundant data set with redundant rows
> idx <- unlist(mapply(rep, x = 1:nrow(org), times = org$weights))
> org_redundant <- org[idx, ]
> head(org_redundant)
     x          y weights
1   -4  0.4963671       1
2   -3 -0.5675720       2
2.1 -3 -0.5675720       2
3   -2 -0.3615302       3
3.1 -2 -0.3615302       3
3.2 -2 -0.3615302       3
> 
> # fit model and notice the same R-squared
> summary(lm(y ~ x, org_redundant))

Call:
lm(formula = y ~ x, data = org_redundant)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.19789 -0.29506 -0.05435  0.33131  2.36610 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.73680    0.13653   12.72   <2e-16 ***
x            0.90163    0.04318   20.88   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.7843 on 53 degrees of freedom
Multiple R-squared:  0.8916,    Adjusted R-squared:  0.8896 
F-statistic: 436.1 on 1 and 53 DF,  p-value: < 2.2e-16

> 
> # glm gives you the same with family = gaussian()  
> # just compute the R^2 from the deviances. See 
> #   /stats//a/46358/81865
> fit <- glm(y ~ x, family = gaussian(), org_redundant)
> fit$coefficients
(Intercept)           x 
  1.7368017   0.9016347 
> 1 - fit$deviance / fit$null.deviance
[1] 0.8916387

La desviación es solo la suma de los errores cuadrados cuando se usa family = gaussian().

Advertencias

Supongo que quieres un modelo lineal de tu pregunta. Además, nunca he usado el surveypaquete, pero lo escaneé rápidamente e hice suposiciones sobre lo que hace, lo que afirmo en mi respuesta.

Benjamin Christoffersen
fuente