VAR 예측 방법론


19

나는 자산의 가격을 예측하기 위해 VAR 모델을 구축 중이며 내 방법이 통계적으로 적합한 지, 포함 된 테스트가 적절한 지 여부 및 입력 변수를 기반으로 신뢰할 수있는 예측을 보장하기 위해 더 많은 것이 필요한지 알고 싶습니다.

다음은 Granger 인과 관계를 확인하고 선택한 VAR 모델을 예측하는 현재 프로세스입니다.

require("forecast")
require("vars")

#Read Data
da=read.table("VARdata.txt", header=T)
dac <- c(2,3) # Select variables
x=da[,dac]

plot.ts(x)
summary(x)

#Run Augmented Dickey-Fuller tests to determine stationarity and differences to achieve stationarity.
ndiffs(x[, "VAR1"], alpha = 0.05, test = c("adf"))
ndiffs(x[, "VAR2"], alpha = 0.05, test = c("adf"))

#Difference to achieve stationarity
d.x1 = diff(x[, "VAR1"], differences = 2)
d.x2 = diff(x[, "VAR2"], differences = 2)

dx = cbind(d.x1, d.x2)
plot.ts(dx)

#Lag optimisation
VARselect(dx, lag.max = 10, type = "both")

#Vector autoregression with lags set according to results of lag optimisation. 
var = VAR(dx, p=2)

#Test for serial autocorrelation using the Portmanteau test
#Rerun var model with other suggested lags if H0 can be rejected at 0.05
serial.test(var, lags.pt = 10, type = "PT.asymptotic")

#ARCH test (Autoregressive conditional heteroscedasdicity)
arch.test(var, lags.multi = 10)

summary(var)

#Granger Causality test
#Does x1 granger cause x2?
grangertest(d.x2 ~ d.x1, order = 2)

#Does x2 granger cause x1?
grangertest(d.x1 ~ d.x2, order = 2)

#Forecasting
prd <- predict(var, n.ahead = 10, ci = 0.95, dumvar = NULL)
print(prd)
plot(prd, "single")

이 방법이 들리나요?


1
두 번째 차이점을 사용하고 있습니까? 이것은 조금 특이한 것이며 모델을 필요 이상으로 민감하게 만들 수 있습니다. 또한 시스템에서 통합이 예상 될 수 있습니까? 결정적인 시간 추세 및 / 또는 계절성은 어떻습니까?
Richard Hardy

@Richard, 정상 성을 달성하는 차이점은 내가 adf 테스트에 의해 결정된 것으로 이해되며 제안에 따라 조정됩니다. adf 테스트가 정지 상태인지 확인하면 0을 반환합니다. 변수를 다르지 않습니다. 나는 공적분과 계절성을 생각하지 않았지만 위의 방법이 변수의 추세를 처리한다는 인상을 받았습니다.
youjustreadthis

2
ADF 테스트는 테스트 일 뿐이며 한계가 있습니다. 원시 데이터를 플로팅하면 첫 번째 차이점과 두 번째 차이점이 테스트를 실행하는 것보다 더 유익 할 수 있습니다. 또한 ADF 테스트는 서로 다른 사양을 갖습니다. (1) 상수 없음, 추세 없음; (2) 일정하고 추세가 없다. (3) 일정하고 추세; 테스트에 대한 지연 순서 선택도 사소하지 않을 수 있습니다. 따라서 결과에 맹목적으로 의존하지 마십시오. 주제의 관점에서 볼 때, 자산 가격은 일반적으로 주문 1, I (1)로 통합됩니다. I (2)는 정당화하기 어려울 것입니다.
Richard Hardy

@ youjustreadthis 나는 아래 답변을 포함시켰다. 나는 그 의미의 일부를 고려할 것을 강력히 권장합니다
Jacob H

답변:


28

VAR 모델을 만들 때 일반적으로 다음 단계를 따르십시오.

1. 변수를 선택하십시오

