Phương pháp dự báo VAR


19

Tôi đang xây dựng mô hình VAR để dự báo giá của một tài sản và muốn biết liệu phương pháp của tôi có hợp lý hay không, liệu các thử nghiệm tôi đưa vào có liên quan hay không và nếu cần nhiều hơn để đảm bảo dự báo đáng tin cậy dựa trên các biến đầu vào của tôi.

Dưới đây là quy trình hiện tại của tôi để kiểm tra quan hệ nhân quả Granger và dự báo mô hình VAR được chọn.

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")

Là phương pháp này âm thanh?


1
Bạn đang sử dụng sự khác biệt thứ hai? Điều này là một chút khác thường và có thể làm cho mô hình nhạy cảm hơn mức cần thiết. Ngoài ra, bạn có thể mong đợi sự hợp nhất trong hệ thống của bạn? Và những gì về bất kỳ xu hướng thời gian xác định và / hoặc thời vụ, bạn đã kiểm tra cho những gì?
Richard Hardy

@Richard, sự khác biệt để đạt được sự ổn định theo như tôi hiểu được xác định bởi thử nghiệm adf và sẽ được điều chỉnh theo đề xuất của nó. Nếu thử nghiệm adf xác định nó đứng yên (trả về 0 tôi sẽ không phân biệt biến). Tôi đã không nghĩ đến sự hợp nhất và tính thời vụ, nhưng theo ấn tượng rằng phương pháp trên sẽ quan tâm đến bất kỳ xu hướng nào trong các biến.
youjustreadthis

2
Thử nghiệm ADF chỉ là một thử nghiệm, nó đi kèm với những hạn chế của nó. Vẽ các dữ liệu thô, sự khác biệt đầu tiên và cuối cùng là sự khác biệt thứ hai có thể có nhiều thông tin hơn là chỉ chạy thử nghiệm. Ngoài ra, thử nghiệm ADF có các thông số kỹ thuật khác nhau: (1) không đổi, không xu hướng; (2) không đổi, không có xu hướng; (3) hằng số và xu hướng; lựa chọn thứ tự độ trễ cho bài kiểm tra cũng có thể không cần thiết. Do đó, đừng mù quáng dựa vào kết quả. Từ góc độ chủ đề, giá tài sản thường được tích hợp theo thứ tự một, I (1). Tôi (2) sẽ rất khó để biện minh ...
Richard Hardy

@youjustreadthis Tôi đã bao gồm một câu trả lời dưới đây. Tôi thực sự khuyên bạn nên xem xét một số ý nghĩa của nó
Jacob H

Câu trả lời:


28

Tôi nghĩ rằng bạn đã hiểu đúng, nhưng khi xây dựng mô hình VAR, tôi thường đảm bảo rằng tôi làm theo các bước sau:

1. Chọn các biến

Đây là phần quan trọng nhất của việc xây dựng mô hình của bạn. Nếu bạn muốn dự báo giá của một tài sản, bạn cần bao gồm các biến có liên quan đến cơ chế hình thành giá. Cách tốt nhất để làm điều này là thông qua một mô hình lý thuyết. Vì bạn không đề cập đến tài sản là gì và các biến khác mà bạn đưa vào mô hình của mình là gì, tôi thực sự không thể nói nhiều về mặt hàng này, nhưng bạn có thể tìm thấy tóm tắt về các mô hình định giá tài sản ở đây .

2. Kiểm tra dữ liệu và điều chỉnh thích hợp

Khi bạn chọn các biến, bạn có thể thực hiện một số điều chỉnh cho dữ liệu sẽ cải thiện việc ước tính và giải thích mô hình. Nó rất hữu ích để sử dụng số liệu thống kê tóm tắt và xem một âm mưu của loạt bài để phát hiện các ngoại lệ, dữ liệu bị thiếu và các hành vi lạ khác. Khi làm việc với dữ liệu giá, mọi người thường lấy các bản ghi tự nhiên, đây là một phép biến đổi ổn định phương sai và cũng có một diễn giải tốt (chênh lệch giá trong các bản ghi trở thành lợi nhuận gộp liên tục). Tôi không chắc chắn nếu bạn đã lấy nhật ký trước khi ước tính mô hình, nhưng đó là một ý tưởng tốt để làm như vậy nếu bạn đang làm việc với giá tài sản.

