Anwendung der Rubin-Regel zum Kombinieren mehrfach unterstellter Datensätze

8

Ich hoffe, die Ergebnisse einer ziemlich einfachen Analyse zusammenfassen zu können, die mit mehrfach unterstellten Daten durchgeführt wurde (z. B. multiple Regression, ANOVA). Die mehrfache Imputation und die Analysen wurden in SPSS abgeschlossen, aber SPSS liefert keine gepoolten Ergebnisse für einige Statistiken, einschließlich F-Wert, Kovarianzmatrix, R-Quadrat usw.

Ich habe einige Versuche unternommen, um dieses Problem zu beheben, indem ich mich in R gewagt habe oder Makros ausprobiert habe, die verfügbar sind und das Problem nicht erfolgreich gelöst haben (z. B. Probleme beim Poolen der Statistiken für mehr als 5 Imputationen in Mäusen).

An dieser Stelle möchte ich versuchen, diese von Hand unter Anwendung der Rubin-Regel unter Verwendung der von SPSS generierten Ausgabe zu berechnen. Ich bin mir jedoch nicht sicher, wie ich die Varianz innerhalb der Imputation ( ) basierend auf der von SPSS erzeugten Ausgabe . U.¯=1mj=1mU.j

Ich würde mich sehr über eine ausführliche Anleitung dazu freuen.

user81715
quelle
Fragen Sie sich nur, was die Symbole in dieser Formel bedeuten? Wissen Sie, wofür in der SPSS-Ausgabe steht? U.
Gung - Reinstate Monica
Insbesondere für die ANOVA-Ausgabe (als Teil der linearen Regression) wird die F-Statistik zusammen mit den Summen der Quadrate, df und des mittleren Quadrats angegeben. Ich versuche speziell herauszufinden, wie die Varianzkomponente innerhalb der Imputation für die F-Statistik berechnet werden kann.
user81715

Antworten:

8

Rubins Regeln können nur auf Parameter angewendet werden, die einer Normalverteilung folgen. Für Parameter mit einer F- oder Chi-Quadrat-Verteilung wird ein anderer Satz von Formeln benötigt:

  • Allison, PD (2002). Fehlende Daten. Newbury Park, Kalifornien: Salbei.

Für die Durchführung einer ANOVA für mehrere unterstellte Datensätze können Sie das R-Paket miceadds ( pdf ; miceadds::mi.anova) verwenden.

Update 1

Hier ist ein vollständiges Beispiel:

  1. Exportieren Sie Ihre Daten von SPSS nach R. Speichern Sie in Spss Ihren Datensatz als .csv

  2. Lesen Sie Ihren Datensatz ein:

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

    Nehmen wir an, dass readinG Ihre abhängige Variable ist und dass Sie zwei Faktoren haben

    • Geschlecht , mit männlich = 0 und weiblich = 1
    • Behandlung mit Kontrolle = 0 und 'erhaltene Behandlung' = 1

    Lassen Sie uns sie nun in Faktoren umwandeln:

    dat$gender    <- factor(dat$gender)
    dat$treatment <- factor(dat$treatment)
  3. Konvertieren Sie Ihren Datensatz in ein Mittenobjekt. Wir gehen davon aus, dass die erste Variable die Imputationsnummer enthält (Imputation_ in SPSS):

    dat.mids <- as.mids(dat)
  4. Jetzt können Sie eine ANOVA durchführen:

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

Update 2 Dies ist eine Antwort auf Ihren zweiten Kommentar:

Was Sie beschreiben , ist hier eine Daten - Import / Export verwandtes Problem zwischen SPSS und R. Sie könnten versuchen , die zu importierende .savDatei direkt in R und es gibt eine Reihe von speziellen Paketen für das: foreign, rio, gdata, Hmisc, usw. Ich ziehe die csv-Wege , aber das ist Geschmackssache und / oder hängt von der Art Ihres Problems ab. Vielleicht sollten Sie auch einige Tutorials auf Youtube oder anderen Quellen im Internet lesen.

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

Update 3 Dies ist eine Antwort auf Ihren ersten Kommentar:

