VAR öngörme yöntemi


19

Bir varlığın fiyatını tahmin etmek için bir VAR modeli oluşturuyorum ve yöntemimin istatistiksel olarak sağlam olup olmadığını, dahil ettiğim testlerin alakalı olup olmadığını ve girdi değişkenlerime dayanarak güvenilir bir tahmin sağlamak için daha fazlasının gerekip gerekmediğini bilmek istiyorum.

Granger nedenselliğini kontrol etmek ve seçilen VAR modelini tahmin etmek için şu anki işlemim aşağıdadır.

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

Bu yöntem sağlam mı?


1
İkinci farklılıklar mı kullanıyorsunuz? Bu biraz sıra dışı ve modeli olması gerekenden daha duyarlı hale getirebilir. Ayrıca, sisteminizde eşbütünleşme bekleyebilirsiniz? Ve herhangi bir deterministik zaman eğilimi ve / veya mevsimsellik hakkında, ya bunları kontrol ettiniz mi?
Richard Hardy

@Richard, durağanlık elde etmek için farklar anladığım kadarıyla adf testi ile belirlendi ve önerisine göre ayarlanacaktı. Adf testi durağan olduğunu belirlerse (0 dönüş ben değişkeni fark etmez). Eşbütünleşme ve mevsimsellik düşünmedim, ancak yukarıdaki yöntemin değişkenlerdeki herhangi bir eğilimi koruyacağı izlenimi altındaydım.
youjustreadthis

3
ADF testi bir testtir, sınırlılıklarıyla birlikte gelir. Ham verilerin çizilmesi, ilk farklar ve nihayetinde ikinci farklar sadece testi yapmaktan daha bilgilendirici olabilir. Ayrıca, ADF testinin farklı özellikleri vardır: (1) sabit yok, trend yok; (2) sabit, trend yok; (3) sabit ve eğilim; Test için gecikme sırası seçimi de önemsiz olabilir. Bu nedenle, sonuçlara körü körüne güvenmeyin. Konu bakış açısından, varlık fiyatları genellikle birinci sırada yer almaktadır (I). Ben (2) haklı çıkarmak zor olurdu ...
Richard Hardy

@youjustreadBuraya bir cevap ekledim. Bazı etkilerini düşünmenizi şiddetle tavsiye ederim
Jacob H

Yanıtlar:


28

Bence oldukça doğru buldunuz, ancak bir VAR modeli oluştururken genellikle şu adımları izlediğimden emin olurum:

1. Değişkenleri seçin

Bu, modelinizi oluşturmanın en önemli parçasıdır. Bir varlığın fiyatını tahmin etmek istiyorsanız, fiyat oluşum mekanizması ile ilgili değişkenleri dahil etmeniz gerekir. Bunu yapmanın en iyi yolu teorik bir modeldir. Varlığın ne olduğunu ve modelinize dahil ettiğiniz diğer değişkenlerin neler olduğunu söylemediğiniz için bu öğe hakkında çok fazla şey söyleyemem, ancak burada varlık fiyatlandırma modellerinin bir özetini bulabilirsiniz .

2. Verileri kontrol edin ve gerekli ayarlamaları yapın

Değişkenleri seçtikten sonra, modelin tahminini ve yorumunu geliştirecek verilerde bazı ayarlamalar yapabilirsiniz. Özet istatistikleri kullanmak ve aykırı değerleri, eksik verileri ve diğer garip davranışları tespit etmek için serinin bir grafiğini görmek yararlıdır. Fiyat verileriyle çalışırken, insanlar genellikle varyans dengeleyici bir dönüşüm olan ve aynı zamanda iyi bir yorumu olan doğal günlükler alırlar (günlüklerdeki fiyat farkı sürekli bileşik getiriler haline gelir). Modeli tahmin etmeden önce günlükleri alıp almadığınızdan emin değilim, ancak varlık fiyatları ile çalışıyorsanız bunu yapmak iyi bir fikirdir.

