Var olmayan veya eksik verileri nasıl işleyebilirim?


12

Bir tahmin yöntemi denedim ve yöntemimin doğru olup olmadığını kontrol etmek istiyorum.

Çalışmam farklı yatırım fonlarını karşılaştırıyor. GCC endeksini bunlardan biri için bir referans olarak kullanmak istiyorum, ancak sorun GCC endeksinin Eylül 2011'de durması ve çalışmamın Ocak 2003'ten Temmuz 2014'e kadar olması. ancak sorun, MSCI endeksinin Eylül 2010'dan itibaren veri eksik olmasıdır.

Bunu aşmak için aşağıdakileri yaptım. Bu adımlar geçerli mi?

  1. MSCI endeksinde Eylül 2010 ile Temmuz 2012 arasında veriler eksik. Beş gözlem için hareketli ortalamalar uygulayarak bunu "sağladım". Bu yaklaşım geçerli mi? Varsa, kaç gözlem kullanmalıyım?

  2. Eksik verileri tahmin ettikten sonra, karşılıklı kullanılabilir dönem için (Ocak 2007'den Eylül 2011'e kadar) GCC endeksinde (bağımlı değişken olarak) bir regresyon gerçekleştirdim (bağımsız değişken olarak), sonra modeli tüm sorunlardan düzelttim. Her ay için, x'i dinlenme periyodu için MSCI dizinindeki verilerle değiştiririm. Bu geçerli mi?

Aşağıda, yılları satırlara ve ayları sütunlara göre içeren Virgülle Ayrılmış Değerler biçimindeki veriler verilmiştir. Verilere bu bağlantı üzerinden de erişilebilir .

GCC Serisi:

,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
2002,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,117.709
2003,120.176,117.983,120.913,134.036,145.829,143.108,149.712,156.997,162.158,158.526,166.42,180.306
2004,185.367,185.604,200.433,218.923,226.493,230.492,249.953,262.295,275.088,295.005,328.197,336.817
2005,346.721,363.919,423.232,492.508,519.074,605.804,581.975,676.021,692.077,761.837,863.65,844.865
2006,947.402,993.004,909.894,732.646,598.877,686.258,634.835,658.295,672.233,677.234,491.163,488.911
2007,440.237,486.828,456.164,452.141,495.19,473.926,492.782,525.295,519.081,575.744,599.984,668.192
2008,626.203,681.292,616.841,676.242,657.467,654.66,635.478,603.639,527.326,396.904,338.696,308.085
2009,279.706,252.054,272.082,314.367,340.354,325.99,326.46,327.053,354.192,339.035,329.668,318.267
2010,309.847,321.98,345.594,335.045,311.363,299.555,310.802,306.523,315.496,324.153,323.256,334.802
2011,331.133,311.292,323.08,327.105,320.258,312.749,305.073,297.087,298.671,NA,NA,NA

MSCI Serisi:

,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
2007,NA,NA,NA,NA,1000,958.645,1016.085,1049.468,1033.775,1118.854,1142.347,1298.223
2008,1197.656,1282.557,1164.874,1248.42,1227.061,1221.049,1161.246,1112.582,929.379,680.086,516.511,521.127
2009,487.562,450.331,478.255,560.667,605.143,598.611,609.559,615.73,662.891,655.639,628.404,602.14
2010,601.1,622.624,661.875,644.751,588.526,587.4,615.008,606.133,NA,NA,NA,NA
2011,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
2012,NA,NA,NA,NA,NA,NA,NA,609.51,598.428,595.622,582.905,599.447
2013,627.561,619.581,636.284,632.099,651.995,651.39,687.194,676.76,694.575,704.806,727.625,739.842
2014,759.036,787.057,817.067,824.313,857.055,805.31,873.619,NA,NA,NA,NA,NA

veri


Son paragrafta belirtilen x nedir?
Nick Cox

y fiyat gcc endeksi ve x yakın fiyat msci endeksi
TG Zain

Bir ARIMA zaman serisi modeli çerçevesinde uygulanan Kalman filtresi ile bir zaman serisindeki boşlukların nasıl doldurulacağına dair bir örnek gösteren bu yazıya ilgi duyabilirsiniz .
javlacalle

