Mehrfachzuschreibung für fehlende Werte

13

Ich möchte die Imputation verwenden, um fehlende Werte in meinem Datensatz unter bestimmten Bedingungen zu ersetzen.

Zum Beispiel möchte ich, dass die unterstellte Variable x1größer oder gleich der Summe meiner beiden anderen Variablen ist, sagen wir x2und x3. Ich möchte x3auch von entweder 0oder unterstellt werden, >= 14und ich möchte x2von entweder 0oder unterstellt werden >= 16.

Ich habe versucht, diese Einschränkungen in SPSS für die Mehrfachimputation zu definieren, aber in SPSS kann ich nur Maximal- und Minimalwerte definieren. Gibt es eine Möglichkeit, weitere Einschränkungen in SPSS zu definieren, oder kennen Sie ein R-Paket, mit dem ich solche Einschränkungen für die Imputation fehlender Werte definieren kann?

Meine Daten sind wie folgt:

   x1 =c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24)
   x2 = c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0)
   x3 = c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0)
   dat=data.frame(x1=x1, x2=x2, x3=x3)
   > dat
       x1 x2 x3
   1   21  0  0
   2   50 NA  0
   3   31 18  0
   4   15  0  0
   5   36 19  0
   6   82  0 54
   7   14 NA  0
   8   14  0  0
   9   19  0  0
   10  18  0  0
   11  16  0  0
   12  36  0  0
   13 583  0  0
   14  NA NA NA
   15  NA NA NA
   16  NA NA NA
   17  50 22 NA
   18  52 NA  0
   19  26  0  0
   20  24  0  0
Rose
quelle
Ich habe geändert, 0 or 16 or >= 16um 0 or >= 16da >=16den Wert enthält 16. Hoffe, das hat deine Bedeutung nicht durcheinander gebracht. Gleiches gilt für0 or 14 or >= 14
Alexis

Antworten:

16

Eine Lösung besteht darin, Ihre eigenen benutzerdefinierten Imputationsfunktionen für das micePaket zu schreiben . Das Paket ist darauf vorbereitet und das Setup überraschend schmerzfrei.

Zuerst richten wir die Daten wie vorgeschlagen ein:

dat=data.frame(x1=c(21, 50, 31, 15, 36, 82, 14, 14, 19, 18, 16, 36, 583, NA,NA,NA, 50, 52, 26, 24), 
               x2=c(0, NA, 18,0, 19, 0, NA, 0, 0, 0, 0, 0, 0,NA,NA, NA, 22, NA, 0, 0), 
               x3=c(0, 0, 0, 0, 0, 54, 0 ,0, 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, 0, 0))

Als nächstes laden wir das micePaket und sehen, welche Methoden es standardmäßig auswählt:

library(mice)
# Do a non-imputation
imp_base <- mice(dat, m=0, maxit = 0)

# Find the methods that mice chooses
imp_base$method
# Returns: "pmm" "pmm" "pmm"

# Look at the imputation matrix
imp_base$predictorMatrix
# Returns:
#   x1 x2 x3
#x1  0  1  1
#x2  1  0  1
#x3  1  1  0

Das pmmsteht für Predictive Mean Matching - der wahrscheinlich beliebteste Imputationsalgorithmus zur Imputation kontinuierlicher Variablen. Er berechnet den vorhergesagten Wert mithilfe eines Regressionsmodells und wählt die 5 Elemente aus, die dem vorhergesagten Wert am nächsten liegen (nach euklidischem Abstand ). Diese ausgewählten Elemente werden als Spenderpool bezeichnet, und der endgültige Wert wird zufällig aus diesem Spenderpool ausgewählt.

Aus der Vorhersagematrix ergibt sich, dass die Methoden die Variablen übergeben bekommen, die für die Einschränkungen von Interesse sind. Beachten Sie, dass die Zeile die Zielvariable und die Spalte die Prädiktoren ist. Wenn x1 nicht 1 in der x3-Spalte hätte, müssten wir dies in die Matrix einfügen:imp_base$predictorMatrix["x1","x3"] <- 1

Nun zum lustigen Teil, der die Imputationsmethoden generiert. Ich habe hier eine ziemlich grobe Methode gewählt, bei der ich alle Werte verwerfe, wenn sie die Kriterien nicht erfüllen. Dies kann zu einer langen Schleifenzeit führen und es kann möglicherweise effizienter sein, die gültigen Imputationen beizubehalten und nur die verbleibenden zu wiederholen.

