Application de la règle de Rubin pour combiner des ensembles de données à imputation multiple

8

J'espère mettre en commun les résultats d'un ensemble d'analyses assez basique effectué sur une multiplicité de données imputées (par exemple régression multiple, ANOVA). L'imputation multiple et les analyses ont été effectuées dans SPSS, mais SPSS ne fournit pas de résultats groupés pour quelques statistiques, y compris la valeur F, la matrice de covariance, le R au carré, etc.

J'ai fait quelques tentatives pour résoudre ce problème en m'aventurant dans R ou en essayant des macros disponibles et qui n'ont pas réussi à résoudre le problème (par exemple, en rencontrant des problèmes avec la mise en commun des statistiques pour plus de 5 imputations dans les souris, par exemple).

À ce stade, je voudrais essayer de les calculer à la main, en appliquant la règle de Rubin, en utilisant la sortie générée par SPSS. Cependant, je ne sais pas comment je peux dériver la variance intra-imputation ( ) en fonction de la sortie générée par SPSS. U¯=1mj=1mUj

J'apprécierais vraiment une instruction détaillée à ce sujet.

user81715
la source
Vous vous demandez simplement ce que signifient les symboles dans cette formule? Savez-vous ce que représente dans la sortie SPSS? U
gung - Réintègre Monica
Pour la production d'ANOVA en particulier (dans le cadre de la régression linéaire), la statistique F est indiquée avec les sommes des carrés, df et la moyenne des carrés. J'essaie spécifiquement de comprendre comment calculer la composante de variance à l'intérieur de l'imputation pour la statistique F.
user81715

Réponses:

8

Les règles de Rubin ne peuvent être appliquées qu'aux paramètres suivant une distribution normale. Pour les paramètres avec une distribution F ou Chi carré, un ensemble de formules différent est nécessaire:

  • Allison, PD (2002). Données manquantes. Newbury Park, Californie: Sage.

Pour effectuer une ANOVA sur plusieurs jeux de données imputés, vous pouvez utiliser les micreadds du package R ( pdf ; miceadds::mi.anova).

Mise à jour 1

Voici un exemple complet:

  1. Exportez vos données de SPSS vers R. Dans Spss, enregistrez votre jeu de données au format .csv

  2. Lisez dans votre jeu de données:

    library(miceadds)   
    dat <– read.csv(file='your-dataset.csv')
    

    Supposons que la est votre variable dépendante et que vous avez deux facteursreading

    • sexe , avec mâle = 0 et femelle = 1
    • traitement , avec contrôle = 0 et «traitement reçu» = 1

    Permet maintenant de les convertir en facteurs:

    dat$gender    <- factor(dat$gender)
    dat$treatment <- factor(dat$treatment)
  3. Convertissez votre ensemble de données en objet mids, là où nous supposons, que la première variable contient le numéro d'imputation (Imputation_ dans SPSS):

    dat.mids <- as.mids(dat)
  4. Vous pouvez maintenant effectuer une ANOVA:

    fit <- mi.anova(mi.res=dat.mids, formula="reading~gender*treatment", type=3)
    summary(fit)
    

Update 2 Voici une réponse à votre deuxième commentaire:

Ce que vous décrivez ici est un problème lié à l' importation / export de données entre SPSS et R. Vous pouvez essayer d'importer le .savfichier directement dans R et il y a un tas de paquets dédiés pour cela: foreign, rio, gdata, Hmisc, etc. Je préfère le sens csv , mais c'est une question de goût et / ou dépend de la nature de votre problème. Vous devriez peut-être également consulter certains didacticiels sur YouTube ou d'autres sources sur Internet.

library(foreign)
dat <- read.spss(file='path-to-sav', use.value.labels=F, to.data.frame=T)

Update 3 Voici une réponse à votre premier commentaire:

Oui, vous pouvez faire votre analyse dans SPSS et regrouper les valeurs F miceadds(veuillez noter que cet exemple est tiré de la miceadds::micombine.Fpage d'aide):

library(miceadds)
Fvalues <- c(6.76 , 4.54 , 4.23 , 5.45 , 4.78, 6.76 , 4.54 , 4.23 , 5.45 , 4.78, 
             6.76 , 4.54 , 4.23 , 5.45 , 4.78, 6.76 , 4.54 , 4.23 , 5.45 , 4.78 )
micombine(Fvalues, df1=4)
Thomas
la source
Merci pour votre suggestion. J'ai en fait essayé les microdisques, mais un problème que j'ai rencontré était la mise en commun de la valeur F pour les 20 ensembles de données imputés et pas seulement les 5 que les souris sont programmées pour lire par défaut (je crois). J'ai essayé d'entrer les 20 valeurs f obtenues à partir de la sortie SPSS et j'ai utilisé des souris pour regrouper ces estimations. Cette méthode serait-elle acceptable (c.-à-d. Que l'imputation dans SPSS, regroupe ces estimations chez la souris)? S'il y a un moyen de lire les 20 imputations dans MICE, je l'apprécierais. Merci encore!
user81715
J'ai mis à jour ma réponse avec un exemple complet de spss à miceadds.
Thomas
Merci encore. Je vais essayer de faire ça et j'espère faire un suivi avec les résultats!
user81715
Soit dit en passant: les souris ne se limitent à aucun nombre d'imputations. J'utilise souvent des souris avec m> 20 imputations. Obtenir les estimations de SPSS et les regrouper dans des souris est difficile et fastidieux, car les souris supposent par défaut que toutes les étapes sont effectuées à l'intérieur de la portée du package. Si ma réponse vous a aidé, veuillez la marquer comme correcte ou voter positivement!
Thomas
> dat IV1) Erreur dans ( , "IV1", valeur = entier (0)): le remplacement a 0 lignes, les données ont 10> dat.mids = as.mids (dat) Erreur dans les souris (données [ data [, .imp] == 0, -c (.imp, .id)], m = max (as.numeric (data [,: Les données doivent contenir au moins deux colonnes> fit = mi.anova (mi.res) = dat.mids, formule = "DV ~ IV1 * IV2 * INT", type = 3) résumé (fit) Erreur: symbole inattendu dans "fit = mi.anova (mi.res = dat.mids, formule =" DV ~ IV1 * IV2 * INT ", type = 3) résumé">IV1=factor(dat$<-.data.frame*tmp*
user81715
7

Vous avez correctement noté l'estimateur groupé:

U¯=1mi=1mUi

Où représente les résultats analytiques du ème ensemble de données imputé. Normalement, les résultats analytiques ont une distribution d'approximation normale à partir de laquelle nous tirons une inférence ou créons des limites de confiance. Cela se fait principalement en utilisant la valeur moyenne ( ) et son erreur standard. Les tests T, les régressions linéaires, les régressions logistiques et, fondamentalement, la plupart des analyses peuvent être résumés de manière adéquate en termes de cette valeur et de son erreur standard .UiiUiUise(Ui)

Les règles de Rubin utilisent la loi de la variance totale pour noter la variance comme la somme d'une variance d'imputation entre et à l'intérieur:

var(U¯)=E[var(U¯|Ui)]+var(E[U¯|Ui])

Le premier terme est la variance intra telle que où est la variance du résultat de l'analyse du ème ensemble de données complet ou imputé. Le dernier terme est la variance entre imputations: . Je n'ai jamais vraiment saisi la correction DF ici, mais c'est fondamentalement l'approche acceptée.E[var(U¯|Ui)=1mi=1mViViivar(E[U¯|Ui])=M+1M1i=1m(UiU¯)2

Quoi qu'il en soit, étant donné que le nombre d'imputations recommandé est faible (Rubin suggère aussi peu que 5), il est généralement possible de calculer ce nombre en ajustant manuellement chaque analyse. Un exemple manuel est répertorié ci-dessous:

require(mice)
set.seed(123)
nhimp <- mice(nhanes)
sapply(1:5, function(i) {
  fit <- lm(chl ~ bmi, data=complete(nhimp, i))
  print(c('coef'=coef(fit)[2], 'var'=vcov(fit)[2, 2]))
})

Donne la sortie suivante:

coef.bmi      var 
2.123417 4.542842 
3.295818 3.801829 
2.866338 3.034773 
1.994418 4.124130 
3.153911 3.531536

Ainsi, la variance intra est la moyenne des variances d'estimation ponctuelle spécifiques à l'imputation: 3,8 (moyenne de la deuxième colonne). La variance entre est la variance de 0,35 de la première colonne). En utilisant la correction DF, nous obtenons la variance 4.23. Cela correspond à la poolcommande donnée dans le micepackage.

> fit <- with(data=nhimp,exp=lm(chl~bmi))
> summary(pool(fit))
                  est        se        t       df   Pr(>|t|)     lo 95      hi 95 nmis       fmi     lambda
(Intercept) 119.03466 54.716451 2.175482 19.12944 0.04233303  4.564233 233.505080   NA 0.1580941 0.07444487
bmi           2.68678  2.057294 1.305978 18.21792 0.20781073 -1.631731   7.005291    9 0.1853028 0.10051760

qui montre le SE = 2,057 pour le coefficient du modèle, (variance = SE ** 2 = 4,23).

Je ne vois pas comment l'augmentation du nombre de jeux de données imputés crée un problème particulier. Si vous ne pouvez pas fournir un exemple de l'erreur, je ne sais pas comment être plus utile. Mais la combinaison manuelle est certaine de s'adapter à une variété de stratégies de modélisation.

Cet article examine d'autres façons dont la loi de la variance totale peut dériver d'autres estimations de la variance de l'estimation groupée. En particulier, les auteurs soulignent (à juste titre) que l'hypothèse nécessaire pour les règles de Rubin n'est pas la normalité des estimations ponctuelles mais quelque chose appelé la convivialité. Normalité WRT, la plupart des estimations ponctuelles provenant de modèles de régression ont une convergence rapide sous le théorème de la limite centrale, et le bootstrap peut vous le montrer.

AdamO
la source
pouvez-vous expliquer comment vous êtes passé à 4,23 de 3,8 (moyenne des estimations de la variance pour chaque ensemble de données imputé) et de 0,35 (variance des estimations de coefficient pour chacun des cinq ensembles de données)? Il me manque une étape.
llewmills
1
@llewmills hmm la correction DF doit avoir été et non . (1+1/m)(m1)/(m+1)
AdamO
merci @AdamO. Je suppose que vous vouliez dire , (plutôt que ) parce que cela a donné le résultat exact en tant que . m+1m1+1mpool(fit)
llewmills
Je suppose que vous ne connaissez pas la formule de mise en commun de la valeur p @AdamO?
llewmills
1
@llewmills pourquoi calculer 5 valeurs p? Vous avez une grande moyenne et une grande SE, combinez-les maintenant et calculez une valeur de p pour l'analyse imputée multipliée.
AdamO