teşekkürler javlacalle eksik verilerimle çalışıyor mu? İşte eksik verilerim için dosyam 4shared.com/file/qR0UZgfGba/missing_data.html
TG Zain

Dosyayı indiremedim. Verileri, örneğin yıllara göre satır ve ayları sütunlara ve değerlere virgülle ayırarak gösterebilirsiniz.
javlacalle

Yanıtlar:


9

Benim önerim, ortalamaları hareket ettirmek yerine bir zaman serisi modeli kullanmam dışında önerdiğinize benzer. ARIMA modellerinin çerçevesi, sadece regresör olarak MSCI serisini değil, aynı zamanda verilerin dinamiklerini de yakalayabilen GCC serisinin gecikmelerini içeren tahmin elde etmek için de uygundur.

İlk olarak, MSCI serisi için bir ARIMA modeline uyabilir ve bu serideki eksik gözlemleri enterpolasyonlayabilirsiniz. Daha sonra, eksojen regresörler olarak MSCI kullanarak GCC serisi için bir ARIMA modeli sığdırabilir ve bu modele dayanarak GCC için tahminler alabilirsiniz. Bunu yaparken, seride grafiksel olarak gözlemlenen ve ARIMA modelinin seçimini ve uyumunu bozabilecek molalarla uğraşırken dikkatli olmalısınız.


İşte bu analizi yaptığım şey R. Bu işlevi forecast::auto.arimaARIMA modelinin seçimini yapmak ve tsoutliers::tsoolası seviye değişimlerini (LS), geçici değişiklikleri (TC) veya ilave aykırı değerleri (AO) tespit etmek için kullanıyorum.

Bunlar yüklendikten sonra verilerdir:

gcc <- structure(c(117.709, 120.176, 117.983, 120.913, 134.036, 145.829, 143.108, 149.712, 156.997, 162.158, 158.526, 166.42, 180.306, 185.367, 185.604, 200.433, 218.923, 226.493, 230.492, 249.953, 262.295, 275.088, 295.005, 328.197, 336.817, 346.721, 363.919, 423.232, 492.508, 519.074, 605.804, 581.975, 676.021, 692.077, 761.837, 863.65, 844.865, 947.402, 993.004, 909.894, 732.646, 598.877, 686.258, 634.835, 658.295, 672.233, 677.234, 491.163, 488.911, 440.237, 486.828, 456.164, 452.141, 495.19, 473.926, 
492.782, 525.295, 519.081, 575.744, 599.984, 668.192, 626.203, 681.292, 616.841, 676.242, 657.467, 654.66, 635.478, 603.639, 527.326, 396.904, 338.696, 308.085, 279.706, 252.054, 272.082, 314.367, 340.354, 325.99, 326.46, 327.053, 354.192, 339.035, 329.668, 318.267, 309.847, 321.98, 345.594, 335.045, 311.363, 
299.555, 310.802, 306.523, 315.496, 324.153, 323.256, 334.802, 331.133, 311.292, 323.08, 327.105, 320.258, 312.749, 305.073, 297.087, 298.671), .Tsp = c(2002.91666666667, 2011.66666666667, 12), class = "ts")
msci <- structure(c(1000, 958.645, 1016.085, 1049.468, 1033.775, 1118.854, 1142.347, 1298.223, 1197.656, 1282.557, 1164.874, 1248.42, 1227.061, 1221.049, 1161.246, 1112.582, 929.379, 680.086, 516.511, 521.127, 487.562, 450.331, 478.255, 560.667, 605.143, 598.611, 609.559, 615.73, 662.891, 655.639, 628.404, 602.14, 601.1, 622.624, 661.875, 644.751, 588.526, 587.4, 615.008, 606.133, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 609.51, 598.428, 595.622, 582.905, 599.447, 627.561, 619.581, 636.284, 632.099, 651.995, 651.39, 687.194, 676.76, 694.575, 704.806, 727.625, 739.842, 759.036, 787.057, 817.067, 824.313, 857.055, 805.31, 873.619), .Tsp = c(2007.33333333333, 2014.5, 12), class = "ts")

Adım 1: Bir ARIMA modelini MSCI serisine takın

