태그 보관물: time-series

time-series

존재하지 않거나 누락 된 데이터를 어떻게 처리합니까? 수행했습니다. 이 단계가 유효합니까? MSCI 지수는 2010 년

예측 방법을 시도했는데 내 방법이 올바른지 확인하고 싶습니다.

저의 연구는 다른 종류의 뮤추얼 펀드를 비교하고 있습니다. GCC 지수를 그중 하나의 벤치 마크로 사용하고 싶지만 문제는 2011 년 9 월에 GCC 지수가 중단되었고 2003 년 1 월부터 2014 년 7 월까지의 연구가 진행되었다는 것입니다. 따라서 다른 지수 인 MSCI 지수를 사용하려고했습니다. 선형 회귀를 만드는 데 문제가 있지만 문제는 2010 년 9 월의 MSCI 인덱스에 데이터가 누락 된 것입니다.

이 문제를 해결하기 위해 다음을 수행했습니다. 이 단계가 유효합니까?

  1. MSCI 지수는 2010 년 9 월부터 2012 년 7 월까지의 데이터가 누락되었습니다. 5 개의 관측치에 대해 이동 평균을 적용하여 “제공했습니다. 이 방법이 유효합니까? 그렇다면 몇 개의 관측 값을 사용해야합니까?

  2. 누락 된 데이터를 추정 한 후 상호 사용 가능한 기간 (2007 년 1 월부터 2011 년 9 월까지) 동안 GCC 지수 (종속 변수)와 MSCI 지수 (독립 변수)를 회귀 분석 한 다음 모든 문제에서 모형을 수정했습니다. 매월 x를 나머지 기간 동안 MSCI 인덱스의 데이터로 바꿉니다. 이것이 유효합니까?

아래는 연도 별 행과 월별 열을 포함하는 쉼표로 구분 된 값 형식의 데이터입니다. 이 링크를 통해 데이터를 이용할 수도 있습니다
.

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

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

데이터



답변

내 제안은 이동 평균 대신 시계열 모델을 사용한다는 점을 제외하고 제안한 것과 유사합니다. ARIMA 모델의 프레임 워크는 회귀 변수 인 MSCI 계열뿐만 아니라 데이터의 역학을 포착 할 수있는 GCC 계열의 지연을 포함하여 예측을 얻는 데 적합합니다.

먼저, MSCI 시리즈에 ARIMA 모델을 적합시키고이 시리즈에서 누락 된 관측 값을 보간 할 수 있습니다. 그런 다음 MSCI를 외인 회귀로 사용하여 GCC 시리즈에 대한 ARIMA 모델을 피팅하고이 모델을 기반으로 GCC에 대한 예측을 얻을 수 있습니다. 이 작업을 수행 할 때 시리즈에서 그래픽으로 관찰되고 ARIMA 모델의 선택 및 맞춤을 왜곡 할 수있는 나누기를주의해서 다루어야합니다.


이 분석을 수행하는 방법은 다음과 같습니다 R. 이 기능 forecast::auto.arima을 사용하여 ARIMA 모델을 선택하고 tsoutliers::tso가능한 레벨 시프트 (LS), 임시 변경 (TC) 또는 가산 이상치 (AO)를 감지합니다.

다음은 한 번로드 된 데이터입니다.

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

1 단계 : MSIMA 시리즈에 ARIMA 모델 맞추기

그래픽에 일부 중단이 있음이 밝혀졌지만에 의해 이상 치가 발견되지 않았습니다 tso. 이는 샘플 중간에 몇 가지 누락 된 관측치가 있기 때문일 수 있습니다. 우리는 이것을 두 단계로 처리 할 수 ​​있습니다. 먼저 ARIMA 모형을 적합하고이를 사용하여 누락 된 관측치를 보간합니다. 둘째, 가능한 LS, TC, AO에 대한 보간 된 시리즈 점검을 위해 ARIMA 모델을 맞추고 변화가 발견되면 보간 된 값을 수정합니다.