# Generate our custom methods
mice.impute.pmm_x1 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    max_sum <- sum(max(x[,"x2"], na.rm=TRUE),
                   max(x[,"x3"], na.rm=TRUE))
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals < max_sum)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x2 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 14)){
        break
      }
    }
    return(vals)
  }

mice.impute.pmm_x3 <- 
  function (y, ry, x, donors = 5, type = 1, ridge = 1e-05, version = "", 
            ...) 
  {
    repeat{
      vals <- mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                              version = "", ...)
      if (all(vals == 0 | vals >= 16)){
        break
      }
    }
    return(vals)
  }

Sobald wir die Methoden definiert haben, ändern wir einfach die vorherigen Methoden. Wenn Sie nur eine einzelne Variable ändern möchten, können Sie einfach verwenden, imp_base$method["x2"] <- "pmm_x2"aber für dieses Beispiel werden wir alle ändern (die Benennung ist nicht erforderlich):

imp_base$method <- c(x1 = "pmm_x1", x2 = "pmm_x2", x3 = "pmm_x3")

# The predictor matrix is not really necessary for this example
# but I use it just to illustrate in case you would like to 
# modify it
imp_ds <- 
  mice(dat, 
       method = imp_base$method, 
       predictorMatrix = imp_base$predictorMatrix)

Schauen wir uns nun den dritten unterstellten Datensatz an:

> complete(imp_ds, action = 3)
    x1 x2 x3
1   21  0  0
2   50 19  0
3   31 18  0
4   15  0  0
5   36 19  0
6   82  0 54
7   14  0  0
8   14  0  0
9   19  0  0
10  18  0  0
11  16  0  0
12  36  0  0
13 583  0  0
14  50 22  0
15  52 19  0
16  14  0  0
17  50 22  0
18  52  0  0
19  26  0  0
20  24  0  0

Ok, das macht den Job. Ich mag diese Lösung, da Sie die Hauptfunktionen huckepack nehmen und nur die Einschränkungen hinzufügen können, die Sie für sinnvoll halten.

Aktualisieren

Um die in den Kommentaren erwähnten rigorosen Einschränkungen @ t0x1n durchzusetzen, möchten wir der Wrapper-Funktion möglicherweise die folgenden Funktionen hinzufügen:

  1. Speichern Sie während der Schleifen gültige Werte, damit Daten aus vorherigen, teilweise erfolgreichen Durchläufen nicht verworfen werden
  2. Ein Fluchtmechanismus, um Endlosschleifen zu vermeiden
  3. Pumpen Sie den Spenderpool auf, nachdem Sie x- mal versucht haben, ohne eine passende Übereinstimmung zu finden (dies gilt hauptsächlich für pmm).

Dies führt zu einer etwas komplizierteren Wrapper-Funktion:

mice.impute.pmm_x1_adv <-   function (y, ry, 
                                      x, donors = 5, 
                                      type = 1, ridge = 1e-05, 
                                      version = "", ...) {
  # The mice:::remove.lindep may remove the parts required for
  # the test - in those cases we should escape the test
  if (!all(c("x2", "x3") %in% colnames(x))){
    warning("Could not enforce pmm_x1 due to missing column(s):",
            c("x2", "x3")[!c("x2", "x3") %in% colnames(x)])
    return(mice.impute.pmm(y, ry, x, donors = 5, type = 1, ridge = 1e-05,
                           version = "", ...))
  }

  # Select those missing
  max_vals <- rowSums(x[!ry, c("x2", "x3")])

  # We will keep saving the valid values in the valid_vals
  valid_vals <- rep(NA, length.out = sum(!ry))
  # We need a counter in order to avoid an eternal loop
  # and for inflating the donor pool if no match is found
  cntr <- 0
  repeat{
    # We should be prepared to increase the donor pool, otherwise
    # the criteria may become imposs
    donor_inflation <- floor(cntr/10)
    vals <- mice.impute.pmm(y, ry, x, 
                            donors = min(5 + donor_inflation, sum(ry)), 
                            type = 1, ridge = 1e-05,
                            version = "", ...)

    # Our criteria check
    correct <- vals < max_vals
    if (all(!is.na(valid_vals) |
              correct)){
      valid_vals[correct] <-
        vals[correct]
      break
    }else if (any(is.na(valid_vals) &
                    correct)){
      # Save the new valid values
      valid_vals[correct] <-
        vals[correct]
    }

    # An emergency exit to avoid endless loop
    cntr <- cntr + 1
    if (cntr > 200){
      warning("Could not completely enforce constraints for ",
              sum(is.na(valid_vals)),
              " out of ",
              length(valid_vals),
              " missing elements")
      if (all(is.na(valid_vals))){
        valid_vals <- vals
      }else{
        valid_vals[is.na(valid_vals)] <- 
          vals[is.na(valid_vals)]
      }
      break
    }
  }
  return(valid_vals)
}

