毎年(前の年に基づいて)複数のプールされた回帰を実行した予測モデルを作成しようとしているため、係数が時間とともに変化します。(これは提供されたサンプル データでは意味がないかもしれませんが、私のサンプルでは実際に行われています)。
これが私がこれまでに思いついたことです: 私は自分のコードを 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) があり、限られたサブセットでのみ予測関数を使用できます。データを望ましい方法でどのように配置しますか?
そして、これは、勾配を変化させて元のデータと同じ方法でそれらを保存する条件付き予測(年)を取得するための正しいアプローチですか、それとも私が知らないより効率的な方法はありますか?