이것은 모델을 구축 할 때 가장 중요한 부분입니다. 자산 가격을 예측하려면 가격 구성 메커니즘과 관련된 변수를 포함해야합니다. 이를 수행하는 가장 좋은 방법은 이론적 모델을 이용하는 것입니다. 자산이 무엇인지, 모델에 포함 된 다른 변수가 무엇인지 언급하지 않았기 때문에이 항목에 대해 많이 말할 수는 없지만 여기 에서 자산 가격 책정 모델 요약을 찾을 수 있습니다 .

2. 데이터를 확인하고 적절히 조정하십시오

변수를 선택하면 모델의 추정 및 해석을 향상시키는 데이터를 약간 조정할 수 있습니다. 요약 통계를 사용하고 특이 치, 누락 된 데이터 및 기타 이상한 동작을 탐지하기 위해 계열 그림을 보는 것이 유용합니다. 가격 데이터로 작업 할 때 사람들은 일반적으로 자연 로그를 사용합니다. 이는 변동을 안정화시키는 변형이며 또한 해석이 좋습니다 (로그의 가격 차이는 지속적으로 복리 수익이됩니다). 모델을 추정하기 전에 로그를 가져 왔는지 확실하지 않지만 자산 가격으로 작업하는 경우 로그를 작성하는 것이 좋습니다.

3. 데이터에 고정되지 않은 구성 요소가 포함되어 있는지 확인

이제 단위 루트 테스트를 사용하여 계열이 고정되어 있는지 확인할 수 있습니다. @JacobH에서 언급 한 것처럼 예측에만 관심이있는 경우 계열이 비정상적인 경우에도 수준에서 VAR을 실행할 수 있지만 표준 오류를 신뢰할 수 없으므로 계수. ADF 테스트를 사용하여 고정 테스트를 거쳤습니다. ADF 테스트는 이러한 응용 프로그램에서 매우 일반적으로 사용되지만 i) 일정하지 않고 추세없이 테스트를 실행하려는 경우 지정해야합니다. ii) 일정하고 추세가 없음; 및 iii) 상수 및 경향. 일반적으로 가격 시리즈는 확률 적 추세를 가지므로 선형 추세는 정확하지 않습니다. 이 경우 사양을 선택할 수 있습니다 ii. 귀하의 코드에서ndiffs예측 패키지의 기능. 차이의 수를 계산하기 위해이 함수가 구현하는 세 가지 대안 중 확실하지 않습니다 (문서에서 찾을 수 없음). 결과를 확인하기 ur.df위해 "urca"패키지 의 기능 을 사용할 수 있습니다 .

adf <- ur.df(x[, "VAR1"], type = "drift", lags = 10, selectlags = "AIC")

