Làm cách nào để xử lý dữ liệu không tồn tại hoặc thiếu?


12

Tôi đã thử một phương pháp dự báo và muốn kiểm tra xem phương pháp của tôi có đúng hay không.

Nghiên cứu của tôi là so sánh các loại quỹ tương hỗ. Tôi muốn sử dụng chỉ số GCC làm điểm chuẩn cho một trong số họ nhưng vấn đề là chỉ số GCC đã dừng vào tháng 9 năm 2011 và nghiên cứu của tôi là từ tháng 1 năm 2003 đến tháng 7 năm 2014. Vì vậy, tôi đã cố gắng sử dụng một chỉ mục khác, chỉ số MSCI, để thực hiện hồi quy tuyến tính, nhưng vấn đề là chỉ số MSCI bị thiếu dữ liệu từ tháng 9 năm 2010.

Để giải quyết vấn đề này, tôi đã làm như sau. Các bước này có hợp lệ không?

  1. Chỉ số MSCI bị thiếu dữ liệu từ tháng 9 năm 2010 đến tháng 7 năm 2012. Tôi đã "cung cấp" nó bằng cách áp dụng các đường trung bình di động cho năm quan sát. Cách tiếp cận này có hợp lệ không? Nếu vậy, tôi nên sử dụng bao nhiêu quan sát?

  2. Sau khi ước tính dữ liệu bị thiếu, tôi đã thực hiện hồi quy về chỉ số GCC (dưới dạng biến phụ thuộc) so với chỉ số MSCI (dưới dạng biến độc lập) cho giai đoạn khả dụng lẫn nhau (từ tháng 1 năm 2007 đến tháng 9 năm 2011), sau đó sửa chữa mô hình từ tất cả các vấn đề. Mỗi tháng, tôi thay thế x bằng dữ liệu từ chỉ số MSCI trong khoảng thời gian còn lại. Điều này có hợp lệ không?

Dưới đây là dữ liệu ở định dạng Dấu phẩy-Giá trị phân tách có chứa năm theo hàng và tháng theo cột. Các dữ liệu cũng có sẵn thông qua liên kết này .

Sê-ri GCC:

,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

Sê-ri MSCI:

,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

dữ liệu


X được đề cập trong đoạn cuối là gì?
Nick Cox

y là giá đóng của chỉ số gcc và x là giá đóng cho chỉ số msci
TG Zain

Bạn có thể quan tâm đến bài đăng này , trong đó cho thấy một ví dụ về cách lấp đầy các khoảng trống trong chuỗi thời gian bằng bộ lọc Kalman được áp dụng trong khuôn khổ của mô hình chuỗi thời gian ARIMA.
javlacalle

cảm ơn bạn javlacalle nó có hoạt động với dữ liệu còn thiếu của tôi không? đây là tập tin của tôi cho dữ liệu bị mất tại địa chỉ nuolake.com/file/qR0UZgfGba/missing_data.html
TG Zain

Tôi không thể tải tập tin. Bạn có thể đăng dữ liệu, ví dụ hiển thị năm theo hàng và tháng theo cột và giá trị được phân tách bằng dấu phẩy.
javlacalle

Câu trả lời:


9

Đề xuất của tôi tương tự như những gì bạn đề xuất ngoại trừ việc tôi sẽ sử dụng mô hình chuỗi thời gian thay vì di chuyển trung bình. Khung của các mô hình ARIMA cũng phù hợp để có được dự báo, bao gồm không chỉ chuỗi MSCI như một biến hồi quy mà cả độ trễ của chuỗi GCC cũng có thể nắm bắt được tính năng động của dữ liệu.

Đầu tiên, bạn có thể phù hợp với mô hình ARIMA cho sê-ri MSCI và nội suy các quan sát còn thiếu trong chuỗi này. Sau đó, bạn có thể điều chỉnh mô hình ARIMA cho GCC sê-ri bằng cách sử dụng MSCI làm hồi quy ngoại sinh và thu được các dự báo cho GCC dựa trên mô hình này. Khi thực hiện điều này, bạn phải cẩn thận xử lý các ngắt được quan sát bằng đồ họa trong chuỗi và điều đó có thể làm sai lệch lựa chọn và sự phù hợp của mô hình ARIMA.


Đây là những gì tôi nhận được làm phân tích này trong R. Tôi sử dụng chức năng forecast::auto.arimađể thực hiện lựa chọn mô hình ARIMA và tsoutliers::tsođể phát hiện các thay đổi mức có thể (LS), thay đổi tạm thời (TC) hoặc các ngoại lệ phụ gia (AO).

Đây là những dữ liệu sau khi được tải:

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

Bước 1: Lắp mô hình ARIMA vào sê-ri MSCI

Mặc dù đồ họa cho thấy sự hiện diện của một số phá vỡ, không có ngoại lệ được phát hiện bởi tso. Điều này có thể là do thực tế là có một số quan sát bị thiếu ở giữa mẫu. Chúng ta có thể đối phó với điều này trong hai bước. Đầu tiên, điều chỉnh mô hình ARIMA và sử dụng nó để nội suy các quan sát bị thiếu; thứ hai, phù hợp với mô hình ARIMA để kiểm tra chuỗi nội suy cho LS, TC, AO có thể và tinh chỉnh các giá trị nội suy nếu tìm thấy thay đổi.