Ja, Sie können Ihre Analyse in SPSS durchführen und die F-Werte in bündeln miceadds(bitte beachten Sie, dass dieses Beispiel von der miceadds::micombine.FHilfeseite stammt):

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
quelle
Danke für deinen Vorschlag. Ich habe tatsächlich Miceadds ausprobiert, aber ein Problem, auf das ich gestoßen bin, war das Zusammenführen des F-Werts für alle 20 unterstellten Datensätze und nicht nur für die 5, für deren Lesen Mäuse standardmäßig programmiert sind (glaube ich). Ich habe versucht, alle 20 f-Werte einzugeben, die ich aus der SPSS-Ausgabe erhalten habe, und Mäuse verwendet, um diese Schätzungen zu bündeln. Wäre diese Methode akzeptabel (dh Imputation in SPSS, Pool diese Schätzungen in Mäuse-Adds)? Wenn es eine Möglichkeit gibt, alle 20 Imputationen in MICE lesen zu lassen, würde ich es begrüßen. Danke noch einmal!
user81715
Ich habe meine Antwort mit einem vollständigen Beispiel von spss zu miceadds aktualisiert.
Thomas
Danke nochmal. Ich werde versuchen, dies auszuführen und hoffe, die Ergebnisse weiter zu verfolgen!
user81715
Übrigens: Mäuse sind nicht auf eine beliebige Anzahl von Imputationen beschränkt. Ich benutze oft Mäuse mit m> 20 Imputationen. Es ist schwierig und mühsam, die Schätzungen aus SPSS herauszuholen und in Mäusen zusammenzufassen, da Mäuse standardmäßig davon ausgehen, dass alle Schritte innerhalb des Paketbereichs ausgeführt werden. Wenn meine Antwort Ihnen geholfen hat, markieren Sie sie bitte als richtig oder positiv!
Thomas
ichV.1=feinctÖr(deint$<-.data.frame*tmp*
7

Sie haben den gepoolten Schätzer korrekt notiert:

U.¯=1mich=1mU.ich

U.ichichU.ichU.ichse(U.ich)

Rubins Regeln verwenden das Gesetz der Gesamtvarianz , um die Varianz als die Summe einer zwischen und innerhalb der Imputationsvarianz aufzuschreiben:

var(U.¯)=E.[var(U.¯|U.ich)]]+var(E.[U.¯|U.ich]])

E.[var(U.¯|U.ich)=1mich=1mV.ichV.ichichvar(E.[U.¯|U.ich]])=M.+1M.- -1ich=1m(U.ich- -U.¯)2

Da die empfohlene Anzahl von Imputationen gering ist (Rubin schlägt nur 5 vor), ist es normalerweise möglich, diese Anzahl durch manuelles Anpassen jeder Analyse zu berechnen. Ein Beispiel von Hand ist unten aufgeführt:

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]))
})

Gibt die folgende Ausgabe:

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

Die innere Varianz ist also der Durchschnitt der imputationsspezifischen Punktschätzungsvarianzen: 3,8 (Durchschnitt der zweiten Spalte). Die Zwischenvarianz beträgt 0,35 Varianz der ersten Spalte. Mit der DF-Korrektur erhalten wir die Varianz 4.23. Dies stimmt mit dem poolim micePaket angegebenen Befehl überein .

> 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

Dies zeigt die SE = 2,057 für den Modellkoeffizienten (Varianz = SE ** 2 = 4,23).

Ich kann nicht erkennen, wie die Erhöhung der Anzahl der unterstellten Datensätze zu einem bestimmten Problem führt. Wenn Sie kein Beispiel für den Fehler angeben können, weiß ich nicht, wie ich hilfreicher sein kann. Die Kombination von Hand ist jedoch sicher für eine Vielzahl von Modellierungsstrategien geeignet.

In diesem Artikel werden andere Möglichkeiten erörtert, wie das Gesetz der Gesamtvarianz andere Schätzungen der Varianz der gepoolten Schätzung ableiten kann. Insbesondere weisen die Autoren (richtig) darauf hin, dass die notwendige Annahme für Rubins Regeln nicht die Normalität der Punktschätzungen ist, sondern etwas, das als Kongenialität bezeichnet wird. WRT-Normalität, die meisten Punktschätzungen, die aus Regressionsmodellen stammen, weisen unter dem zentralen Grenzwertsatz eine schnelle Konvergenz auf, und der Bootstrap kann Ihnen dies zeigen.

AdamO
quelle
Können Sie erklären, wie Sie von 3,8 (Mittelwert der Varianzschätzungen für jeden unterstellten Datensatz) und 0,35 (Varianz der Koeffizientenschätzungen für jeden der fünf Datensätze) auf 4,23 gekommen sind? Mir fehlt ein Schritt.
Llewmills
1
(1+1/.m)(m- -1)/.(m+1)
m+1m1+1mpool(fit)
Ich nehme nicht an, dass Sie die Formel zum Poolen des p- Werts @AdamO kennen?
Llewmills
1
@llewmills warum würdest du 5 p-Werte berechnen? Sie haben einen großen Mittelwert und eine große SE, kombinieren Sie sie jetzt und berechnen Sie einen p-Wert für die mehrfach unterstellte Analyse.
AdamO