2014-09-08 6 views
1

베타 -t-egarch 패키지를 사용하고 있습니다. 불행히도 롤링 예측이 없으므로 수동으로 R로 작성하고 싶습니다. 루프에 대한 기본 아이디어 코드를 실행 한 다음 예측을 수행하고 예측 된 값을 예측 data.frame에 보관하고 돌아가서 모델을 다시 추정하고 해당 값을 예측 데이터에 추가합니다. 프레임 등 루프가 끝날 때까지. 루프의 문제는 하루 동안 만 예측하고 모델을 재평가하거나 다시 예측하지 않는다는 것입니다. GARCH 패밀리 모델의 "for"루프로 변동성 예측

나는 웹 보면서 나는 단지이 코드를 만들 수 있습니다 :
start = 1 
finish = 65  
for (k in start:finish) {  
WIGcomp1<- tegarch(WIG$r) 
forecast <- predict(WIGcomp1, n.ahead = 1) 
forecast[k-start+1] 
} 

내 데이터

부터 시작 : 데이터의

> head(WIG) 
      Date  WIG    r 
5233 2014-01-02 51865.89 0.0112776612 
5234 2014-01-03 51497.81 -0.0071220662 
5235 2014-01-07 50444.78 -0.0206600098 
5236 2014-01-08 50482.93 0.0007559867 
5237 2014-01-09 49753.03 -0.0145638931 
5238 2014-01-10 49796.50 0.0008733342 
> tail(WIG) 
      Date  WIG   r 
5293 2014-03-28 51831.67 0.003646887 
5294 2014-03-31 52373.47 0.010398813 
5295 2014-04-01 52571.51 0.003774173 
5296 2014-04-02 52761.31 0.003603819 
5297 2014-04-03 52376.18 -0.007326249 
5298 2014-04-04 52660.68 0.005417159 

구조입니다 :

'data.frame': 66 obs. of 3 variables: 
$ Date: Date, format: "2014-01-02" "2014-01-03" "2014-01-07" "2014-01-08" ... 
$ WIG : num 51866 51498 50445 50483 49753 ... 
$ r : num 0.011278 -0.007122 -0.02066 0.000756 -0.014564 ... 

하는 경우 아무 것도 수정하거나 추가해야 할 필요가 있습니다. 알려 주시면 기꺼이 처리해 드리겠습니다. 미리 감사드립니다.

+0

rugarch는 예측을위한 훌륭한 패키지입니다. 롤 예측을 포함하여 많은 다른 것들을 가지고 있습니다. – DMT

+0

안녕하세요 DMT, GRJ 모델에도 rugarch를 사용합니다. 그러나 나는 거기에 놀라운 기능을 가지고 있다고 동의합니다. 그러나 R 내가 사용하는 패키지는 매우 새롭고 (베타 쿼리) 예측을 수행 할 때 문제가 발생하는 롤링 예측이 없습니다. 나는 대답과 도움을 주셔서 감사합니다. – Tim

답변

0

을 사용하여 움직이는 창을 분리하는 대신 매번 전체 데이터 집합을 사용하기 때문에 코드에서 주요 문제는 동일한 예측을 반복해서 계산한다는 것입니다. 이 시나리오에서는 가능한 한 예측 한 가지만 있으며 전체 데이터 벡터 (WIGcomp1<- tegarch(WIG$r))를 사용합니다. 예를 들어,이 데이터 세트 및 코드의 약간 수정 된 버전을 고려

library(betategarch) 
## 
set.seed(1234) 
Data <- data.frame(
    Date=seq.Date(
    from=as.Date("2014-01-02"), 
    by="day", 
    length.out=66), 
    WIG=rnorm(66,mean=51000,sd=1500), 
    r=rnorm(66,mean=0,sd=.005)) 
## 
## 
your.fun <- function(){ 
    start = 1 
    finish = 65 
    Forecast <- NULL 
    for (k in start:finish) {  
    WIGcomp1<- tegarch(Data$r) 
    Forecast[k] <- predict(WIGcomp1, n.ahead = 1) 
    ##forecast[k-start+1] 
    } 
    Forecast 
} 
## 
> your.fun() 
[1] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[10] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[19] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[28] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[37] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[46] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[55] 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 0.003424116 
[64] 0.003424116 0.003424116 

당신은 소스 데이터의 이동 창을 사용하지 않기 때문에, 그냥 반복해서 같은 예측을합니다. 다른 해결책은 움직이는 창에서 n 일 (아래 예에서 n = 10)의 연속적인 1 단계 예측을하기 위해 이동하는 데이터 하위 집합을 사용하는 것입니다. 이는 매일 새로운 관측 값을 얻고 데이터 포인트와 이전 9 일 간의 데이터를 사용하여 내일의 가치를 예측하는 상황을 나타냅니다. 이 작업을 수행 할 때

rolling.forecast <- function(Df=Data,Var="r",Window=10,nAhead=1){ 
    ## 
    fCast <- rollapplyr(
    Df[,Var], width=Window, function(x){ 
     predict(
     tegarch(x), 
     n.ahead=nAhead) 
    }) 
    ## 
    newData <- cbind(
    Df, 
    Forecast=c(
     rep(NA,Window-1), 
     fCast)) 
    ## 
    return(newData) 
} 
## 
> NewData <- rolling.forecast() 
> head(NewData,10) 
     Date  WIG    r Forecast 
1 2014-01-02 49189.40 -5.693039e-03   NA 
2 2014-01-03 51416.14 6.839136e-03   NA 
3 2014-01-04 52626.66 6.647824e-03   NA 
4 2014-01-05 47481.45 1.682364e-03   NA 
5 2014-01-06 51643.69 3.446419e-05   NA 
6 2014-01-07 51759.08 -2.277344e-03   NA 
7 2014-01-08 50137.89 -1.832620e-03   NA 
8 2014-01-09 50180.05 3.241433e-03   NA 
9 2014-01-10 50153.32 1.035135e-02   NA 
10 2014-01-11 49664.94 -7.669921e-04 0.003737219 
> tail(NewData) 
     Date  WIG   r Forecast 
61 2014-03-03 51984.88 -0.003157046 0.255080969 
62 2014-03-04 54823.49 -0.007566441 0.011048830 
63 2014-03-05 50947.86 -0.003180499 0.012665863 
64 2014-03-06 49995.55 0.001131508 0.002204160 
65 2014-03-07 50988.59 0.005068452 0.047949976 
66 2014-03-08 53665.63 0.001263751 0.001458638 

것은, 당신은 물론 단지 N - Window + 1 새로운 값을 생성 할 수 있습니다; 여기서 N은 데이터의 관측 수이고 Window은 데이터 롤링 창의 기간입니다. 기본 align 값이 right (보다 일반적인 함수 rollapply 패키지 zoo에서 적응 됨) 인 rollapplyr 함수를 사용 했으므로 첫 번째 관측치는 NA으로 설정됩니다.

+0

Nrussell, 고맙습니다. 시간을내어 코드를 설명하고 작성해 주셔서 대단히 감사합니다. 정말 감사드립니다. 이 프로젝트를하고 있지만 움직이는 창 및 n.roll 함수를 사용하여 예측을하는 데 시간을 벌어 왔습니다. Rugarch 패키지에는 모두 포함되어 있지만이 모델에 사용하는 R 패키지는 꽤 새롭고 아직 기능이 없습니다. 다시 한번 고마워요. – Tim

관련 문제