3. Verilerin sabit olmayan bileşenler içerip içermediğini kontrol edin

Artık serinin sabit olup olmadığını kontrol etmek için birim kök testlerini kullanabilirsiniz. Yalnızca @JacobH tarafından belirtildiği gibi öngörme ile ilgileniyorsanız, diziniz sabit olmasa bile düzeylerde VAR çalıştırabilirsiniz, ancak standart hatalarınıza güvenilemez, yani değeri hakkında çıkarım yapamazsınız. katsayılar. Bu uygulamalarda çok yaygın olarak kullanılan ADF testini kullanarak sabit testi yaptınız, ancak testi i) sabit veya trend olmadan çalıştırmak isteyip istemediğinizi belirtmeniz gerektiğini unutmayın; ii) sabit ve eğilim yok; ve iii) bir sabit ve bir eğilim. Genellikle fiyat serileri stokastik eğilimlere sahiptir, bu nedenle doğrusal bir eğilim doğru olmayacaktır. Bu durumda spesifikasyonu seçebilirsiniz ii. Kodunuzdandiffstahmin paketinin işlevi. Farklılıkların sayısını hesaplamak için bu üç seçenekten hangisinin uyguladığından emin değilim (dokümantasyonda bulamadım). Sonucunuzu kontrol etmek için ur.df"urca" paketindeki işlevi kullanmak isteyebilirsiniz :

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

Bu komutun ADF testini bir sabitle ve AIC komutu tarafından seçilen gecikmelerle, maksimum 10 gecikmeyle çalıştıracağını unutmayın. Sonuçları yorumlamakta sorun yaşıyorsanız bu soruya bakın . Seri I (1) ise, sürekli bileşik getirilere eşit olan farkı kullanın. Test, serinin I (2) olduğunu gösteriyorsa ve başka testler kullanabileceğinizden şüphe duyuyorsanız, örneğin Phillips-Perron testi (PP.testişlevi R). Tüm testler dizinizin I (2) olduğunu onaylarsa (testleri çalıştırmadan önce dizinin günlüğünü kullanmayı unutmayın), sonra ikinci farkı alın, ancak sonuçları yorumlamanızın değişeceğine dikkat edin, çünkü şimdi sürekli bileşik getirilerin farkı. Varlıkların fiyatları genellikle I (1) 'dir, çünkü ilk farkı uygularken beyaz bir gürültü olan rastgele bir yürüyüşe yakındırlar.

4. Modelin sırasını seçin

Bu Akaike, Schwarz (BIC) ve Hannan-Quinn gibi yaygın olarak kullanılan kriterlerle yapılabilir. Bunu VARselectişlevle yaptınız ve bu doğru, ancak kararınızı verirken kullandığınız kriterin ne olduğunu unutmayın. Genellikle farklı kriterler VAR için farklı siparişleri gösterir.

5. Eşbütünleşme ilişkileri olup olmadığını kontrol edin

