존재하지 않거나 누락 된 데이터를 어떻게 처리합니까?


12

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

저의 연구는 다른 종류의 뮤추얼 펀드를 비교하고 있습니다. 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

데이터


마지막 단락에서 언급 된 x는 무엇입니까?
Nick Cox

은 y는 GCC 지수의 가격 가깝고 X는 MSCI 지수의 가격 가까운
TG자인

ARIMA 시계열 모델의 프레임 워크에 적용된 칼만 필터를 사용하여 시계열의 간격을 채우는 방법에 대한 예를 보여주는 이 게시물에 관심이있을 수 있습니다 .
javlacalle

javlacalle에게 누락 된 데이터가 작동합니까? 여기에 누락 된 데이터 4shared.com/file/qR0UZgfGba/missing_data.html
TG Zain

파일을 다운로드 할 수 없습니다. 데이터를 게시 할 수 있습니다 (예 : 연도, 월, 열 및 값을 쉼표로 구분하여 표시).
javlacalle

답변:


9

내 제안은 이동 평균 대신 시계열 모델을 사용한다는 점을 제외하고 제안한 것과 유사합니다. 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"))

결과


정말 javlacalle 정말 고마워요, 난 정말 내가 찾고있는 정확히 당신의 도움을 주셔서 감사합니다, 나는 시간을내어 죄송합니다, 나는 프로그램이 없기 때문에 eviews에 대한 모든 단계를 수행하려고합니다 그리고 나는 그것을 사용하는 방법을 모른다 .... 다시 감사합니다
TG Zain

도움이 되셨 다니 다행입니다.
javlacalle

RI가 Eviews에서 답을 찾지 못했습니다 .R을 사용하기 시작했고 몇 가지 질문이 있습니다. 데이터를 가져와야하는 방법은 무엇입니까? msci to R + 없음 kalmansmooth 또는 실행에 대한 오류 메시지가 없습니다. 이미 kalman 필터 용 패키지를 다운로드했습니다. 어떻게해야합니까? .. 감사합니다
TG Zain

이 사이트에서는 소프트웨어 사용과 관련된 질문을 다루지 않습니다. 이러한 종류의 질문에는 스택 오버플로 가 더 적합합니다. 내 답변과 관련된 것이면 나에게 전자 메일을 보낼 수 있습니다.
javlacalle

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

2
시계열 분석의 일부는 미래 예측에 전념합니다. 일부의 경우 통계의 주요 이유입니다! 따라서 # 2는 시계열 예측 자와 소심한 것을 나누는 완벽의 권고입니다.
Nick Cox

충분히 공정하게 동의합니다. 그래디언트 중간 대 그라데이션 끝에서 결 측값이있는 예측 변수를 선택하는 것이 더 현명한 지 궁금합니다. 관련이 있다면.
katya

죄송합니다. 파일을 업로드하려고했지만 방법 또는 위치를 몰랐습니다. (... + 나는 이분산성과 직렬 상관 관계에서 모델을 수정했음을 의미합니다.
TG Zain


1

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

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

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


고마워 .. 당신의 대답은 var 모델에 대해 생각하게합니다 ... 작동합니까?
TG Zain

이론적으로 VAR 모델은 작동해야하지만 나중에 훨씬 늦게 예측을 시작하면 누적 오차가 매우 높아집니다. 즉, y (t)에 서 있고 y (t + 10)의 값을 원하면 10 번을 재귀 적으로 예측해야합니다. 먼저 y (t + 1)을 예측 한 다음 예측을 사용하여 y (t + 2) 등을 예측합니다.
show_stopper

나는 당신의 도움에 감사합니다 ... 그래서 당신은 var보다 더 나은 train amodel이 제안한 방법을 의미합니까 ...하지만 그것에 대해 아무것도 몰랐습니다 ... 어떻게 또는 어떻게 자습서를 가지고 있는지 보여 주시겠습니까? 어떤 종류의 모델을 사용해야합니까?
TG Zain

확인. 이제 데이터 세트를 보았으므로 다음을 수행하십시오. MSCI를 사용하여 GCC를 예측하는 간단한 모델을 설계하십시오. 이제 2012 년 8 월 이후의 GCC를 예측하십시오. 2012년 7월 사용에 기간 년 10 월 2011 VAR 또는 GCC 값을 예측하는 간단한 AR 모델
show_stopper

1
단순 모델이란 선형 또는 로그 선형 회귀 모델을 의미합니다. K- 폴드 검증은 간단합니다. 총 데이터 세트를 k 배로 나눕니다. k는 임의의 숫자 일 수 있습니다. k-1 스플릿을 사용하여 모델을 학습하고 마지막 스플릿에서 모델을 테스트하십시오. 모든 침이 테스트 될 때까지이 과정을 반복하십시오. 이제 RMSE 값을 계산하십시오. 위의 작업을 수행하는 이유는 당신이 선택한 모델이 좋은 예측 능력이 있는지 확인하는 것입니다
show_stopper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.