MSCI 시리즈에 대해 ARIMA 모델을 선택하십시오.

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

게시물에 대한 나의 대답에서 논의 된 접근법에 따라 누락 된 관찰 내용을 작성하십시오
.

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]

ARIMA 모델을 채워진 시리즈에 맞 춥니 다 msci.filled. 이제 일부 특이 치가 발견되었습니다. 그럼에도 불구하고 대체 옵션을 사용하면 다른 특이 치가 발견되었습니다. 나는 대부분의 경우에 발견 된 것을 2008 년 10 월의 수준 이동 (관측 18)으로 유지할 것이다. 예를 들어 이러한 옵션과 다른 옵션을 시도해 볼 수 있습니다.

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

선택한 모델은 다음과 같습니다.

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

누락 된 관측치의 보간을 수정하려면 이전 모델을 사용하십시오.

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]

초기 보간과 최종 보간을 플롯으로 비교할 수 있습니다 (공간을 절약하기 위해 여기에 표시되지 않음).

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

2 단계 : 외생 회귀 분석으로 msci.filled2를 사용하여 ARIMA 모델을 GCC에 맞추기

의 시작 부분에서 누락 된 관측치는 무시합니다 msci.filled2. 이 시점에서 auto.arima와 함께 사용하기가 어려웠 tso으므로 여러 ARIMA 모델을 직접 사용 해보고 tso마침내 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

GCC의 도표는 2008 년 초의 변화를 보여줍니다. 그러나, 이미 회귀 MSCI에 의해 포착 된 것으로 보이며 2008 년 11 월에 부가적인 이상 치를 제외하고는 추가 회귀가 포함되지 않은 것으로 보입니다.

잔차 그림은 어떠한 자기 상관 구조도 제안하지 않았지만,이 그림은 2008 년 11 월의 수준 이동과 2011 년 2 월의 추가 이상 치를 제안했습니다. 그러나 해당 개입을 추가하면 모델의 진단이 더 나빴습니다. 이 시점에서 추가 분석이 필요할 수 있습니다. 여기에서는 마지막 모델을 기반으로 예측을 계속 얻을 것 fit3입니다.

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

결과


답변

  1. 값이 임의로 누락 된 경우 대치 (즉, 이동 평균으로 ‘제공’)가 유효합니다. 그것이 상당한 길이의 방해받지 않는 기간이라면, 이것은 가능하지 않을 것입니다. 질문의 두 번째 부분은 불분명합니다.
  2. 질문에 따라, 데이터 범위를 넘어 예측을 위해 모형을 사용하는 것은 차선책에서 무효 선으로 간주됩니다. 예를 들어 2012-2014 년에 두 지수 간의 관계가 변경되면 어떻게됩니까? 누락 된 데이터 포인트에 대해 회귀 추정 값 (다른 인덱스의 원시 값으로 직접 대체하지는 않음)을 사용할 수 있지만 두 인덱스 사이에 강한 관계가있는 경우에만 의미가 있습니다. 추정치로 명확하게 표시됩니다. “모든 문제에서 모델을 수정했다”는 것은 무엇을 의미합니까?

답변

2 괜찮아 보인다. 나는 그것으로 갈 것이다.

1. 2011 년 9 월 이후에는 NA가 아닌 데이터 세트에서 사용할 수있는 모든 기능을 사용하여 GCC를 예측하도록 모델을 훈련하는 것이 좋습니다 (훈련 중 sep2011 이전에 NA 값이있는 행은 생략하십시오). 모델은 매우 우수해야합니다 (K- 폴드 교차 검증 사용). 이제 2011 년 9 월 이후의 기간 동안 GCC를 예측하십시오.

또는 MSCI를 예측하는 모델을 훈련시키고 누락 된 MSCI 값을 예측하는 데 사용할 수 있습니다. 이제 모델을 훈련하여 MSCI를 사용하여 GCC를 예측 한 다음 2011 년 9 월 이후 GCC를 예측하십시오.


답변