Tüm dizileriniz I (1) veya I (2) ise, bir VAR modeli çalıştırmadan önce, özellikle seri ile dürtü tepki analizi yapmak istiyorsanız, seri arasında eşbütünleşme ilişkisi olup olmadığını kontrol etmek genellikle iyi bir fikirdir. kalıntılar. Bunu Johansenn testini veya Engle-Granger'ı kullanarak yapabilirsiniz (sadece iki değişkenli modeller için). R'de Johansen testini ca.jo"urca" paketinin fonksiyonu ile çalıştırabilirsiniz . Bu testin ayrıca farklı özelliklere sahip olduğunu unutmayın. Fiyat serileri için genellikle aşağıdaki kodu kullanırım ( pseri olarak seviyelerle gerçekleştirilen madde 4'ün gecikme uzunluğu nerede ):

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

6. Modeli tahmin edin

Serileriniz entegre edilmezse, VARkodunuzda olduğu gibi modeli komutla kolayca tahmin edebilirsiniz . Serinin birlikte entegre edilmesi durumunda, bir Vektör Hata Düzeltme modelini aşağıdaki kodla tahmin ederek uzun dönem ilişkisini göz önünde bulundurmanız gerekir k(eşbütünleşme sırası nerede ):

vecm <- cajorls(joeigen, r = k)

7. Tanılama testlerini çalıştırın

Modelinizin iyi tanımlanıp tanımlanmadığını test etmek için artıklarda bir seri korelasyon testi çalıştırabilirsiniz. Kodunuzda bu serial.testişleve sahip bir Portmanteau testi kullandınız . Bu işlevi hiç kullanmadım ama bence sorun yok. Ayrıca MTS paketinde, işlevle çalıştırabileceğiniz Ljung-Box testinin çok değişkenli bir sürümü de vardır mq.

8. Tahminler yapın

Modelinizin iyi tanımlandığından emin olduktan sonra predictkodu kodunuzda yaptığınız gibi kullanabilirsiniz . Fonksiyonu kullanarak değişkenlerin belirli bir şoka nasıl tepki verdiğini kontrol etmek için dürtü tepki fonksiyonlarını bile çizebilirsiniz irf.

9. Tahminleri değerlendirin

Tahminlerinizi yaptıktan sonra bunları değerlendirmeli ve diğer modellerle karşılaştırmalısınız. Tahminlerin doğruluğunu değerlendirmek için bazı yöntemler burada bulunabilir , ancak bunu yapmak için, bağlantıda açıklandığı gibi serilerinizi bir eğitim ve test setine bölmeniz çok önemlidir.


Bu ayrıntılı cevap için çok teşekkür ederim! Johansen eşbütünleşme testi ile ilgili olarak, 2'den fazla değişken dahil edildiğinde uygulama değişir mi? İnanıyorum ki, mulitcointegrasyonun kendine has tuzakları vardır. Bu kendi başına bir soru için daha uygunsa üzgünüm.
youjustreadthis

1
Hayır, yukarıdakiyle aynı kodla yapabilirsiniz, ancak bu durumda birden fazla eşbütünleştirici vektör bulabilirsiniz. Bu tür tek sınırlama, sadece iki değişkenli seriler için uygun olan ancak genellikle bu durumda daha iyi olan Engle-Granger testidir.
Regis A. Ely

1
Bu bağlantı johansenn testlerinin yapılmasına ve yorumlanmasına yardımcı olabilir.
Regis A. Ely

İyi iş! Yine de bazı biçimlendirme ve yazımları düzenledim. Geri kodlarda `` kod parçalarının (işlev adları kadar küçük olsa bile) olması iyi olur, örn predict. Daha büyük kod parçaları, metin seçilerek ve editör penceresinin üst kısmındaki "tırnak işaretleri" düğmesini tıklayarak kod olarak biçimlendirilebilir.
Richard Hardy

@RichardHardy, VAR tahmin prosedürünün güzel taslağı. Ancak, OP'nin tahmin etmek istediği gerçeğini göz ardı etmiş olabileceğinizi düşünüyorum. Sonuç olarak, muhtemelen seviyelerini tahmin etmek isteyecektir.
Jacob H

10

Regis A Ely'e çok güzel bir cevap ekleyeceğimi düşündüm. Cevabı yanlış değil, ancak tahmin etmek için bir VAR kullanmak, diğer VAR tipi şeyler yapmak için bir VAR kullanmaktan farklıdır (örn. IRF, FEVD, Tarihsel Dekomp. Vb.). Sonuç olarak, Regis A Ely tarafından belirtilen adımlardan bazıları, bazı durumlarda tahmininizi olumsuz etkileyecektir.

Yasal Uyarı:

Durağan olmayan verilere atıfta bulunduğumda, dizinin stokastik bir eğilim içerdiğini kastediyorum. Verilerin bir zaman / mevsimsel eğilimi varsa, uygun şekilde filtrelenmesi gerekir.

İlk

Genel olarak, sınırsız bir VAR'da sahte bir ilişki hakkında endişelenmenize gerek yoktur. Durağan olmayan başka bir seri (X) üzerinde durağan olmayan bir seriyi (Y) gerilediğinizde ve her iki seri de birleştirilmediğinde sahte bir regresyon oluşur. Bununla birlikte, X üzerinde Y'ye ve Y gecikmelerine sahip olursanız, gecikme Y'nin dahil edilmesi, hataların durağan olmasını sağlar. Başka bir deyişle, Y gecikmeleri, daha önce yanlış bir şekilde X'e atanan varyasyonu alır. Sınırsız bir VAR, aslında her denklemin aynı sayıda gecikme ve regresör içerdiği bir ARDL regresyon sistemi olduğundan, sahte regresyonun açık olduğu açık olmalıdır. bu nedenle bir sorun olması muhtemel değildir. Başka bir deyişle, verilerinizin hepsi I (1) ise, birlikte entegre olup olmadığına bakılmaksızın, bir VAR çalıştırabilirsiniz. VECM sadece değişkenler arasındaki kısa ve uzun dönemli / birlikte-entegrasyon ilişkisini hem modellemek hem de tanımlamak istediğinizde gereklidir. Şimdi soru, VAR'ı düzeylerde veya ilk farklarda çalıştırmanız gerektiğidir.

İkinci

Öngörü yapılırken, ilk I (1) verilerinin farkına gerek yoktur. İsterseniz şaşırtıcı bir uygulayıcının düşünmediğini düşünebilirsiniz. Sabit olmayan bir serimiz olduğunda, yine de tutarlı bir tahminci elde edebileceğimizi unutmayın. Bağımlı değişkenin tek bir gecikmesi olan bir regresyon için bu sezgiseldir. Bir seri rastgele bir yürüyüş izliyorsa (yani durağan olmayan), bir sonraki dönemin nerede olacağına dair en iyi tahminin tam olarak son dönem olmasıydı (yani beta 1'dir). Bununla birlikte, sabit olmayan verilere sahip modellerden türetilen tahminlerin standart hataları farklıdır, çünkü T ifadesi sonsuzluğa yaklaştıkça, tahminin varyansına kesin olarak değinir. Bununla birlikte, bu tahmin için bir sorun değildir. Öngörü temelde koşullu bir beklentidir ve bu nedenle standart hatalara değil, yalnızca modelinizin parametre tahminlerine dayanır. Ayrıca, tahmininizin tahmin aralıkları ya doğrudan hatalarınızdan, önyükleme hatalarıyla elde edilecek ya da ampirik tahmin aralıklarıyla (favorim!) Çok fazla veriye sahipseniz, bu yaklaşımların üçü de sabit olmayan verilerden etkilenmeyecektir. çünkü yine, yukarıdaki sahte regresyon tartışmamız uyarınca hatalarınız durağan olacaktır.

Neden umurumda olsun?

ADF testi, özellikle seri birim kök olmaya yakın olduğunda, ancak olmadığında düşük güce sahiptir. Bir diğeri, ADF testinin, bir dizinin aslında olmadığı zaman sabit olmadığını iddia etme eğiliminde olduğunu söyledi.

ADF testinizin dizinin sabit olmadığını yanlış bir şekilde garanti ettiğini varsayın. Gerekli tüm dönüşümü yapar ve bir VECM tahmin ederseniz, modeliniz yanlış olduğu için tahmininiz yanlış olur. Bu yüzden insanlar düzeylerde tahmin ediyorlar.

Granger Nedensellik ???

Veriler I (1) olduğunda GC'yi seviyelerde bir VAR ile test edebilirsiniz. Kulağa çılgınca geldiğini biliyorum. Durağan olmayan verilerle çıkarımın genellikle mümkün olmadığını biliyoruz. Bununla birlikte, eklem hipotezlerini, örneğin GC'yi test etmek mümkündür. Bu, Sims, Stock ve Watson'a (1990) dayanan Toda ve Yamamoto'da (1995) gösterilmiştir. Bir başvuru için http://davegiles.blogspot.com/2011/04/testing-for-granger-causality.html adresine bakın .

Son şey

Bununla birlikte, VAR'nızı öngörme dışındaki şeyler için kullanmak istiyorsanız dikkatli olun. Durağan olmayan ve birleşik entegre serilere sahip seviyelerde bir VAR bazı garip sonuçlar verebilir. Örneğin, tam olarak söylemek gerekirse, parametre matrisi ters çevrilemeyeceğinden VAR'ın Hareketli Ortalama gösterimi mevcut değildir. Buna rağmen IRF hala elde edilebilir. Çıkarım da mümkün değildir (düşünce eklem hipotezleri yukarıda tartışıldığı gibi test edilebilir).

Ayrıca küçük örneklerden endişe edin. Tartıştığım her şey büyük örneklemde iyi çalışıyor, ancak küçük örneklerde işler tuhaflaşabiliyor. Bu özellikle I (1) verisi olan GC için geçerlidir.


1
ytxtyt=β0+β1yt-1+...+βpyt-p+γxtγ^ÖLSsıfıra yaklaşırsa (kanıt? nerede kanıt?) sorun yavaş yavaş yok olur. Ama bunun için ne kadar büyük bir numune gerekiyor? Bir kanıt verilene kadar sahte ilişkilerden kaçınmaya devam edecektim.
Richard Hardy

1
İlgili umrumda sebebi ne olabilir? , işlemin bir birim köküne çok yakın bir kökü varsa, birim kök işlemiyle aynı şekilde davranır. Tahmin yaparken, şokların kalıcı olduğunu varsaymak ile aşırı yavaş yok olmalarını sağlamak arasında çok az fark vardır. Geleceğe çok yakın bir tahmin yapmadıkça, sonuç neredeyse aynı olacaktır. Bu yüzden yerel alternatifler için düşük güce sahip birim kök testi konusunda fazla endişelenmiyorum.
Richard Hardy

1
İlk ile ilgili bir başka küçük not : ADF testi hakkında konuşurken Neden umurumda? , "tahmininiz yanlış olacak, çünkü modeliniz yanlış" diyorsunuz. Bu, İlk için de geçerli , değil mi? Sol tarafın sağ taraftan ayrıldığı bir model kullanılarak tahmin yapılması aslında yukarıdaki alıntı ile karakterize edilir.
Richard Hardy

1
@Richardhardy İlk iddiamın kanıtı için Hamilton 1994'teki Bölüm 18'e bakınız. Özellikle Bölüm 18.2, Sahte Regresyon için Tedaviler. OLS tahmincilerinin de T'nin sqrt oranında yakınsak olduğu için de etkili olduğunu belirtmek gerekir
Jacob H

2
@erdogancevher Giles bağlantısı, ön test yanlılığından çok daha fazlasını tartışır, özellikle GC'nin bir CI VAR içinde mümkün olduğunu kanıtlayan Toda ve Yamamoto makalelerini okuyun. Ayrıca, ön test ile problemin noktasını kaçırdığınızı düşünüyorum. Bir birim kökü testi ile ilgili sorun, hepsinin birime yakın birim kök işlemine karşı düşük güce sahip olmasıdır. Başka bir deyişle, yakın bir birim kökünüz olduğunda, testiniz muhtemelen bir birim kök bulacaktır. Bu, sonuçlarınızı birkaç kez etkileyecek bir dizi gereksiz veri filtrelemesi yapmanızı sağlar. Bu nedenle, IMO'nun VAR'ı kullanmak daha iyidir
Jacob H
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.