Beachten Sie, dass dies nicht so gut funktioniert. Dies liegt höchstwahrscheinlich daran, dass der vorgeschlagene Datensatz die Einschränkungen in allen Fällen nicht erfüllt, ohne dass sie fehlen. Ich muss die Schleifenlänge auf 400-500 erhöhen, bevor sie sich überhaupt verhält. Ich gehe davon aus, dass dies unbeabsichtigt ist. Ihre Unterstellung sollte nachahmen, wie die tatsächlichen Daten generiert werden.

Optimierung

Das Argument ryenthält die nicht fehlenden Werte, und wir könnten die Schleife möglicherweise beschleunigen, indem wir die Elemente entfernen, die wir als zutreffend eingestuft haben, aber da ich mit den inneren Funktionen nicht vertraut bin, habe ich darauf verzichtet.

Ich denke, das Wichtigste, wenn Sie starke Einschränkungen haben, die Zeit zum Ausfüllen benötigen , ist die Parallelisierung Ihrer Anrechnungen ( siehe meine Antwort auf CrossValidated ). Die meisten haben heute Computer mit 4-8 Kernen und R verwendet standardmäßig nur einen von ihnen. Die Zeit kann (fast) halbiert werden, indem die Anzahl der Kerne verdoppelt wird.

Fehlende Parameter bei der Imputation

In Bezug auf das Problem des x2Fehlens zum Zeitpunkt der Imputation - Mäuse geben tatsächlich niemals fehlende Werte in die x- ein data.frame. Die Mäusemethode beinhaltet das Ausfüllen eines zufälligen Wertes zu Beginn. Der Kettenteil der Imputation begrenzt die Auswirkung von diesem Anfangswert. Wenn Sie sich die mice-Funktion ansehen, finden Sie diese vor dem Aufruf der Imputation (die mice:::sampler-Funktion):

...
if (method[j] != "") {
  for (i in 1:m) {
    if (nmis[j] < nrow(data)) {
      if (is.null(data.init)) {
        imp[[j]][, i] <- mice.impute.sample(y, 
                                            ry, ...)
      }
      else {
        imp[[j]][, i] <- data.init[!ry, j]
      }
    }
    else imp[[j]][, i] <- rnorm(nrow(data))
  }
}
...

Das data.initkann an die miceFunktion geliefert werden und das mice.imput.sample ist ein grundlegendes Stichprobenverfahren.

Besuchsreihenfolge

Wenn die Besuchsreihenfolge wichtig ist, können Sie die Reihenfolge angeben, in der die Funktion micedie Imputationen ausführt. Die Standardeinstellung ist von, 1:ncol(data)aber Sie können festlegen, dass das visitSequencebeliebig ist.

