2014-10-31 7 views
5

Jak wykonać operację (np. Podzbiór lub dodanie kolumny obliczeniowej) na każdym imputowanym zbiorze danych w obiekcie klasy mids z pakietu R mice? Chciałbym, aby wynik nadal był obiektem mids.Wykonaj operację dla każdego imputowanego zestawu danych w MIERNIKACH R MICE

Edit: Przykład

library(mice) 
data(nhanes) 

# create imputed datasets 
imput = mice(nhanes) 

przypisana zbiory danych są przechowywane jako lista list

imput$imp 

gdzie istnieją wiersze tylko do obserwacji z przypisania do danej zmiennej.

Oryginalny (niekompletny) zbiór danych jest przechowywana tutaj:

imput$data 

Na przykład, w jaki sposób utworzyć nową zmienną obliczoną jako chl/2 w każdym z zestawów danych kalkulacyjnych, otrzymując nową mids obiekt?

+0

Byłoby łatwiej, gdybyś poświęcił czas na stworzenie [minimalnego, powtarzalnego przykładu] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) abyśmy mogli zaoferować konkretne sugestie dotyczące kodu. Jest to nieco zbyt szerokie i niespecyficzne jak jest. – MrFlick

+0

@ user20650, przechowuje oryginalny zestaw danych w 'imput $ data', ale jest oddzielny od imputowanych zestawów danych. Właśnie dodałem do tego przykład. –

+0

Jeśli chcesz wygenerować 'chl/2', możesz obliczyć to przed imputacją. Niż podczas imputacji dodajesz ograniczenie, że gdy jakakolwiek imputacja brakująca dla tej kolumny równa się "chl/2" – user20650

Odpowiedz

3

Innym rozwiązaniem jest obliczenie zmiennych przed ograniczeniami przypisywania i umieścić na nich.

library(mice) 

# Create the additional variable - this will have missing 
nhanes$extra <- nhanes$chl/2 

# Change the method of imputation for extra, so that it always equals chl/2 
# change the predictor matrix so only chl predicts extra 
ini <- mice(nhanes, max = 0, print = FALSE) 

meth <- ini$meth 
meth["extra"] <- "~I(chl/2)" 

pred <- ini$pred # extra isnt used to predict 
pred[ "extra", "chl"] <- 1 

# Imputations 
imput <- mice(nhanes, seed=1, pred = pred, meth = meth, print = FALSE) 

Istnieją przykłady na myszach: wieloczynnikowa Przypisanie przez przykuty równań w R

1

Jest przeciążenie with że może pomóc tutaj

with(imput, chl/2) 

dokumentacja jest podana w ?with.mids

+0

Dzięki. Ale czy istnieje sposób na wykorzystanie tego do faktycznego modyfikowania każdego z imputowanych zestawów danych, na przykład przez dodanie kolumny obliczeniowej? 'with (imput, funkcja (x) x $ imp $ new.var = chl/2)' nie działa, być może dlatego, że format jest nieprawidłowy. –

+0

Dlaczego miałbyś to zrobić? 'with()' nie zadziała z przypisaniem. Ale to, co używasz z 'with()' może dokonać transformacji. – MrFlick

4

Można to łatwo zrobić w następujący sposób -

użytkowania complete() przekonwertować mids sprzeciw wobec danych długim formacie. rama:

long1 <- complete(midsobj1, action='long', include=TRUE) 

wykonać wszelkie manipulacje potrzebne:

long1$new.var <- long1$chl/2 
long2 <- subset(long1, age >= 5) 

użycie as.mids() przekonwertować z powrotem manipulować dane MID obiektu:

midsobj2 <- as.mids(long2) 

Teraz można użyć midsobj2 wymagane. Zauważ, że include=TRUE (używane do dołączenia oryginalnych danych z brakującymi wartościami) jest potrzebne, aby as.mids() skompresować poprawnie sformatowane dane. Zauważ, że przed myszami v2.25 nastąpił błąd w as.mids() funkcja (patrz ten post https://stats.stackexchange.com/a/158327/69413)

EDIT: Zgodnie z tą odpowiedzią https://stackoverflow.com/a/34859264/4269699 (z tego co jest w zasadzie kopią pytanie) można również edytować obiekty średnie obiektu bezpośrednio przez dostęp do danych $ i $ imp. Tak na przykład

midsobj2<-midsobj1 
midsobj2$data$new.var <- midsobj2$data$chl/2 
midsobj2$imp$new.var <- midsobj2$imp$chl/2 

wpadniemy w kłopoty, choć jeśli chcesz podzbiór $ imp lub jeśli chcesz użyć $ połączenia, więc nie polecam tego rozwiązania w ogóle.

+1

Wygląda na to, że błąd w 'as.mids' mógł zostać poprawiony w najnowszej wersji myszy (2.25, 2015-11-09). –

+0

Czy ta praca była dla Ciebie? Ponieważ otrzymałem dziwne wyniki po użyciu 'as.mids'. Więcej tutaj: http://stackoverflow.com/questions/36511909/as-mids-replaces-added-values-with-na –

Powiązane problemy