Grafik bazı kırılmaların varlığını ortaya koymasına rağmen, hiçbir aykırı değer tespit edilmedi tso. Bunun nedeni, numunenin ortasında birkaç eksik gözlem olması olabilir. Bununla iki adımda baş edebiliriz. İlk olarak, bir ARIMA modeli takın ve eksik gözlemleri enterpolasyonda kullanmak için kullanın; ikincisi, olası LS, TC, AO kontrolü için enterpolasyonlu seri için bir ARIMA modeli takın ve değişiklikler bulunursa enterpolasyonlu değerleri düzeltin.

MSCI serisi için ARIMA modelini seçin:

require("forecast")
fit1 <- auto.arima(msci)
fit1
# ARIMA(1,1,2) with drift         
# Coefficients:
#           ar1     ma1     ma2    drift
#       -0.6935  1.1286  0.7906  -1.4606
# s.e.   0.1204  0.1040  0.1059   9.2071
# sigma^2 estimated as 2482:  log likelihood=-328.05
# AIC=666.11   AICc=666.86   BIC=678.38

Bu cevabım tartışılan bir yaklaşım aşağıdaki eksik gözlemler Dolgu sonrası :

kr <- KalmanSmooth(msci, fit1$model)
tmp <- which(fit1$model$Z == 1)
id <- ifelse (length(tmp) == 1, tmp[1], tmp[2])
id.na <- which(is.na(msci))
msci.filled <- msci
msci.filled[id.na] <- kr$smooth[id.na,id]

Dolu serilere bir ARIMA modeli takın msci.filled. Şimdi bazı aykırı değerler bulundu. Bununla birlikte, alternatif seçenekler kullanılarak farklı aykırı değerler tespit edilmiştir. Çoğu durumda bulunan olanı Ekim 2008'de bir seviye değişikliği tutacağım (gözlem 18). Örneğin bunları ve diğer seçenekleri deneyebilirsiniz.

require("tsoutliers")
tso(msci.filled, remove.method = "bottom-up", tsmethod = "arima", 
  args.tsmethod = list(order = c(1,1,1)))
tso(msci.filled, remove.method = "bottom-up", args.tsmethod = list(ic = "bic"))

Seçilen model şimdi:

mo <- outliers("LS", 18)
ls <- outliers.effects(mo, length(msci))
fit2 <- auto.arima(msci, xreg = ls)
fit2
# ARIMA(2,1,0)                    
# Coefficients:
#           ar1     ar2       LS18
#       -0.1006  0.4857  -246.5287
# s.e.   0.1139  0.1093    45.3951
# sigma^2 estimated as 2127:  log likelihood=-321.78
# AIC=651.57   AICc=652.06   BIC=661.39

Eksik gözlemlerin enterpolasyonunu düzeltmek için önceki modeli kullanın:

kr <- KalmanSmooth(msci, fit2$model)
tmp <- which(fit2$model$Z == 1)
id <- ifelse (length(tmp) == 1, tmp[1], tmp[2])
msci.filled2 <- msci
msci.filled2[id.na] <- kr$smooth[id.na,id]

İlk ve son enterpolasyonlar bir grafikte karşılaştırılabilir (yerden tasarruf etmek için burada gösterilmez):

plot(msci.filled, col = "gray")
lines(msci.filled2)

Adım 2: Eksojen regresör olarak msci.filled2 kullanarak bir ARIMA modelini GCC'ye takın

Başlangıçtaki eksik gözlemleri görmezden geliyorum msci.filled2. Bu noktada bazı zorluklar kullanmak bulundu auto.arimaberaber tsoben elle birkaç ARIMA modeli denedik yüzden, tsove son olarak ARIMA (1,1,0) seçti.

xreg <- window(cbind(gcc, msci.filled2)[,2], end = end(gcc))
fit3 <- tso(gcc, remove.method = "bottom-up", tsmethod = "arima",  
  args.tsmethod = list(order = c(1,1,0), xreg = data.frame(msci=xreg)))
