0

巨大なデータベースでローリング回帰を行っています。ローリングに使用される参照列は「Q」と呼ばれ、各データ ブロックの値は 5 から 45 です。最初は、単純なコードを段階的に試してみましたが、非常にうまく機能します。

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
#use the 20 Quarters data to do regression
model<-lm(fit,data=datapool[(which(datapool$Q>=5&datapool$Q<=24)),])
#use the model to forecast the value of next quarter
pre<-predict(model,newdata=datapool[which(datapool$Q==25),])
#get the forecast error
error<-datapool[which(datapool$Q==25),]$EB -pre

上記のコードの結果は次のとおりです。

> head(t(t(error)))
        [,1]
21   0.006202145
62  -0.003005097
103 -0.019273856
144 -0.016053012
185 -0.025608022
226 -0.004548264

データプールの構造は次のとおりです。

> head(datapool)
  X  Q            Firm         EB       EB1        EB2        EB3
1 1  5 CMCSA US Equity 0.02118966 0.08608825 0.01688180 0.01826571
2 2  6 CMCSA US Equity 0.02331379 0.10506550 0.02118966 0.01688180
3 3  7 CMCSA US Equity 0.01844747 0.12961955 0.02331379 0.02118966
4 4  8 CMCSA US Equity         NA         NA 0.01844747 0.02331379
5 5  9 CMCSA US Equity 0.01262287 0.05622834         NA 0.01844747
6 6 10 CMCSA US Equity 0.01495291 0.06059339 0.01262287         NA
       ...
       Firm B(also from Q5 to Q45)
       ...
       Firm C(also from Q5 to Q45)

上記で生成されたエラーはすべて「データプール」に「X」の値でマークされているため、エラーがどの会社からのものかがわかります。

回帰を 21 回 (四半期 5-24、6-25、...、25-44) 実行する必要があるため、手動で実行したくなく、次のコードを考え出しました。

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
for (i in 0:20){
model<-lm(fit,data=datapool[(which(datapool$Q>=5+i&datapool$Q<=24+i)),])
pre<-predict(model,newdata=datapool[which(datapool$Q==25+i),])
error<-datapool[which(datapool$Q==25),]$EB -pre
}

上記のコードは機能し、エラーは発生しませんが、各回帰によって生成されたすべてのエラーを 1 つのデータプールに自動的にコンパイルする方法がわかりません。誰でもそれで私を助けることができますか?

4

1 に答える 1

0

(繰り返しますが、ベクトルに「エラー」という名前を使用するのは本当に悪い考えです。) これは、コア関数の名前です。これは、私がそのタスクを試みた方法です。(subset パラメーターを使用して、苦しめられた which ステートメントよりもインデックスを作成します。

fit <- as.formula(EB~EB1+EB2+EB3+EB4)
pre <- numeric(len=21)
errset <- numeric(len=21)
for (i in 0:20){
     model<-lm(fit,data=datapool, subset= Q>=5+i & Q<=24+i )
     pre[i]<-predict(model,newdata=datapool[ datapool[["Q"]] %in% i:(25+i), ])
     errset[i]<-datapool[25+i,]$EB -pre
}
errset

データまたはデータオブジェクトの包括的な説明を提供していないため、最初または最後にデータが不足してもエラーになることはありません。

于 2013-10-14T18:55:50.020 に答える