3. Kiểm tra xem dữ liệu có chứa các thành phần không cố định không

Bây giờ bạn có thể sử dụng các bài kiểm tra gốc đơn vị để kiểm tra xem loạt của bạn có đứng yên không. Nếu bạn chỉ quan tâm đến dự báo, như được lưu ý bởi @JacobH, bạn có thể chạy VAR ở các cấp ngay cả khi chuỗi của bạn không cố định, nhưng sau đó các lỗi tiêu chuẩn của bạn không thể tin cậy được, có nghĩa là bạn không thể suy luận về giá trị của các hệ số. Bạn đã kiểm tra văn phòng phẩm bằng cách sử dụng thử nghiệm ADF, thường được sử dụng trong các ứng dụng này, nhưng lưu ý rằng bạn nên chỉ định nếu bạn muốn chạy thử nghiệm với i) không có hằng số và không có xu hướng; ii) không đổi và không có xu hướng; và iii) một hằng số và một xu hướng. Thông thường các chuỗi giá có xu hướng ngẫu nhiên, do đó, một xu hướng tuyến tính sẽ không chính xác. Trong trường hợp này, bạn có thể chọn đặc điểm kỹ thuật ii. Trong mã của bạn, bạn đã sử dụngndiffschức năng của gói dự báo. Tôi không chắc chắn trong số ba lựa chọn thay thế này, hàm này thực hiện để tính số lượng khác biệt (tôi không thể tìm thấy nó trong tài liệu). Để kiểm tra kết quả của bạn, bạn có thể muốn sử dụng ur.dfchức năng trong gói "urca":

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

Lưu ý rằng lệnh này sẽ chạy thử nghiệm ADF với hằng số và độ trễ được chọn bởi lệnh AIC, với độ trễ tối đa là 10. Nếu bạn gặp vấn đề trong việc diễn giải kết quả, chỉ cần nhìn vào câu hỏi này . Nếu chuỗi là I (1) chỉ cần sử dụng chênh lệch, sẽ bằng với lợi nhuận gộp liên tục. Nếu thử nghiệm chỉ ra rằng chuỗi đó là I (2) và bạn nghi ngờ về việc bạn có thể sử dụng các thử nghiệm khác, ví dụ: thử nghiệm Phillips-Perron (PP.testhàm trong R). Nếu tất cả các thử nghiệm xác nhận rằng chuỗi của bạn là I (2) (hãy nhớ sử dụng nhật ký của chuỗi trước khi chạy thử nghiệm), sau đó lấy điểm khác biệt thứ hai, nhưng lưu ý rằng cách diễn giải kết quả của bạn sẽ thay đổi, vì hiện tại bạn đang làm việc với sự khác biệt của lợi nhuận gộp liên tục. Giá của tài sản thường là tôi (1) vì chúng gần với bước đi ngẫu nhiên, đó là tiếng ồn trắng khi áp dụng chênh lệch đầu tiên.

4. Chọn thứ tự của mô hình

Điều này có thể được thực hiện với các tiêu chí thường được sử dụng như Akaike, Schwarz (BIC) và Hannan-Quinn. Bạn đã thực hiện điều đó với VARselectchức năng và điều đó đúng, nhưng hãy nhớ tiêu chí mà bạn đã sử dụng để đưa ra quyết định là gì. Thông thường các tiêu chí khác nhau cho thấy các đơn đặt hàng khác nhau cho VAR.

5. Kiểm tra nếu có mối quan hệ hợp nhất

Nếu tất cả các chuỗi của bạn là I (1) hoặc I (2), trước khi chạy mô hình VAR, bạn nên kiểm tra xem có mối quan hệ hợp nhất nào giữa các chuỗi hay không, đặc biệt nếu bạn muốn phân tích phản hồi xung với dư. Bạn có thể làm điều đó bằng cách sử dụng thử nghiệm Johansenn hoặc Engle-Granger (chỉ dành cho các mô hình bivariate). Trong R, bạn có thể chạy thử nghiệm Johansen vớica.jo chức năng của gói "urca". Lưu ý rằng thử nghiệm này cũng có thông số kỹ thuật khác nhau. Đối với chuỗi giá, tôi thường sử dụng mã sau ( pđộ dài độ trễ của mục 4, được thực hiện với chuỗi theo cấp độ):

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