Chọn mô hình ARIMA cho sê-ri MSCI:

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

Điền vào các quan sát còn thiếu theo cách tiếp cận được thảo luận trong câu trả lời của tôi cho bài viết này :

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]

Phù hợp với một mô hình ARIMA cho loạt đầy đủ msci.filled. Bây giờ một số ngoại lệ được tìm thấy. Tuy nhiên, sử dụng các tùy chọn thay thế khác nhau đã được phát hiện. Tôi sẽ giữ một cái đã được tìm thấy trong hầu hết các trường hợp, một sự thay đổi cấp độ vào tháng 10 năm 2008 (quan sát 18). Bạn có thể thử ví dụ những điều này và các tùy chọn khác.

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

Mô hình được chọn bây giờ là:

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

Sử dụng mô hình trước đó để tinh chỉnh nội suy của các quan sát bị thiếu:

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]

Các phép nội suy ban đầu và cuối cùng có thể được so sánh trong một âm mưu (không được hiển thị ở đây để tiết kiệm không gian):

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

Bước 2: Điều chỉnh mô hình ARIMA cho GCC bằng msci.fills2 làm công cụ hồi quy ngoại sinh

Tôi bỏ qua những quan sát còn thiếu ở đầu msci.filled2. Tại thời điểm này, tôi đã gặp một số khó khăn khi sử dụng auto.arimacùng tso, vì vậy tôi đã thử bằng tay một số mô hình ARIMA tsovà cuối cùng đã chọn ARIMA (1,1,0).

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

Cốt truyện của GCC cho thấy một sự thay đổi vào đầu năm 2008. Tuy nhiên, dường như nó đã bị bắt giữ bởi công cụ hồi quy MSCI và không có công cụ hồi quy bổ sung nào được đưa vào ngoại trừ một phụ gia ngoại lệ vào tháng 11 năm 2008.

Biểu đồ của phần dư không đề xuất bất kỳ cấu trúc tự tương quan nào, nhưng biểu đồ cho thấy sự thay đổi mức độ vào tháng 11 năm 2008 và một phụ gia ngoại lệ vào tháng 2 năm 2011. Tuy nhiên, việc thêm các can thiệp tương ứng chẩn đoán mô hình còn tệ hơn. Phân tích sâu hơn có thể cần thiết vào thời điểm này. Ở đây, tôi sẽ tiếp tục có được các dự báo dựa trên mô hình cuối cùng fit3.

Các dự báo có thể dễ dàng thu được. Biểu đồ bên dưới hiển thị chuỗi gốc, các giá trị được nội suy cho MSCI và dự báo cùng với khoảng tin cậy cho GCC. Các khoảng thời gian giới hạn không tính đến độ không đảm bảo trong các giá trị tht được nội suy trong MSCA.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"))

kết quả


cảm ơn bạn rất nhiều javlacalle ,, tôi thực sự đánh giá cao sự giúp đỡ của bạn đó chính xác là những gì tôi đang tìm kiếm ,, tôi xin lỗi vì đã dành thời gian của bạn ,,, tôi sẽ thực hiện tất cả các bước trên eview vì tôi không có chương trình R và tôi không biết làm thế nào để sử dụng nó .... cảm ơn bạn một lần nữa
TG Zain

Tôi rất vui khi thấy bạn thấy nó hữu ích.
javlacalle

Tôi là người mới vì RI không thể tìm thấy câu trả lời trong Eview ... vì vậy tôi bắt đầu sử dụng R và tôi có một số câu hỏi ,, làm cách nào để nhập dữ liệu .. Ý tôi là tất cả dữ liệu có na vai trò hoặc chỉ dành cho dữ liệu có sẵn cho msci đến R + có thông báo Lỗi về không có kalmansmooth hoặc chạy được tìm thấy Tôi đã tải xuống các gói cho bộ lọc kalman, tôi nên làm gì? .. cảm ơn bạn
TG Zain

Các câu hỏi liên quan đến việc sử dụng phần mềm là lạc đề trong trang web này. Stack Overflow phù hợp hơn cho các loại câu hỏi này. Nếu đó là một cái gì đó cụ thể cho câu trả lời của tôi, bạn có thể gửi cho tôi một e-mail.
javlacalle

