ich folgende Anrechnungs Aufgabe als eine for-Schleife in R leite:Running for-Schleife über mehrere Gruppen
myData <- essuk[c(2,3,4,5,6,12)]
myDataImp <- matrix(0,dim(myData)[1],dim(myData)[2])
lower <- c(0)
upper <- c(Inf)
for (k in c(1:5))
{
gmm.fit1 <- gmm.tmvnorm(matrix(myData[,k],length(myData[,k]),1), lower=lower, upper=upper)
useMu <- matrix(gmm.fit1$coefficients[1],1,1)
useSigma <- matrix(gmm.fit1$coefficients[2],1,1)
replaceThese <- myData[,k]<=0
myDataImp[,k] <- myData[,k]
myDataImp[replaceThese,k] <- rtmvnorm(n=sum(replaceThese), c(useMu), c(useSigma), c(-Inf), c(0))
}
Die Schritte sind ziemlich einfach
- den Datensatz definieren und eine leere Anrechnungs Daten einstellen.
- Für Spalte 1-5 passen Sie ein Modell an.
- Extrahieren Sie Modellschätzungen für die Imputation.
- Führen Sie ein Modell mit Modellschätzungen aus und ersetzen Sie die Werte < = 0 durch die neuen Werte im Imputationsdatensatz.
Allerdings möchte ich dies separat für mehrere Gruppen, anstatt für die vollständige Probe. Spalte 12 im Datensatz enthält Informationen zur Gruppenzugehörigkeit (Ganzzahlen von 1 bis 72).
Ich habe verschiedene Optionen ausprobiert, einschließlich der Aufspaltung des Datenrahmens mit data_list <- split(myData, myData$V12)
und der Verwendung der lapply()
-Funktion. Allerdings funktioniert dies nicht darauf zurückzuführen, wie Modellschätzungen formatiert:
Error in as.data.frame.default(data) :
cannot coerce class ""gmm"" to a data.frame
Ich habe auch gedacht, über die Möglichkeit für eine verschachtelte Schleife zu tun, obwohl ich nicht sicher bin, wie das erreicht werden könnte. Irgendwelche Vorschläge werden sehr geschätzt.
Pls liefern reproduzierbares Beispiel von essuk oder myData. – Djork