R-Quadrat im linearen Modell versus Abweichung im verallgemeinerten linearen Modell?

13

Hier ist mein Kontext für diese Frage: Soweit ich weiß, können wir keine gewöhnliche Regression der kleinsten Quadrate in R ausführen, wenn wir gewichtete Daten und das surveyPaket 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).

In OLS und durch die lm()Funktion wird ein R-Quadrat-Wert berechnet, dessen Interpretation ich verstehe. Scheint dies svyglm()jedoch nicht zu berechnen und gibt mir stattdessen eine Abweichung, die meiner kurzen Reise durch das Internet zufolge ein Maß für die Anpassungsgüte ist, das anders interpretiert wird als ein R-Quadrat.

Ich denke also, ich habe im Wesentlichen zwei Fragen, auf die ich gehofft habe, eine Richtung zu finden:

  1. Warum können wir OLS im surveyPaket nicht ausführen , obwohl dies anscheinend mit gewichteten Daten in Stata möglich ist?
  2. Was ist der Unterschied in der Interpretation zwischen der Abweichung eines verallgemeinerten linearen Modells und einem r-Quadrat-Wert?
RickyB
quelle
2
Willkommen auf der Seite, @RichardBlissett, +1 für eine gute Frage. Die OLS-Regression ist ein Sonderfall des verallgemeinerten linearen Modells, bei dem die Verknüpfungsfunktion die Identitätsfunktion ist und die Antwortverteilung normal ist (siehe meine Antwort hier: Differenz zwischen logit- und probit-Modellen für weitere Informationen). Es gibt 'Pseudo-R2s für GLiMs, aber sie sind umstritten (siehe hier: Welche -Pseudo-r2-für-die-logistische-Regression-zu-melden , für weitere Informationen).
gung - Wiedereinsetzung von Monica
1
Vielen Dank für Ihren Kommentar (und es tut mir leid, dass ich so lange gebraucht habe, um zu antworten ... Ich habe diese Frage verloren und hatte völlig vergessen, dass ich sie nicht auf SO gestellt habe). Das waren erstaunliche Erklärungen, danke. Ich schätze, meine Frage lautet dann: Ich gehe davon aus, dass diese Statistikpakete kein OLS ausführen, da es ein grundlegendes Problem bei der Ausführung mit umfragegewichteten Daten gibt. Ich kann jedoch nicht herausfinden, um was es sich handelt.
RickyB
1
Die Abweichung ist eine Verallgemeinerung der Varianz, und die erwartete Abweichung ist eine Verallgemeinerung des R-Quadrats. Das Problem ist, dass es keine einfache oder allgemeine Antwort auf die erwartete Abweichung zu geben scheint, siehe beispielsweise hier: stats.stackexchange.com/questions/124306/…
nukimov

Antworten:

2

Soweit ich weiß, können wir keine gewöhnliche Regression der kleinsten Quadrate in R ausführen, wenn wir gewichtete Daten und das surveyPaket 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).

svyglmGibt 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 surveyPaket nicht ausführen , obwohl dies anscheinend mit gewichteten Daten in Stata möglich ist?

indem Sie angeben, dass Sie das tatsächlich mit dem surveyPaket 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 surveyPaket nie benutzt , sondern es schnell gescannt und Annahmen darüber getroffen, was es tut, wie ich in meiner Antwort dargelegt habe.

Benjamin Christoffersen
quelle