R au carré dans le modèle linéaire vers la déviance dans le modèle linéaire généralisé?


13

Voici mon contexte pour cette question: D'après ce que je peux dire, nous ne pouvons pas exécuter une régression ordinaire des moindres carrés dans R lors de l'utilisation de données pondérées et du surveypackage. Ici, nous devons utiliser svyglm(), qui exécute à la place un modèle linéaire généralisé (qui peut être la même chose? Je suis flou ici en termes de ce qui est différent).

Dans OLS et via la lm()fonction, il calcule une valeur R au carré, dont je comprends l'interprétation. Cependant, svyglm()ne semble pas calculer cela et me donne plutôt une déviance, que mon bref voyage sur Internet me dit est une mesure de qualité d'ajustement qui est interprétée différemment d'un R au carré.

Je suppose donc que j'ai essentiellement deux questions sur lesquelles j'espérais obtenir une direction:

  1. Pourquoi ne pouvons-nous pas exécuter OLS dans le surveypackage, alors qu'il semble que cela soit possible avec des données pondérées dans Stata?
  2. Quelle est la différence d'interprétation entre la déviance d'un modèle linéaire généralisé et une valeur r au carré?

2
Bienvenue sur le site, @RichardBlissett, +1 pour une bonne question. La régression OLS est un cas particulier du modèle linéaire généralisé, où la fonction de lien est la fonction d'identité et la distribution de réponse est normale (voir ma réponse ici: modèles différence-entre-logit-et-probit , pour plus d'informations). Il existe des «pseudo-R2 pour les GLiM, mais ils sont controversés (voir ici: quelle-pseudo-r2-à-signaler-pour-la-régression logistique , pour plus d'informations).
gung - Réintégrer Monica

1
Merci beaucoup pour votre commentaire (et désolé, il m'a fallu si longtemps pour répondre ... J'ai perdu cette question et j'avais complètement oublié que je ne l'avais pas mise sur SO). Ce fut un couple incroyable d'explications, merci. Je suppose donc que ma question est la suivante: je suppose que ces progiciels statistiques n'exécutent pas OLS car il y a un problème fondamental à exécuter cela avec des données pondérées par l'enquête. Je n'arrive pas à comprendre, cependant, quel est ce problème.
RickyB

1
La déviance est une généralisation de la variance, et la déviance attendue est une généralisation du R-carré. Le problème est qu'il ne semble pas y avoir de réponse facile ou générale à la déviance attendue, voir par exemple ici: stats.stackexchange.com/questions/124306/…
nukimov

Réponses:


2

D'après ce que je peux dire, nous ne pouvons pas exécuter une régression des moindres carrés ordinaires dans R lorsque nous utilisons des données pondérées et le surveypackage. Ici, nous devons utiliser svyglm(), qui exécute à la place un modèle linéaire généralisé (qui peut être la même chose? Je suis flou ici en termes de ce qui est différent).

svyglmvous donnera un modèle linéaire si vous utilisez family = gaussian()ce qui semble être la valeur par défaut de la vignette d'enquête (dans la version 3.32-1). Voir l'exemple où ils trouvent le regmodel.

Il semble que le package s'assure simplement que vous utilisez les poids corrects lors de l'appel glm. Ainsi, si votre résultat est continu et que vous supposez qu'il est normalement distribué, vous devez l'utiliser family = gaussian(). Le résultat est un modèle linéaire pondéré. Cette réponse

Pourquoi ne pouvons-nous pas exécuter OLS dans le surveypackage, alors qu'il semble que cela soit possible avec des données pondérées dans Stata?

en déclarant que vous pouvez effectivement le faire avec le surveypackage. Quant à la question suivante

Quelle est la différence d'interprétation entre la déviance d'un modèle linéaire généralisé et une valeur r au carré?

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

La déviance n'est que la somme des erreurs carrées lorsque vous utilisez family = gaussian().

Avertissements

Je suppose que vous voulez un modèle linéaire de votre question. De plus, je n'ai jamais utilisé le surveypackage, mais je l'ai rapidement parcouru et j'ai fait des hypothèses sur ce qu'il fait, ce que je déclare dans ma réponse.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.