이 명령은 상수와 AIC 명령에 의해 선택된 지연을 최대 10의 지연으로 ADF 테스트를 실행합니다. 결과 해석에 문제가있는 경우이 질문을보십시오 . 계열이 I (1)이면 차이를 사용하면 연속 복리 수익과 같습니다. 테스트 결과 시리즈가 I (2)이고 다른 테스트 (예 : Phillips-Perron 테스트 (PP.testR의 기능). 모든 테스트에서 시리즈가 I (2) 인 것으로 확인되면 (테스트를 실행하기 전에 시리즈의 로그를 사용해야 함) 두 번째 차이를 취하지 만 결과에 대한 해석은 변경 될 것입니다. 지속적으로 복리 수익률의 차이. 자산의 가격은 랜덤 워크에 가깝기 때문에 일반적으로 I (1)이며, 첫 번째 차이를 적용 할 때 백색 소음입니다.

4. 모델의 순서를 선택하십시오

Akaike, Schwarz (BIC) 및 Hannan-Quinn과 같이 일반적으로 사용되는 기준으로 수행 할 수 있습니다. 당신은 그 VARselect기능을 가지고 그것을했지만 그것은 옳았지만, 당신이 결정을 내리는 데 사용한 기준이 무엇인지 기억하십시오. 일반적으로 다른 기준은 VAR에 대한 다른 주문을 나타냅니다.

5. 공동 통합 관계가 있는지 확인

VAR 모델을 실행하기 전에 모든 계열이 I (1) 또는 I (2) 인 경우 일반적으로 계열간에 공적분 관계가 없는지 확인하는 것이 좋습니다. 특히 잔차. Johansenn 테스트 또는 Engle-Granger (이변 량 모델 만 해당)를 사용하여이를 수행 할 수 있습니다. R에서는 ca.jo"urca"패키지 기능으로 Johansen 테스트를 실행할 수 있습니다 . 이 테스트는 사양이 다릅니다. 가격 시리즈의 경우 일반적으로 다음 코드를 사용합니다 ( p항목 4의 지연 길이는 레벨에서 시리즈로 수행됨).

jo_eigen <- ca.jo(x, type = "eigen", ecdet = "const", K = p)
jo_trace <- ca.jo(x, type = "trace", ecdet = "const", K = p)

6. 모델 추정

계열이 함께 통합되지 않은 경우 VAR코드 에서처럼 명령을 사용 하여 모델을 쉽게 추정 할 수 있습니다 . 계열이 공집합 된 경우 다음 코드를 사용하여 Vector Error Correction 모델을 추정하여 장기적인 관계를 고려해야합니다 ( k공통 집합 순서는 다음과 같습니다 ).

vecm <- cajorls(joeigen, r = k)

7. 진단 테스트 실행

모형이 올바르게 지정되었는지 테스트하기 위해 잔차에 대한 직렬 상관 검정을 실행할 수 있습니다. 코드에서 serial.test함수 와 함께 Portmanteau 테스트를 사용했습니다 . 나는이 기능을 사용한 적이 없지만 괜찮다고 생각합니다. 패키지 MTS에 구현 된 Ljung-Box 테스트의 다변량 버전도 있으며이 기능으로 실행할 수 있습니다 mq.

8. 예측

모델이 올바르게 지정되었는지 확인한 후 predict코드에서와 같이 함수를 사용할 수 있습니다 . 임펄스 응답 함수를 플로팅하여 함수를 사용하여 변수가 특정 충격에 어떻게 반응하는지 확인할 수도 irf있습니다.

9. 예측 평가

예측을 한 후에는이를 평가하고 다른 모델과 비교해야합니다. 예측 정확도를 평가하는 몇 가지 방법은 여기 에서 찾을 수 있지만 링크에 설명 된대로 시리즈를 학습 및 테스트 세트로 나누는 것이 중요합니다.


이 자세한 답변에 감사드립니다! 공적분에 대한 Johansen 테스트와 관련하여, 둘 이상의 변수가 포함 된 경우 구현이 변경됩니까? 나는 다중 통합이 그 자체의 함정을 수반한다는 것을 읽었습니다. 이것이 자체 질문에 더 적합한 경우 죄송합니다.
youjustreadthis

1
아니요, 위와 동일한 코드로 수행 할 수 있지만이 경우 두 개 이상의 공적분 벡터를 찾을 수 있습니다. 이 종류의 유일한 제한은 Engle-Granger 테스트입니다.이 테스트는 이변 량 시리즈에만 적합하지만 일반적으로이 경우에 더 좋습니다.
Regis A. Ely

1
이 링크 는 johansenn 테스트를 실행하고 해석하는 데 도움 될 수 있습니다.
Regis A. Ely

잘 했어! 그래도 일부 형식과 맞춤법을 편집했습니다. 백틱에`(예를 들어, 함수 이름만큼 작음) 코드 조각이있는 것이 좋다는 점에 주목하십시오 predict. 텍스트를 선택하고 편집기 창의 맨 위에있는 "인용 부호"단추를 클릭하면 더 큰 코드를 코드 형식으로 지정할 수 있습니다.
Richard Hardy

@RichardHardy, VAR 추정 절차의 좋은 개요. 그러나 OP가 예측하려고한다는 사실을 무시했을 수도 있습니다. 결과적으로, 그 / 그녀는 수준으로 추정하기를 원할 것입니다.
Jacob H

9

나는 Regis A Ely에 아주 좋은 답변을 추가 할 것이라고 생각했습니다. 그의 대답은 틀리지 않지만 VAR을 사용하여 예측하는 것은 VAR을 사용하여 다른 VAR 유형 작업을 수행하는 것과 다릅니다 (예 : IRF, FEVD, Historical Decomp 등). 결과적으로 Regis A Ely가 설명하는 일부 단계는 경우에 따라 예측에 부정적인 영향을 미칩니다.

기권:

비 정적 데이터를 언급 할 때 시리즈에 확률 적 추세가 포함되어 있음을 의미합니다. 데이터에 시간 / 계절 추세가있는 경우 적절하게 필터링해야합니다.

먼저

일반적으로 무제한 VAR에서는 가짜 관계에 대해 걱정할 필요가 없습니다. 다른 고정되지 않은 계열 (X)에서 고정되지 않은 계열 (Y)을 회귀하고 두 계열이 함께 통합되지 않은 경우 가짜 회귀가 발생합니다. 그러나 Y 지연을 포함하여 X에서 Y를 회귀하는 경우 지연 Y를 포함하면 오류가 고정 될 것이므로 회귀는 의심되지 않습니다. 달리 말하면, Y의 지연은 이전에 X에 잘못 할당 된 변동을 포착합니다. 제한되지 않은 VAR은 본질적으로 각 방정식에 동일한 수의 지연 및 회귀가 포함 된 ARDL 회귀 시스템이므로, 가짜 회귀는 따라서 문제가되지 않을 것입니다. 데이터가 모두 I (1) 인 경우 데이터의 통합 여부에 관계없이 VAR을 실행할 수 있습니다. VECM은 변수 간의 단기 및 장기 / 통합 관계를 모델링하고 식별하려는 경우에만 필요합니다. 이제 문제는 VAR을 레벨 또는 첫 번째 차이로 실행해야 하는가입니다.

둘째

예측할 때 I (1) 데이터를 먼저 차분 할 필요는 없습니다. 원한다면 놀라 울 정도로 많은 개업의가 그렇지 않다고 생각했습니다. 고정식이 아닌 시리즈가있을 때에도 일관된 추정량을 얻을 수 있습니다. 종속 변수의 단일 지연으로 회귀하는 경우 이는 직관적입니다. 시리즈가 무작위 걷기 (즉, 정지하지 않은)를 따르는 경우 다음 기간에 대한 최적의 추정치는 정확히 마지막 기간 (예 : 베타 1)임을 알 수 있습니다. 비 정적 데이터가있는 모델에서 도출 된 추정치의 표준 오차는 T가 무한대에 가까워짐에 따라 추정치의 분산이 무한대에 가까워지기 때문에 다릅니다. 그러나 이것은 예측에 문제가되지 않습니다. 예측은 기본적으로 조건부 예상이므로 표준 오차가 아닌 모형의 모수 추정치에만 의존합니다. 또한 예측의 예측 간격은 부트 스트랩 오류를 통해 오류에서 직접 얻거나 경험적 예측 간격 (내가 가장 좋아하는 것)을 통해 많은 데이터가있는 경우 이러한 세 가지 접근 방식 모두 비 정적 데이터의 영향을받지 않습니다. 위의 가짜 회귀 토론에 따라 오류가 다시 고정되기 때문입니다.

왜 신경 쓰나요?

ADF 테스트는 특히 시리즈가 단위 루트에 가깝지만 그렇지 않은 경우 전력이 낮습니다. 또 다른 ADF 테스트는 실제로는 그렇지 않을 때 시리즈가 비정상이라고 주장하는 경향이 있다고한다.

ADF 테스트에서 시리즈가 비정상적인지 잘못 확인한다고 가정하십시오. 필요한 모든 변환을 수행하고 VECM을 추정하면 모형이 잘못되어 예측이 잘못됩니다. 이것이 사람들이 레벨을 예측하는 이유입니다.

Granger Causality는 어떻습니까?

데이터가 I (1) 일 때 VAR 수준으로 GC를 테스트 할 수도 있습니다. 나는 그것이 미치도록 들린다. 비 정적 데이터에서는 일반적으로 추론이 불가능하다는 것을 알고 있습니다. 그러나 공동 가설, 예를 들어 GC를 테스트 할 수 있습니다. 이것은 Sims, Stock and Watson (1990)을 그린 Toda and Yamamoto (1995)에 나와 있습니다. 응용 프로그램은 http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html을 참조 하십시오 .

마지막 것

그러나 VAR을 예측 이외의 용도로 사용하려면주의하십시오. 고정적이지 않고 공동 통합 된 시리즈 레벨의 VAR은 이상한 결과를 낳을 수 있습니다. 예를 들어, 엄밀히 말하면 VAR의 이동 평균 표현은 매개 변수 행렬이 반전되지 않으므로 존재하지 않습니다. 이 사실에도 불구하고 IRF는 여전히 얻을 수 있습니다. 추론도 실현 가능하지 않다 (상상 한 것처럼 공동 가설을 테스트 할 수 있음).

작은 샘플도 걱정하십시오. 내가 논의한 모든 것은 큰 샘플에서 잘 작동하지만 작은 샘플에서는 문제가 생길 수 있습니다. 이는 I (1) 데이터가있는 GC에 특히 해당됩니다.


1
와이엑스와이=β0+β1와이1++β와이+γ엑스γ^영형에스0에 가까워지고 (그것이 어디에 있습니까? 증거는 어디에 있습니까?), 문제는 점차 사라집니다. 그러나 얼마나 큰 샘플이 필요합니까? 증거가 나올 때까지 나는 가짜 관계를 계속 피할 것입니다.
Richard Hardy

1
에 대해서 내가 신경 이유는 무엇입니까? 프로세스에 루트가 단위 루트에 매우 가까운 경우 단위 루트 프로세스와 거의 같은 방식으로 동작합니다. 예측할 때, 충격이 영구적이라고 가정하고 충격이 매우 느리게 사라지는 것을 유지하는 것에는 차이가 거의 없습니다. 미래에 대해 아주 멀리 예측하지 않는 한 결과는 거의 동일합니다. 그렇기 때문에 지역 대안에 대한 전력이 낮은 단위 루트 테스트에 대해 너무 걱정하지 않습니다.
Richard Hardy

1
First 에 관한 또 다른 작은 참고 사항 : ADF 테스트에 관해 이야기 할 때 왜 걱정해야합니까? "모델이 잘못되어 예측이 잘못 될 것"이라고 말합니다. 글쎄, 이것은 처음 에도 적용 되지 않습니까? 왼쪽이 오른쪽에서 갈라지는 모델을 사용한 예측은 실제로 위 인용문으로 특징 지어집니다.
Richard Hardy

1
@Richardhardy 첫 번째 주장의 증거는 1994 년 해밀턴의 18 장을 보라. 특히, 18.2 절. 가짜 회귀 치료법. OLS 추정기가 T의 sqrt 속도로 수렴 할 때도 효율적이라는 점은 주목할 가치가 있습니다.
Jacob H

1
@RichardHardy 두 번째 의견은 공정한 포인트입니다. 내 레토르트가 틀린 모델을 추정하기 위해 데이터를 사전 테스트하고 필터링하는 데 시간을 소비하는 이유는 무엇입니까? 예측을 위해 레벨 사양이 일반적으로 정확합니다.
Jacob H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.