1

毎年(前の年に基づいて)複数のプールされた回帰を実行した予測モデルを作成しようとしているため、係数が時間とともに変化します。(これは提供されたサンプル データでは意味がないかもしれませんが、私のサンプルでは実際に行われています)。

これが私がこれまでに思いついたことです: 私は自分のコードを 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) があり、限られたサブセットでのみ予測関数を使用できます。データを望ましい方法でどのように配置しますか?

そして、これは、勾配を変化させて元のデータと同じ方法でそれらを保存する条件付き予測(年)を取得するための正しいアプローチですか、それとも私が知らないより効率的な方法はありますか?

4

1 に答える 1

1

プールされた回帰を推定していないことに注意してください。plm、デフォルトでは、withinモデルを推定します。最初の回帰を簡単に要約すると、これが明らかになります。たとえば を参照してくださいsummary(myregression[[1]]。その最初の行は次のとおりです。

Oneway (individual) effect Within Model

Call:
plm(formula = inv ~ value + capital, data = subset(Grunfeld, 
    year <= t & year >= t - 5), index = c("firm", "year"))

...

プールされた回帰について話しているので、次のコードを試してください。私はそれを少し短くするために自由を取った:

for(t in 1940:1950){  
  myregression[[as.character(t)]] <- plm(inv ~ value + capital, 
                                         subset(Grunfeld, year<=t & year>=t-5),
                                         index=c("firm","year") , model="pooling")
}
for(t in 1940:1950){
  Forecast[[as.character(t)]]<-predict(myregression[[as.character(t)]], 
                                       subset(Grunfeld, year==t))
}

これにより、エラー メッセージなしで予測値が得られます。

これが正しい統計的アプローチであるかどうかについての最後の質問にはコメントできませんが、R 関連の質問が解決されることを願っています。

コメントに返信するには、

Grunfeld$forc <- NA

for(t in 1940:1950){
  Grunfeld[which(Grunfeld$year==as.character(t)), "forc"] <-
               predict(myregression[[as.character(t)]], subset(Grunfeld, year==t))
}
于 2014-07-20T16:07:01.307 に答える