我正在尝试预测包含NA
s的数据的拟合值,并基于plm
生成的模型。这是一些示例代码:
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)
答案 0 :(得分: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