我正在尝试生成一个预测模型,在该模型中我每年(基于前几年)执行多个汇总回归,从而允许系数随时间变化。(这在提供的示例数据中可能没有意义,但在我的示例中它是在实践中完成的)。
到目前为止,这是我的想法:我将代码调整为 plm 包中的可重现示例:
数据按以下方式(面板)构建,并以公司、年份为索引。
> head(Grunfeld)
firm year inv value capital
1 1 1935 317.6 3078.5 2.8
2 1 1936 391.8 4661.7 52.6
3 1 1937 410.6 5387.1 156.9
4 1 1938 257.7 2792.2 209.2
5 1 1939 330.8 4313.2 203.4
6 1 1940 461.2 4643.9 207.2
这是我的代码:
library(plm)
data("Grunfeld", package="plm")
# Store each subset regression in myregression
myregression <- list()
count <- 1
## pooled regression in each year t,
## with subset data of the previous six years (t-5)
for(t in 1940:1950){
myregression[[count]] <- plm(inv ~ value + capital,
subset(Grunfeld, year<=t & year>=t-5),
index=c("firm","year"))
# Name each regression based on the year range included in the data subset
names(myregression)[[count]] = paste0("Year_",t)
count <- count+1
}
## Prediction
#######################
# Alternative 1: Loop
Forecast<-list()
count<-1
for(t in 1940:1950){
Forecast[[count]]<-predict(myregression[[count]], subset(Grunfeld, year==t))
## Name each Prediction based on the year t:
names(Forecast)[[count]] = paste0("Year_",t)
count <- count+1
}
不幸的是,我的代码不起作用,我收到以下错误:
Error in crossprod(beta, t(X)) : non-conformable arguments
理想情况下,我想以与原始 Grunfeld 数据相同的结构将我的预测/预测存储在 $Grunfeld$Forecast 中。但是,我在使用列表时遇到了很多困难,并且经常无法正确处理它们并将结果存储在原始数据旁边的向量中。这一点至关重要,因为在我自己的样本中,有很多缺失数据(NA),我只能在有限的子集上使用预测函数。您如何以所需的方式排列数据?
这是获得具有不同斜率的条件预测(在一年中)并以与原始数据相同的方式存储它们的正确方法,还是我不知道有更有效的方法?