거대한 데이터베이스에서 롤링 회귀를 수행하고 롤링에 사용 된 참조 열을 각 데이터 블록에 대해 5에서 45 사이의 값으로 "Q"라고합니다. 처음에는 단계별로 간단한 코드 단계했는데, 그것은 아주 좋은 작동합니다롤링 회귀에 의해 생성 된 모든 데이터를 하나로 컴파일하십시오.
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(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)
:
> head(t(t(error)))
[,1]
21 0.006202145
62 -0.003005097
103 -0.019273856
144 -0.016053012
185 -0.025608022
226 -0.004548264
데이터 풀 아래의 구조를 가지고
위에서 생성 된 오류는 모두 "datapool"의 "X"값으로 표시되므로 어떤 회사에서 오류가 발생했는지 알 수 있습니다.
회귀 분석을 21 번 (4 분의 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
}
작품 위의 코드없이 오류가 나와 있지만 자동으로 하나 개의 데이터 풀에 각각의 회귀에 의해 생성 된 모든 오류를 컴파일하는 방법을 몰라? 누구든지 저를 도울 수 있습니까?
이 코드의 문제점은 '오류'(실제로는 정말 나쁜 이름) 객체가 사전 할당되지 않았고 색인이 생성되지 않는다는 것입니다. 마지막 결과로 항상 "오류"를 덮어 씁니다 당신이 결과로 무엇을 할 것인지도 말해야합니다. –
@DWin 답변 주셔서 감사합니다. 다른 피어 회사 (비슷한 특성을 가진 회사)의 오류 분포를 분석하여 추가로 수행해야합니다. 연구. 단계별 코드로 오류가 올바르게 생성되었습니다. 하지만 21 번 오류 집합을 얻으려면 21 번 코드를 실행 한 다음 rbind()를 사용하여 21 번 오류 집합을 추가해야하지만 그렇게 효율적이지는 않습니다. 이제 루프로 프로 시저를 수행 한 다음 오류 세트를 하나의 큰 오류 세트에 자동으로 추가합니다. – mushroom
의미를 읽지 않는 것 같습니다. 루프를 통과 할 때마다 'error <- ...'코드는 'error'의 이전 값을 대체합니다. –