fit3
# ARIMA(1,1,0)                    
# Coefficients:
#           ar1    msci     AO72
#       -0.1701  0.5131  30.2092
# s.e.   0.1377  0.0173   6.7387
# sigma^2 estimated as 71.1:  log likelihood=-180.62
# AIC=369.24   AICc=369.64   BIC=379.85
# Outliers:
#   type ind    time coefhat tstat
# 1   AO  72 2008:11   30.21 4.483

GCC'nin planı 2008'in başında bir kayma gösteriyor. Bununla birlikte, zaten regresyon MSCI tarafından yakalanmış gibi görünüyor ve Kasım 2008'deki bir katkı maddesi hariç hiçbir ilave regresör dahil edilmedi.

Kalıntıların grafiği herhangi bir otokorelasyon yapısı önermedi, ancak grafik Kasım 2008'de bir seviye değişikliği ve Şubat 2011'de bir eklenti aykırı değer önerdi. Bununla birlikte, ilgili müdahaleleri modelin teşhisi daha kötü oldu. Bu noktada daha fazla analize ihtiyaç duyulabilir. Burada, son modele dayalı tahminleri almaya devam edeceğim fit3.

Tahminler kolayca elde edilebilir. Aşağıdaki grafik orijinal serileri, MSCI için enterpolasyonlu değerleri ve tahmini GCC için güven aralıklarıyla birlikte göstermektedir. Konfederasyon aralıkları, MSCA'da enterpole edilen değerlerin belirsizliğini açıklamaz.95%

newxreg <- data.frame(msci=window(msci.filled2, start = c(2011, 10)), AO72=rep(0, 34))
p <- predict(fit3$fit, n.ahead = 34, newxreg = newxreg)
head(p$pred)
# [1] 298.3544 298.2753 298.0958 298.0641 297.6829 297.7412
par(mar = c(3,3.5,2.5,2), las = 1)
plot(cbind(gcc, msci), xaxt = "n", xlab = "", ylab = "", plot.type = "single", type = "n")
grid()
lines(gcc, col = "blue", lwd = 2)
lines(msci, col = "green3", lwd = 2)
lines(window(msci.filled2, start = c(2010, 9), end = c(2012, 7)), col = "green", lwd = 2)
lines(p$pred, col = "red", lwd = 2)
lines(p$pred + 1.96 * p$se, col = "red", lty = 2)
lines(p$pred - 1.96 * p$se, col = "red", lty = 2)
xaxis1 <- seq(2003, 2014)
axis(side = 1, at = xaxis1, labels = xaxis1)
legend("topleft", col = c("blue", "green3", "green", "red", "red"), lwd = 2, bty = "n", lty = c(1,1,1,1,2), legend = c("GCC", "MSCI", "Interpolated values", "Forecasts", "95% confidence interval"))

sonuç


çok teşekkür ederim javlacalle ,, gerçekten tam aradığım şey olan yardımınız için teşekkür ederiz ,, ben zaman ayırdığınız için üzgünüm ,,, ben programları R yok çünkü ben görünümleri üzerinde tüm adımları yapacağım ve nasıl kullanılacağını bilmiyorum .... teşekkür ederim tekrar teşekkür ederim
TG Zain

Yararlı bulduğunu gördüğüme sevindim.
javlacalle

Ben RI Eviews cevap bulamadım için yeni ... bu yüzden R kullanmaya başladım ve bazı sorularım var, nasıl veri almak gerekir .. Yani va vableble veya sadece mevcut veriler için tüm veriler msci R + için hiçbir kalmansmooth veya çalışma hakkında Hata mesajı var zaten kalman filtre için paketleri indirdim ne yapmalıyım? .. teşekkür ederim
TG Zain

Yazılım kullanımına ilişkin sorular bu sitede konu dışıdır. Yığın Taşması bu tür sorular için daha uygundur. Cevabım için özel bir şey varsa bana bir e-posta gönderebilirsiniz.
javlacalle

