Por lo que puedo decir, no podemos ejecutar una regresión ordinaria de mínimos cuadrados en R cuando usamos datos ponderados y el survey
paquete. 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).
svyglm
le 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 survey
paquete, mientras parece que esto es posible con datos ponderados en Stata?
al afirmar que efectivamente puedes hacer eso con el survey
paquete. 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 survey
paquete, pero lo escaneé rápidamente e hice suposiciones sobre lo que hace, lo que afirmo en mi respuesta.