Max Gordon
quelle
+1 Das ist großartiges Zeug, genau das, was ich im Sinn hatte (siehe meinen Kommentar zu Franks Antwort), und mit Sicherheit der Kandidat Nr. 1 für die Prämie ab sofort. Ein paar Dinge stören mich pmm_x1jedoch: (1) Die maximale Summe einer möglichen Kombination von x2und x3aus dem gesamten Datensatz ist viel strenger als die ursprüngliche Einschränkung. Die richtige Sache wäre, dass zu testen , für jede Zeile , x1 < x2 + x3. Je mehr Zeilen Sie haben, desto geringer ist natürlich die Wahrscheinlichkeit, eine solche Einschränkung einzuhalten (da eine einzelne fehlerhafte Zeile alles ruiniert), und desto länger kann die Schleife möglicherweise werden.
t0x1n
(2) Wenn beide x1und x2fehlen, können Sie einen Wert unterstellen, x1für den die Einschränkungen gelten (sagen wir 50), aber wenn x2sie einmal unterstellt werden, sind sie gebrochen (sagen wir, es wird unterstellt, dass sie 55 sind). Gibt es eine Möglichkeit, "horizontal" anstatt vertikal zu unterstellen? So können wir eine einzige Reihe von zurechnen könnte x1, x2und x3und einfach wieder impute es , bis diese bestimmte Zeile fällt unter den Einschränkungen. Das sollte schnell genug gehen, und wenn das erledigt ist, können wir in die nächste Reihe wechseln. Wenn MI von Natur aus "vertikal" ist, haben wir natürlich kein Glück. In diesem Fall vielleicht der Ansatz Aleksandr erwähnt?
t0x1n
Coole Lösung, +1! Könnte besonders praktisch sein, da ich derzeit micePaket verwende. Danke für das Teilen.
Aleksandr Blekh
1
@ t0x1n Ich habe meine Antwort gemäß Ihren Kommentaren mit einer erweiterten Wrapper-Funktion aktualisiert. Wenn Sie tiefer tauchen möchten, empfehle ich Ihnen, mit dem zu spielen, um debug()zu sehen, wie mice.impute.pmmund seine Geschwister unter der Haube arbeiten.
Max Gordon
1
@ t0x1n: Ich schätze - inspiziere deine unterstellten Werte. Wenn sie unrealistisch erscheinen, können Sie meinen Ansatz so wählen, dass nur diejenigen unterstellt werden, die für das Modell weniger zentral sind. In meinem Fall habe ich mich entschieden, solche ohne nachfolgende Röntgenaufnahmen auszuschließen, da sie im Mittelpunkt der Studie stehen und die Imputationen keine klinisch plausiblen Werte liefern (Bein wird nach einer Fraktur länger). Ich bin damit nicht ganz zufrieden, aber es scheint ein vernünftiger Kompromiss zu sein.
Max Gordon
8

Das Nächste, was ich finden konnte, war Amelias vorherige Aufnahme von Informationen. Siehe Kapitel 4.7 in der Vignette , insbesondere 4.7.2:

Prioren auf Beobachtungsebene

Forscher verfügen häufig über zusätzliche Vorinformationen zu fehlenden Datenwerten, die auf früheren Forschungen, einem akademischen Konsens oder persönlichen Erfahrungen beruhen. Amelia kann diese Informationen einbinden, um erheblich verbesserte Imputationen zu erzielen. Mit dem Amelia-Algorithmus können Benutzer informative Bayes'sche Prioritäten zu einzelnen fehlenden Datenzellen anstelle der allgemeineren Modellparameter einfügen, von denen viele nur eine geringe direkte Bedeutung haben.

Die Einbeziehung von Prioren folgt einer grundlegenden Bayes'schen Analyse, bei der sich die Imputation als gewichteter Durchschnitt der modellbasierten Imputation und des vorherigen Mittelwerts herausstellt, wobei die Gewichte Funktionen der relativen Stärke der Daten und Prioren sind: wenn das Modell sehr gute Vorhersagen macht wird die Imputation den Prior herabgewichten und umgekehrt (Honaker und King, 2010).

Die Aussagen zu einzelnen Beobachtungen sollten die Überzeugung des Analytikers über die Verteilung der fehlenden Datenzelle beschreiben. Dies kann entweder in Form eines Mittelwerts und einer Standardabweichung oder eines Kondensationsintervalls erfolgen. Zum Beispiel wissen wir vielleicht, dass 1986 Tari in Thailand um die 40% liegen, aber wir haben einige Unsicherheiten hinsichtlich des genauen Wertes. Unser bisheriger Glaube an die Verteilung der fehlenden Datenzelle konzentriert sich also auf 40 mit einer Standardabweichung, die das Maß an Unsicherheit widerspiegelt, das wir über unseren bisherigen Glauben haben.

Zur Eingabe von Priors müssen Sie eine Priors-Matrix mit vier oder fünf Spalten erstellen. Jede Zeile der Matrix repräsentiert einen Prior für eine Beobachtung oder eine Variable. In jeder Zeile ist der Eintrag in der ersten Spalte die Zeile der Beobachtung und der Eintrag ist die zweite Spalte die Spalte der Beobachtung. In der Vier-Spalten-Prioritäten-Matrix sind die dritte und vierte Spalte der Mittelwert und die Standardabweichung der vorherigen Verteilung des fehlenden Werts.