6. Ước tính mô hình

Nếu chuỗi của bạn không được hợp nhất, bạn có thể dễ dàng ước tính mô hình bằng VARlệnh, như được thực hiện trong mã của bạn. Trong trường hợp chuỗi được hợp nhất, bạn cần xem xét mối quan hệ lâu dài bằng cách ước tính mô hình Sửa lỗi Vector với mã sau đây ( ktheo thứ tự hợp nhất):

vecm <- cajorls(joeigen, r = k)

7. Chạy thử nghiệm chẩn đoán

Để kiểm tra xem mô hình của bạn có được chỉ định rõ hay không, bạn có thể chạy thử nghiệm tương quan nối tiếp trên các phần dư. Trong mã của bạn, bạn đã sử dụng một bài kiểm tra Portmanteau với serial.testchức năng. Tôi chưa bao giờ sử dụng chức năng này nhưng tôi nghĩ nó ổn. Ngoài ra còn có một phiên bản đa biến của thử nghiệm Ljung-Box được triển khai trong gói MTS mà bạn có thể chạy với chức năng mq.

8. Đưa ra dự đoán

Sau khi bạn chắc chắn rằng mô hình của bạn được chỉ định rõ, bạn có thể sử dụng predict chức năng như bạn đã làm trong mã của mình. Bạn thậm chí có thể vẽ các hàm phản hồi xung để kiểm tra cách các biến phản ứng với một cú sốc cụ thể bằng cách sử dụng irfhàm.

9. Đánh giá dự đoán

Khi bạn đưa ra dự đoán của mình, bạn phải đánh giá chúng và so sánh với các mô hình khác. Một số phương pháp để đánh giá độ chính xác của dự báo có thể được tìm thấy ở đây , nhưng để làm được điều đó, điều quan trọng là bạn phải chia chuỗi của mình trong một khóa đào tạo và tập kiểm tra, như được giải thích trong liên kết.


Cảm ơn bạn rất nhiều vì câu trả lời chi tiết này! Liên quan đến bài kiểm tra Johansen cho sự hợp nhất, việc thực hiện có thay đổi khi bao gồm hơn 2 biến không? Hãy tin rằng tôi đã đọc rằng mulitcointegration mang những cạm bẫy của chính nó. Xin lỗi nếu điều này phù hợp hơn cho một câu hỏi của riêng mình.
youjustreadthis

1
Không, bạn có thể làm điều đó với cùng một mã như trên, nhưng bạn có thể tìm thấy nhiều hơn một vectơ hợp nhất trong trường hợp này. Hạn chế duy nhất của loại này là với thử nghiệm Engle-Granger, chỉ phù hợp với loạt bivariate, nhưng thường tốt hơn trong trường hợp này.
Regis A. Ely

1
Liên kết này có thể giúp chạy và giải thích các bài kiểm tra johansenn.
Regis A. Ely