1
  1. Việc buộc tội (nghĩa là 'được cung cấp' bằng cách di chuyển trung bình ') là hợp lệ nếu các giá trị bị thiếu ngẫu nhiên. Nếu đó là một khoảng thời gian không liên tục có chiều dài đáng kể, điều này trở nên khó xảy ra. Phần thứ hai của câu hỏi không rõ ràng.
  2. Tùy thuộc vào câu hỏi, nó được coi là bất cứ điều gì từ tối ưu đến không hợp lệ để sử dụng mô hình của bạn để dự báo vượt quá phạm vi dữ liệu của bạn: ví dụ: nếu mối quan hệ giữa hai chỉ số thay đổi trong năm 2012-2014 thì sao? Bạn có thể sử dụng các giá trị ước tính hồi quy (nhưng không thay thế trực tiếp bằng các giá trị thô của chỉ mục khác) cho các điểm dữ liệu bị thiếu, nhưng điều này chỉ có ý nghĩa nếu có mối quan hệ chặt chẽ giữa hai chỉ số và điều quan trọng là các giá trị này là quan trọng đánh dấu rõ ràng như ước tính. Và ý của bạn là gì khi "sửa mô hình khỏi mọi vấn đề"?

2
Một số phần lớn phân tích chuỗi thời gian được dành riêng để dự đoán tương lai. Đối với một số người, đó là lý do chính để thống kê! # 2 do đó là một lời khuyên về sự hoàn hảo phân chia sự rụt rè từ các nhà dự báo chuỗi thời gian.
Nick Cox

Đủ công bằng, tôi đồng ý / đứng sửa. Tôi vẫn tự hỏi liệu có khôn ngoan hơn khi chọn một công cụ dự đoán với các giá trị bị thiếu ở giữa độ dốc so với cuối của độ dốc hay không. Nếu chúng có liên quan.
katya

Tôi xin lỗi, tôi đã cố tải lên tệp của mình nhưng tôi không biết bằng cách nào hoặc ở đâu :( ... + tôi có nghĩa là đã sửa mô hình từ tính không đồng nhất và tương quan nối tiếp
TG Zain

đây là tập tin của tôi cho dữ liệu bị thiếu trên excel Keychain.com/file/qR0UZgfGba/missing_data.html
TG Zain

1

2 Có vẻ tốt. Tôi sẽ đi với nó.

Đối với 1. Tôi sẽ đề nghị bạn đào tạo một mô hình để dự đoán GCC bằng cách sử dụng tất cả các tính năng có sẵn trong bộ dữ liệu (không phải NA trong giai đoạn tháng 9 năm 2011 trở đi) (bao gồm các hàng có bất kỳ giá trị NA nào trước khi đào tạo). Mô hình phải rất tốt (sử dụng xác nhận chéo K-Fold). Bây giờ hãy dự đoán GCC cho giai đoạn tháng 9 năm 2011 trở đi.

Ngoài ra, bạn có thể huấn luyện một mô hình dự đoán MSCI, sử dụng nó để dự đoán các giá trị MSCI bị thiếu. Bây giờ đào tạo một mô hình để dự đoán GCC bằng cách sử dụng MSCI và sau đó dự đoán GCC cho giai đoạn tháng 9 năm 2011 trở đi


Cảm ơn bạn nar .. câu trả lời của bạn dẫn tôi suy nghĩ về mô hình var ... nó có hoạt động không?
TG Zain

Về mặt lý thuyết, mô hình VAR sẽ hoạt động, nhưng khi bạn bắt đầu đưa ra dự báo muộn hơn nhiều trong tương lai, lỗi tích lũy sẽ trở nên rất cao. tức là nếu bạn đang đứng ở y (t) và bạn muốn giá trị của y (t + 10), bạn sẽ cần dự đoán đệ quy 10 lần. Đầu tiên bạn sẽ dự đoán y (t + 1), sau đó sử dụng dự đoán để dự đoán y (t + 2), v.v.
show_stopper

Tôi đánh giá cao sự giúp đỡ của bạn ... vì vậy, ý bạn là phương pháp mà bạn đề xuất bằng cách đào tạo amodel tốt hơn var ... nhưng tôi không biết bất cứ điều gì về nó ... bạn có thể vui lòng chỉ ra cách hoặc bạn có bất kỳ hướng dẫn nào không và Tôi nên sử dụng loại mô hình nào?
TG Zain

Đồng ý. Vì vậy, bây giờ tôi đã thấy dữ liệu của bạn, làm như sau. Thiết kế một mô hình đơn giản sử dụng MSCI để dự đoán GCC. Bây giờ hãy dự đoán GCC cho thời gian tháng 8 năm 2012 trở đi. Trong khoảng thời gian từ tháng 10 năm 2011 đến tháng 7 năm 2012, hãy sử dụng VAR hoặc mô hình AR đơn giản để dự đoán các giá trị GCC
show_stopper

1
Theo mô hình đơn giản, ý tôi là mô hình hồi quy tuyến tính hoặc log-linear. Xác nhận K-Fold rất đơn giản. Chia tổng số liệu trong k lần. k có thể là bất kỳ số nào. Huấn luyện mô hình bằng cách sử dụng các phân tách k-1, kiểm tra mô hình ở lần phân tách cuối cùng. Lặp lại điều này, cho đến khi mọi nhổ đã được thử nghiệm. Bây giờ hãy tính các giá trị RMSE. Lý do để thực hiện những điều trên là để đảm bảo rằng mô hình bạn chọn có khả năng dự đoán tốt
show_stopper
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.