2013-01-20 80 views
7

我試圖預測包含NA s的數據的擬合值,並基於由plm生成的模型。下面是一些示例代碼:如何在面板數據迴歸中處理NA?

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 

當我運行的最後一行,我得到一個錯誤,指出更換有4行,而數據有5行。

我不知道怎麼去預測返回長度5的矢量...

如果不是運行plm我運行一個lm(如下面的線),我得到預期的結果。

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

回答

8

我覺得這是一件predict.plm應該來處理你 - 似乎是在包裝上作者的一時疏忽 - 但你可以使用?napredict實現它自己:

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