Soweit ich weiß, können wir keine gewöhnliche Regression der kleinsten Quadrate in R ausführen, wenn wir gewichtete Daten und das survey
Paket verwenden. Hier müssen wir verwenden svyglm()
, die stattdessen ein verallgemeinertes lineares Modell ausführt (was das gleiche sein kann? Ich bin hier in Bezug auf das, was anders ist, verschwommen).
svyglm
Gibt Ihnen ein lineares Modell, wenn Sie es verwenden. Dies family = gaussian()
scheint das Standardmodell der Vermessungsvignette (in Version 3.32-1) zu sein. Sehen Sie sich das Beispiel an, in dem sie das finden regmodel
.
Es scheint, dass das Paket nur sicherstellt, dass Sie die richtigen Gewichte verwenden, wenn es aufruft glm
. Wenn Ihr Ergebnis also kontinuierlich ist und Sie davon ausgehen, dass es normal verteilt ist, sollten Sie verwenden family = gaussian()
. Das Ergebnis ist ein gewichtetes lineares Modell. Diese Antwort
Warum können wir OLS im survey
Paket nicht ausführen , obwohl dies anscheinend mit gewichteten Daten in Stata möglich ist?
indem Sie angeben, dass Sie das tatsächlich mit dem survey
Paket tun können . Wie für die folgende Frage
Was ist der Unterschied in der Interpretation zwischen der Abweichung eines verallgemeinerten linearen Modells und einem r-Quadrat-Wert?
R2family = gaussian()
> 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
Die Abweichung ist nur die Summe der Quadratfehler, wenn Sie verwenden family = gaussian()
.
Vorbehalte
Ich gehe davon aus, dass Sie ein lineares Modell von Ihrer Frage wollen. Außerdem habe ich das survey
Paket nie benutzt , sondern es schnell gescannt und Annahmen darüber getroffen, was es tut, wie ich in meiner Antwort dargelegt habe.