Während Sie also nicht in der Lage sind, etwas allgemeines zu sagen x1<x2+x3, können Sie Ihren Datensatz durchlaufen und für jeden relevanten Fall eine vorherige Beobachtungsebene hinzufügen. Konstantengrenzen können ebenfalls angewendet werden (z. B. x1, x2 und x3 dürfen nicht negativ sein). Beispielsweise:

priors = matrix(NA, nrow=0, ncol=5);
for (i in seq(1, length(data))) 
{
    x1 = data$x1[i];
    x2 = data$x2[i];
    x3 = data$x3[i];

    if (is.na(x1) && !is.na(x2) && !is.na(x3))
    {
        priors = rbind(priors, c(i, 1, 0, x2+x3, 0.999999))
    }
}

amelia(data, m=1, bound = rbind(c(1, 0, Inf), c(2, 0, Inf), c(3, 0, Inf)), pr = priors);
t0x1n
quelle
5

Einschränkungen lassen sich wahrscheinlich einfacher in die prädiktive Mittelwertanpassung für mehrere Imputationen implementieren. Dies setzt voraus, dass eine signifikante Anzahl von Beobachtungen mit nicht fehlenden einschränkenden Variablen vorliegt, die die Einschränkungen erfüllen. Ich denke darüber nach, dies in der R- HmiscPaketfunktion zu implementieren aregImpute. Vielleicht möchten Sie in einem Monat oder so zurückschauen. Es wird wichtig sein, den maximalen Abstand zu dem Ziel anzugeben, den eine Spenderbeobachtung haben kann, da die Einschränkungen die Spender weiter vom idealen, nicht eingeschränkten Spender entfernen.

Frank Harrell
quelle
Ich würde das auch gerne haben. Ich brauche nur die grundlegendsten Einschränkungen zwischen Variablen, sagen wir x<y<z.
t0x1n
Verzeihen Sie meine Unwissenheit, wenn ich weit weg bin, aber ich hatte den Eindruck, dass bei Techniken der Mehrfachzurechnung Werte aus einer geeigneten Verteilung gezogen werden müssen. Sollte es dann nicht einfach sein, eine Rückweisungsabtastung zu verwenden? zB weiter zeichnen, bis eine bestimmte Bedingung (wie x1<x2) erfüllt ist?
t0x1n
Das ist, was ich mit der R- aregImputeFunktion mit prädiktiver Mittelwertanpassung tun könnte . Was aber, wenn keine der Geberbeobachtungen (fast übereinstimmende Vorhersagen) die Bedingungen für die unterstellte Zielbeobachtung erfüllt, obwohl sie offensichtlich die Bedingungen für die Menge der Gebervariablen erfüllen mussten?
Frank Harrell
Nehmen Sie in einem solchen Fall möglicherweise den vorhergesagten Wert direkt an? Das ist nur auf Regression (ohne die PMM-Phase) für eine solche Stichprobe angewiesen?
t0x1n
Bei der Regressions-Imputation treten mit etwas größerer Wahrscheinlichkeit imputierte Werte auf, die nicht mit dem übrigen Datensatz des Probanden übereinstimmen. Ich glaube nicht, dass dies ein Grund ist, PMM zu vermeiden.
Frank Harrell
4

Ich bin der Meinung, dass das Amelia(Amelia II) -Paket derzeit die umfassendste Unterstützung für die Angabe von Datenwertebereichsbeschränkungen bietet. Das Problem ist jedoch, dass Ameliadavon ausgegangen wird, dass die Daten multivariat normal sind.

Wenn in Ihrem Fall die Annahme einer multivariaten Normalität nicht zutrifft, sollten Sie das micePaket überprüfen , das die Mehrfachimputation (MI) über verkettete Gleichungen implementiert . Dieses Paket setzt keine multivariate Normalität voraus . Es hat auch eine Funktion, die vielleicht ausreicht, um Einschränkungen festzulegen , aber ich bin mir nicht sicher, in welchem ​​Maße. Die Funktion wird aufgerufen squeeze(). Sie können darüber in der Dokumentation nachlesen: http://cran.r-project.org/web/packages/mice/mice.pdf . Ein zusätzlicher Vorteil miceist die Flexibilität, die es ermöglicht, benutzerdefinierte Imputationsfunktionen zu spezifizieren und die Auswahl der Algorithmen zu erweitern. Hier ist ein Tutorial zum Durchführen von MI mitmice :http://www.ats.ucla.edu/stat/r/faq/R_pmm_mi.htm .