1
  1. Belirleme (yani, hareketli ortalama ile 'sağlanır') değerler rastgele eksikse geçerlidir. Uzun bir süre aralıksız bir süre ise, bu olası değildir. Sorunun ikinci kısmı belirsiz.
  2. Soruya bağlı olarak, modelinizin verilerinizin kapsamı dışında tahmin için kullanılması, en düşük ile geçersiz arasında bir şey olarak kabul edilir: örneğin, iki endeks arasındaki ilişki 2012-2014'te değişirse ne olur? Eksik veri noktaları için regresyon tahmini değerleri kullanabilirsiniz (ancak doğrudan başka bir dizinin ham değerleriyle değiştiremezsiniz), ancak bu sadece iki endeks arasında güçlü bir ilişki varsa mantıklı olacaktır ve bu değerlerin açıkça tahmin olarak işaretlendi. Ve "modeli tüm problemlerden düzeltti" ile ne demek istiyorsun?

2
Zaman serisi analizinin büyük bir kısmı geleceği tahmin etmeye adanmıştır. Bazıları için, istatistiklerin ana nedeni budur! Böylece # 2, çekingenliği zaman serisi tahmincilerinden ayıran bir mükemmellik danışmanıdır.
Nick Cox

Oldukça adil, kabul ediyorum / düzeltildiğim için. Hala degradenin ortasındaki veya sonundaki değerlerin eksik olduğu bir yordayıcı seçmenin daha ihtiyatlı olup olmadığını merak ediyorum. Eğer ilgili ise.
katya

Üzgünüm ben benim dosya yüklemek için çalıştı ama nasıl veya nerede bilmiyordum :( ... + i heteroscedasticity ve seri korelasyon modeli düzeltmek istedim
TG Zain


1

2 İyi görünüyor. Ben onunla giderdim.

1'e gelince, veri setinde mevcut olan tüm özellikleri kullanarak (Eylül 2011'den itibaren NA olmayan) GCC'yi tahmin etmek için bir model eğitmenizi öneririm (antrenman sırasında sep2011'den önce NA değeri olan satırları ommit). Model çok iyi olmalıdır (K-kat çapraz doğrulaması kullanın). Şimdi Eylül 2011 ve sonrasındaki GCC'yi tahmin edin.

Alternatif olarak, MSCI'yi tahmin eden bir modeli eğitebilir, eksik MSCI değerlerini tahmin etmek için kullanabilirsiniz. Şimdi MSCI kullanarak GCC'yi tahmin etmek için bir model eğitin ve ardından Eylül 2011 ve sonrası için GCC'yi tahmin edin


Teşekkür ederim nar .. cevabın var modeli hakkında düşünmeme neden oldu ... işe yarar mı?
TG Zain

Teorik olarak, VAR modeli çalışmalıdır, ancak gelecekte çok geç tahminler yapmaya başladığınızda, biriken hata çok yükselir. y (t) 'de duruyorsanız ve y (t + 10) değerini istiyorsanız, 10 kez tekrarlamalı olarak tahmin etmeniz gerekir. İlk önce y'yi (t + 1) tahmin edersiniz, ardından y'yi (t + 2) tahmin etmek için öngörülen değeri kullanırsınız.
show_stopper

Yardımın için minnettarım ... yani tren amodeli ile var olandan daha iyi bir yöntem mi söylüyorsun ... ama bunun hakkında hiçbir şey bilmiyorum ... nasıl olduğunu gösterebilir misin ya da herhangi bir dersin var mı? ne tür bir model kullanmalıyım?
TG Zain

Tamam. Şimdi veri kümenizi gördüğüme göre, aşağıdakileri yapın. GCC'yi tahmin etmek için MSCI kullanan basit bir model tasarlayın. Şimdi Ağustos 2012 ve sonrası için GCC'yi tahmin edin. Ekim 2011 - Temmuz 2012 arasındaki zaman aralığı için GCC değerlerini tahmin etmek için bir VAR veya basit bir AR modeli kullanın
show_stopper

1
Basit bir modelle, doğrusal veya log-lineer regresyon modeli demek istiyorum. K-kat doğrulaması basittir. Toplam veri kümesini k katına bölün. k herhangi bir sayı olabilir. Modeli k-1 bölmelerini kullanarak eğitin, modeli son bölünmede test edin. Her şiş test edilene kadar bunu tekrarlayın. Şimdi RMSE değerlerini hesaplayın. Yukarıdakileri yapmanın nedeni, seçtiğiniz modelin iyi bir tahmin gücüne sahip olduğundan emin
olmaktır
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.