utilisation des poids dans svyglm vs glm

18

Je voudrais savoir en quoi le traitement des poids diffère entre svyglmetglm

J'utilise le twangpackage dans R pour créer des scores de propension qui sont ensuite utilisés comme poids, comme suit (ce code provient de la twangdocumentation):

library(twang)
library(survey)
set.seed(1)

data(lalonde)

ps.lalonde <- ps(treat ~ age + educ + black + hispan + nodegree + married + re74 + re75,
 data = lalonde)

lalonde$w <- get.weights(ps.lalonde, stop.method="es.mean")
design.ps <- svydesign(ids=~1, weights=~w, data=lalonde)

glm1 <- svyglm(re78 ~ treat, design=design.ps)

summary(glm1)

...
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   6685.2      374.4  17.853   <2e-16 ***
treat         -432.4      753.0  -0.574    0.566    

Comparez cela à:

glm11 <- glm(re78 ~ treat, weights=w , data=lalonde)
summary(glm11)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   6685.2      362.5  18.441   <2e-16 ***
treat         -432.4      586.1  -0.738    0.461  

Les estimations des paramètres sont donc les mêmes, mais les erreurs standard pour le traitement sont assez différentes.

En quoi le traitement des poids diffère-t-il entre svyglmet glm?

Joe King
la source

Réponses:

11

Il existe de nombreux types de poids différents et ils deviennent un peu déroutants. Vous devez être très prudent lorsque vous utilisez différentes fonctions ou logiciels que vous utilisez le type de poids que vous pensez utiliser.

La fonction svyglm utilise des poids d'enquête - ceux-ci pondèrent l'importance de chaque cas pour les rendre représentatifs (les uns aux autres, après le twang). Je ne sais pas exactement quel poids fait glm () - je pense qu'ils représentent la précision des mesures. (Si vous utilisez la famille binomiale, leur signification est différente).

Les poids de sondage (dans surveyglm) sont les poids que vous voulez, pour vous donner les erreurs standard correctes.

(Il existe également des pondérations de fréquence, des pondérations analytiques et des pondérations d'importance).

Jeremy Miles
la source
(+1) merci. connaissez-vous une référence accessible pour les poids d'enquête, autre que les documents pour surveyglm)?
Joe King le
1
J'aime le livre de Lumley: amazon.com/Complex-Surveys-Analysis-Series-Methodology/dp/…
Jeremy Miles
1
Merci pour la référence., Par accessible, je voulais dire quelque chose de disponible en ligne, désolé. Je n'ai pas facilement accès à de bonnes bibliothèques ....
Joe King
Hmmm ... Je ne me souviens pas avoir rencontré quoi que ce soit, mais je vais voir ce que je peux trouver.
Jeremy Miles
9

surveycalcule les erreurs standard en tenant compte de la perte de précision introduite par les poids d'échantillonnage. Les poids en glmajustent simplement le poids donné aux erreurs dans l'estimation des moindres carrés, de sorte que les erreurs standard ne sont pas correctes. Voici une sélection de Lumley (2010):

Dans une analyse basée sur un modèle, il serait nécessaire de spécifier correctement la partie aléatoire du modèle pour obtenir les erreurs standard correctes, mais toutes nos estimations d'erreur standard sont basées sur le plan et sont donc valides quel que soit le modèle. Il convient de noter que les erreurs standard «sandwich», «robustes au modèle» ou «cohérentes à l'hétéroscédasticité» parfois utilisées dans l'analyse de régression basée sur le modèle sont presque identiques aux erreurs standard basées sur le plan que nous utiliserons; la principale différence réside dans le traitement de la stratification.

Donc, sans strates dans votre conception, vous constaterez probablement que l'utilisation sandwichvous donnera des estimations SE identiques ou presque identiques.

library(sandwich)
coefs <- vcovHC(glm11, type="HC0")
lmtest::coeftest(glm11,coefs)

Dans mon test, ils n'ont pas calculé exactement en utilisant "HC0" ou "HC1", mais étaient très proches. svyglmrapporte désormais également une valeur z au lieu d'une valeur t.

commscho
la source
2
Si utile à un lecteur futur: coeftestest du package R lmtest.
swihart