Soweit ich weiß, unterstützt das HmiscPaket von Dr. Harrell nach dem gleichen Ansatz verketteter Gleichungen ( Predictive Mean Matching ) wahrscheinlich nicht normale Daten (mit Ausnahme der normpmmMethode). Möglicherweise hat er die Funktionalität für die Einschränkungsspezifikation bereits gemäß der obigen Antwort implementiert. Ich habe nicht verwendet aregImpute(), kann also nicht mehr dazu sagen (ich habe Ameliaund verwendet mice, aber ich bin definitiv kein Experte für Statistik und versuche nur, so viel wie möglich zu lernen).

Zum Schluss finden Sie vielleicht die folgende, etwas veraltete, aber immer noch schöne Übersicht über Ansätze, Methoden und Software für die Mehrfachzurechnung von Daten mit fehlenden Werten: http://www.ncbi.nlm.nih.gov/pmc/articles / PMC1839993 . Ich bin sicher, dass es neuere Übersichtsartikel zu MI gibt, aber das ist alles, was mir derzeit bekannt ist. Ich hoffe das ist etwas hilfreich.

Aleksandr Blekh
quelle
1
Dieser nette Kommentar lässt mich vermuten, dass der prädiktive Mittelwertabgleich, der fehlende Werte durch tatsächlich beobachtete Werte ersetzt, möglicherweise bereits einige Arten von Einschränkungen enthält, wenn alle beobachteten Daten diese Einschränkungen erfüllen. Ich würde es begrüßen, wenn jemand darüber nachdenkt. Ich habe noch keine besonderen Einschränkungen in implementiert aregImpute.
Frank Harrell
1
Du hast recht. Ich habe gerade festgestellt, dass die Spender-Beobachtungen Werte liefern, die mit ihren anderen Variablen übereinstimmen, aber nicht mit den anderen Variablen in der Zielvariablen.
Frank Harrell
1
Konnten Sie, abgesehen von den von Amelia getroffenen Verteilungsannahmen, Einschränkungen möglicherweise detaillierter spezifizieren, als ich in meiner Antwort dargelegt habe? Das Problem dabei squeezeist, dass seine Grenzen konstant sind, so dass Sie nichts wie angeben können x1<x2. Es scheint auch auf den unterstellten Ergebnisvektor angewendet zu werden, was meines Erachtens zu spät ist. Es scheint mir, dass die Grenzen während des Imputationsprozesses berücksichtigt werden sollten, sodass sie mehr Bedeutung haben als eine nachträgliche Anpassung.
t0x1n
1
@ t0x1n: Leider hatte ich keine Möglichkeit, Einschränkungen festzulegen Amelia, da ich von "" auf "" umgestellt habe mice, sobald meine Tests bestätigt haben, dass meine Daten nicht multivariat normal sind. Vor kurzem bin ich jedoch auf diese sehr schönen Präsentationsfolien zum Thema (MI-Methoden und -Software) gestoßen: statistik.lmu.de/~fkreuter/imputation_sose2011/downloads/… . Wenn ich es richtig verstanden habe, beschreibt es eine mögliche Lösung für das Einschränkungsproblem (siehe PDF Seite 50 - nicht Folie Nummer 50!). Hoffe das hilft.
Aleksandr Blekh
1
@ t0x1n: Tatsächlich ist die Lösung auf den Seiten 50 und 51 beschrieben.
Aleksandr Blekh,
0

Wenn ich Ihre Frage richtig verstehe, scheint es mir, dass Sie bereits wissen, welche Werte die fehlenden Variablen einschränken sollten. Ich bin nicht sehr vertraut mit SPSS, aber ich denke, Sie können eine Funktion schreiben, um das zu tun (was je nach Ihrer Erfahrung nicht allzu schwierig sein sollte, sollte ich sagen). Ich kenne kein Paket, das mit solchen Einschränkungen funktioniert.

ThinkStatsme
quelle