Bạn đã làm rất tốt! Tôi đã chỉnh sửa một số định dạng và chính tả mặc dù. Lưu ý rằng thật tuyệt khi có các đoạn mã (thậm chí nhỏ như tên hàm) trong backticks `, vd predict. Các đoạn mã lớn hơn có thể được định dạng dưới dạng mã bằng cách chọn văn bản và nhấp vào nút "dấu ngoặc kép" ở đầu cửa sổ soạn thảo.
Richard Hardy

@RichardHardy, phác thảo đẹp về thủ tục ước tính VAR. Tuy nhiên, tôi nghĩ rằng bạn có thể đã bỏ qua thực tế là OP muốn dự báo. Do đó, anh ấy / cô ấy có thể muốn ước tính theo cấp độ.
Jacob H

9

Tôi nghĩ rằng tôi sẽ thêm vào câu trả lời rất hay của Regis A Ely. Câu trả lời của ông không sai, nhưng sử dụng VAR để dự báo khác với sử dụng VAR để thực hiện các việc loại VAR khác (ví dụ IRF, FEVD, Decomp. V.v ...). Do đó, một số bước được Regis A Ely vạch ra sẽ ảnh hưởng tiêu cực đến dự báo của bạn trong một số trường hợp.

Tuyên bố từ chối trách nhiệm:

Khi tôi đề cập đến dữ liệu không cố định, tôi có nghĩa là loạt bài chứa một xu hướng ngẫu nhiên. Nếu dữ liệu có xu hướng thời gian / theo mùa, nó phải được lọc phù hợp.

Đầu tiên

Nói chung, trong một VAR không giới hạn, không cần phải lo lắng về mối quan hệ giả. Hồi quy giả xảy ra khi bạn hồi quy một chuỗi không cố định (Y) trên một chuỗi không cố định khác (X) và cả hai chuỗi không được hợp nhất. Tuy nhiên, nếu bạn hồi quy Y trên X cũng như độ trễ của Y thì hồi quy sẽ không bị giả mạo do việc bao gồm độ trễ Y đảm bảo rằng các lỗi sẽ đứng yên. Nói một cách khác, độ trễ của Y chọn biến thể được gán sai trước đó cho X. Vì VAR không bị hạn chế về cơ bản là một hệ thống hồi quy ARDL trong đó mỗi phương trình chứa cùng một độ trễ và hồi quy, nên rõ ràng là hồi quy giả do đó không có khả năng là một vấn đề. Nói một cách khác nếu dữ liệu của bạn là tất cả I (1), bất kể nó có được tích hợp hay không, bạn có thể chạy VAR. VECM chỉ cần thiết khi bạn muốn cả hai mô hình và xác định mối quan hệ hợp tác / ngắn hạn và dài hạn giữa các biến. Câu hỏi bây giờ là, bạn nên chạy VAR theo cấp độ hoặc trong những khác biệt đầu tiên.

Thứ hai

Khi dự báo, trước tiên không cần thiết phải khác biệt dữ liệu I (1). Bạn có thể nếu bạn thích, nghĩ rằng một lượng học viên đáng ngạc nhiên không. Hãy nhớ rằng khi chúng ta có một loạt không cố định, chúng ta vẫn có thể có được một công cụ ước tính nhất quán. Đối với hồi quy với độ trễ duy nhất của biến phụ thuộc, đây là trực quan. Nếu một chuỗi đang đi theo một bước ngẫu nhiên (tức là không cố định), chúng tôi biết ước tính tốt nhất về nơi sẽ là giai đoạn tiếp theo chính xác là đó là giai đoạn trước (tức là beta là 1). Tuy nhiên, các lỗi tiêu chuẩn của các ước tính xuất phát từ các mô hình với dữ liệu không cố định là khác nhau bởi vì nói đúng ra phương sai của ước tính tiếp cận vô hạn khi T tiến đến vô cùng. Điều này, tuy nhiên, không phải là một vấn đề để dự báo. Dự báo về cơ bản là một kỳ vọng có điều kiện và do đó chỉ dựa vào các ước tính tham số của mô hình của bạn chứ không phải lỗi tiêu chuẩn. Hơn nữa, các khoảng dự đoán của dự báo của bạn sẽ được lấy trực tiếp từ các lỗi của bạn, bằng các lỗi bootstrapping hoặc nếu bạn có nhiều dữ liệu thông qua các khoảng dự đoán theo kinh nghiệm (yêu thích của tôi!), Cả ba cách tiếp cận này đều không bị ảnh hưởng bởi dữ liệu không cố định bởi vì một lần nữa lỗi của bạn sẽ đứng yên theo thảo luận hồi quy giả của chúng tôi ở trên.

Sao tôi phải quan tâm?

Thử nghiệm ADF có công suất thấp, đặc biệt là khi chuỗi gần với đơn vị gốc, nhưng không. Nói một thử nghiệm khác của ADF sẽ có xu hướng nhầm lẫn khẳng định rằng một loạt là không cố định trong khi thực tế thì không.

Giả sử rằng xét nghiệm ADF của bạn đảm bảo sai rằng chuỗi này không cố định. Nếu bạn thực hiện tất cả các chuyển đổi cần thiết và ước tính VECM, dự báo của bạn sẽ sai, vì mô hình của bạn sai. Đây là lý do tại sao mọi người dự báo ở cấp độ.

Thế còn nhân quả Granger ???

Bạn thậm chí có thể kiểm tra GC với VAR ở các mức khi dữ liệu là I (1). Tôi biết điều đó nghe thật điên rồ. Chúng tôi biết rằng suy luận thường là không thể với dữ liệu không cố định. Tuy nhiên, có thể kiểm tra các giả thuyết chung, ví dụ như GC. Điều này được thể hiện trong Toda và Yamamoto (1995) dựa trên Sims, Stock và Watson (1990). Đối với một ứng dụng, hãy xem http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html .

Thứ cuối cùng

Tuy nhiên, nếu bạn muốn sử dụng VAR của mình cho những việc khác ngoài dự báo, hãy cẩn thận. Một VAR ở cấp độ với loạt không cố định và đồng tích hợp có thể mang lại một số kết quả kỳ lạ. Ví dụ, nói đúng ra, đại diện Trung bình Di chuyển của VAR không tồn tại vì ma trận tham số sẽ không thể đảo ngược. Mặc dù thực tế này IRF vẫn có thể thu được. Suy luận cũng không khả thi (các giả thuyết chung có thể được kiểm tra như đã thảo luận ở trên).

Cũng lo lắng về các mẫu nhỏ. Mọi thứ tôi đã thảo luận đều hoạt động tốt trong mẫu lớn, nhưng mọi thứ có thể trở nên kỳ quặc trong các mẫu nhỏ. Điều này đặc biệt đúng với GC với dữ liệu I (1).


1
ytxtyt= =β0+β1yt-1+Giáo dục+βpyt-p+γxtγ^ÔiLSđược gần bằng không (bằng chứng? đâu là bằng chứng?), vấn đề dần tan biến. Nhưng làm thế nào lớn một mẫu là cần thiết cho điều đó? Cho đến khi một bằng chứng được đưa ra, tôi sẽ tiếp tục tránh các mối quan hệ giả.
Richard Hardy

1
Về lý do tại sao tôi quan tâm? , nếu quy trình có một gốc rất gần với một đơn vị gốc, thì nó hoạt động rất giống với quy trình gốc đơn vị. Khi dự báo, do đó có rất ít sự khác biệt giữa giả định rằng các cú sốc là vĩnh viễn và duy trì rằng chúng biến mất rất chậm. Trừ khi bạn dự báo rất xa về tương lai, kết quả sẽ gần như giống nhau. Đó là lý do tại sao tôi không quá lo lắng về việc kiểm tra gốc đơn vị có công suất thấp cho các lựa chọn thay thế cục bộ.
Richard Hardy

1
Một lưu ý nhỏ khác liên quan đến Đầu tiên : khi nói về thử nghiệm ADF trong Tại sao tôi quan tâm? , bạn nói "dự báo của bạn sẽ sai, vì mô hình của bạn sai". Chà, điều này cũng đúng với First phải không? Dự báo bằng cách sử dụng một mô hình trong đó phía bên trái phân kỳ từ phía bên phải thực sự được đặc trưng bởi trích dẫn ở trên.
Richard Hardy

1
@Richardhardy Để chứng minh cho khẳng định đầu tiên của tôi, hãy xem Chương 18 trong Hamilton 1994. Đặc biệt, phần 18.2, Chữa bệnh cho hồi quy giả. Điều đáng chú ý là các công cụ ước tính OLS cũng hoạt động hiệu quả khi chúng hội tụ theo tỷ lệ sqrt của T.
Jacob H

1
@RichardHardy bình luận thứ hai của bạn là một điểm công bằng. Tôi nghĩ rằng câu trả lời của tôi là tại sao lại dành thời gian thử nghiệm trước và sau đó chỉ lọc dữ liệu để ước tính mô hình sai. Để dự báo, thông số kỹ thuật cấp độ thường sẽ chính xác
Jacob H
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.