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)

上面产生的错误在“datapool”中都标有“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
}

上面的代码可以正常工作,没有报错,但是不知道如何将每次回归产生的所有错误自动编译到一个数据池中?任何人都可以帮助我吗?

4

1 回答 1

0

(我再说一遍:为向量使用名称“错误”真是个坏主意。)它是核心函数的名称。这就是我尝试该任务的方式。(使用子集参数和索引比折磨哪个语句。

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 回答