2013-01-20 40 views
7

Próbuję przewidzieć dopasowanych wartości w stosunku do danych zawierających NA s, w oparciu o model wygenerowany przez plm. Oto przykładowy kod:Jak radzić sobie z NA w regresji danych panelu?

require(plm) 
test.data <- data.frame(id=c(1,1,2,2,3), time=c(1,2,1,2,1), 
    y=c(1,3,5,10,8), x=c(1, NA, 3,4,5)) 
model <- plm(y ~ x, data=test.data, index=c("id", "time"), 
     model="pooling", na.action=na.exclude) 
yhat <- predict(model, test.data, na.action=na.pass) 
test.data$yhat <- yhat 

Po uruchomieniu ostatniego wiersza pojawia się błąd informujący, że zamiennik ma 4 wiersze, podczas gdy dane mają 5 wierszy.

nie mam pojęcia, jak się przewidzieć powrócić wektor o długości 5 ...

Jeśli zamiast prowadzenia plm mogę uruchomić lm (jak w wierszu poniżej) uzyskać oczekiwany rezultat.

model <- lm(y ~ x, data=test.data, na.action=na.exclude) 

Odpowiedz

8

myślę, że to jest coś, co predict.plmpowinien obsługiwać dla ciebie - Wygląda na to przeoczenie ze strony autorów pakietu - ale można użyć ?napredict wdrożyć go dla siebie:

pp <- predict(model, test.data) 
na.stuff <- attr(model$model,"na.action") 
(yhat <- napredict(na.stuff,pp)) 
## [1] 1.371429  NA 5.485714 7.542857 9.600000