R中plm包的手动计算预测值

机器算法验证 plm
2022-04-22 13:22:07

我试图完全理解 R 中 plm 包的来龙去脉。我有一个数据集,我在其中计算了一个固定效果 plm:

mydata <- read.spss("G:/data.sav",use.value.labels=TRUE, to.data.frame = TRUE)

attach(mydata) 
Y <- cbind(Y) 
X <- cbind(x1,x2,x3) 

pdata <- plm.data(mydata, index=c("id","YEAR")) 
fixed <- plm(Y ~ X, data=pdata, model= "within") 

我正在尝试计算训练和测试数据集的预测值。我在这里找到了一些关于 CV 的材料,这些材料可以解决我正在尝试做的事情,但并没有完全回答。当我手工计算时:

y = beta1*z + beta2*z + theta*id 

的预测值

fitted <- as.numeric(fixed$model[[1]] - fixed$residuals) 

与我求和时不一样beta*x1 + beta*x2 + beta*x3 + fixef(fixed). 基本上我想弄清楚如何手动计算样本内预测值,以便我可以对样本外数据进行计算。

谁能解释我在手工计算时可能做错了什么?

1个回答

您需要提取固定效果fixef并将它们与单个索引匹配。以下是 Grunfeld 数据的示例:

data(Grunfeld, package = "plm")
fe <- plm(inv ~ value + capital, data=Grunfeld, model = "within")

temp <- merge(Grunfeld, data.frame(fixef_firm = names(fixef(fe)), fixef = as.numeric(fixef(fe))), all.x =T, by.x = c("firm"), by.y=c("fixef_firm"))
fitted_by_hand <- temp$fixef + fe$coefficients[1] * Grunfeld$value +  fe$coefficients[2] * Grunfeld$capital

fitted <- fe$model[ , 1] - fe$residuals

# just to remove attributs and specific classes 
fitted_by_hand <- as.numeric(fitted_by_hand)
fitted <- as.numeric(fitted)

all.equal(fitted, fitted_by_hand) # TRUE
cbind(fitted, fitted_by_hand) # see yourself