2013-10-14 1 views
0

거대한 데이터베이스에서 롤링 회귀를 수행하고 롤링에 사용 된 참조 열을 각 데이터 블록에 대해 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 
} 

작품 위의 코드없이 오류가 나와 있지만 자동으로 하나 개의 데이터 풀에 각각의 회귀에 의해 생성 된 모든 오류를 컴파일하는 방법을 몰라? 누구든지 저를 도울 수 있습니까?

+0

이 코드의 문제점은 '오류'(실제로는 정말 나쁜 이름) 객체가 사전 할당되지 않았고 색인이 생성되지 않는다는 것입니다. 마지막 결과로 항상 "오류"를 덮어 씁니다 당신이 결과로 무엇을 할 것인지도 말해야합니다. –

+0

@DWin 답변 주셔서 감사합니다. 다른 피어 회사 (비슷한 특성을 가진 회사)의 오류 분포를 분석하여 추가로 수행해야합니다. 연구. 단계별 코드로 오류가 올바르게 생성되었습니다. 하지만 21 번 오류 집합을 얻으려면 21 번 코드를 실행 한 다음 rbind()를 사용하여 21 번 오류 집합을 추가해야하지만 그렇게 효율적이지는 않습니다. 이제 루프로 프로 시저를 수행 한 다음 오류 세트를 하나의 큰 오류 세트에 자동으로 추가합니다. – mushroom

+0

의미를 읽지 않는 것 같습니다. 루프를 통과 할 때마다 'error <- ...'코드는 'error'의 이전 값을 대체합니다. –

답변

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 

없음 gaurantees을이 처음에 데이터 TOF 밖으로 실행하여 오류 또는 하나의 데이터 또는 포괄적 인 설명을 제공하지 않았기 때문에 끝나지 않을 것

+0

당신의 노력과 도움에 대해 대단히 감사합니다. 그러나 나는 여전히 절차를 자동으로 할 수 없습니다. 이 코드는 21 개의 오류 집합 만 아닌 21 개의 오류를 반환합니다. 어쨌든 분석을 계속할 필요가 있습니다. 코드에 너무 많은 시간을 할애 할 수 없습니다. 나는 그것을 단계적으로 만들었고 너무 많은 시간을 소비하지 않는다. 환자와 좋은 팁과 도움을 주셔서 감사합니다 :) – mushroom