Advertisement
Guest User

Forecast with Multiple Regressors

a guest
May 13th, 2019
980
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 10.57 KB | None | 0 0
  1. #load dataset
  2. data <- structure(list(Year = c(1997, 1997, 1997, 1997, 1997, 1998, 1998,
  3.                                 1998, 1998, 1998, 1999, 1999, 1999, 1999, 1999, 2000, 2000, 2000,
  4.                                 2000, 2000, 2001, 2001, 2001, 2001, 2001, 2002, 2002, 2002, 2002,
  5.                                 2002, 2003, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2004, 2004,
  6.                                 2005, 2005, 2005, 2005, 2005, 2006, 2006, 2006, 2006, 2006, 2007,
  7.                                 2007, 2007, 2007, 2007, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
  8.                                 2009, 2009, 2009, 2010, 2010, 2010, 2010, 2010, 2011, 2011, 2011,
  9.                                 2011, 2011, 2012, 2012, 2012, 2012, 2012, 2013, 2013, 2013, 2013,
  10.                                 2013, 2014, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2015,
  11.                                 2016, 2016, 2016, 2016, 2016, 2017, 2017, 2017, 2017, 2017, 2018,
  12.                                 2018, 2018, 2018, 2018, 2019, 2019), Term_no = c(1, 2, 3, 4,
  13.                                                                                  5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,
  14.                                                                                  1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
  15.                                                                                  2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2,
  16.                                                                                  3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3,
  17.                                                                                  4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4,
  18.                                                                                  5, 1, 2), Terms = c("19971", "19972", "19973", "19974", "19975",
  19.                                                                                                      "19981", "19982", "19983", "19984", "19985", "19991", "19992",
  20.                                                                                                      "19993", "19994", "19995", "20001", "20002", "20003", "20004",
  21.                                                                                                      "20005", "20011", "20012", "20013", "20014", "20015", "20021",
  22.                                                                                                      "20022", "20023", "20024", "20025", "20031", "20032", "20033",
  23.                                                                                                      "20034", "20035", "20041", "20042", "20043", "20044", "20045",
  24.                                                                                                      "20051", "20052", "20053", "20054", "20055", "20061", "20062",
  25.                                                                                                      "20063", "20064", "20065", "20071", "20072", "20073", "20074",
  26.                                                                                                      "20075", "20081", "20082", "20083", "20084", "20085", "20091",
  27.                                                                                                      "20092", "20093", "20094", "20095", "20101", "20102", "20103",
  28.                                                                                                      "20104", "20105", "20111", "20112", "20113", "20114", "20115",
  29.                                                                                                      "20121", "20122", "20123", "20124", "20125", "20131", "20132",
  30.                                                                                                      "20133", "20134", "20135", "20141", "20142", "20143", "20144",
  31.                                                                                                      "20145", "20151", "20152", "20153", "20154", "20155", "20161",
  32.                                                                                                      "20162", "20163", "20164", "20165", "20171", "20172", "20173",
  33.                                                                                                      "20174", "20175", "20181", "20182", "20183", "20184", "20185",
  34.                                                                                                      "20191", "20192"), Enrollment = c(100, 122, 75, 102, 100, 78,
  35.                                                                                                                                        69, 54, 66, 72, 74, 66, 38, 55, 56, 62, 71, 56, 70, 53, 50, 56,
  36.                                                                                                                                        46, 54, 52, 45, 42, 34, 40, 41, 40, 40, 40, 40, 44, 36, 35, 29,
  37.                                                                                                                                        29, 36, 36, 20, 28, 22, 32, 40, 48, 53, 52, 62, 60, 52, 43, 37,
  38.                                                                                                                                        47, 54, 62, 69, 108, 98, 80, 84, 61, 87, 86, 59, 58, 67, 75,
  39.                                                                                                                                        98, 77, 100, 108, 103, 116, 96, 109, 112, 91, 107, 113, 77, 81,
  40.                                                                                                                                        122, 135, 135, 147, 111, 171, 169, 174, 167, 92, 92, 145, 102,
  41.                                                                                                                                        91, 53, 101, 100, 78, 63, 38, 42, 39, 42, 50, 43, 47, 28, 30,
  42.                                                                                                                                        53), var1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  43.                                                                                                                                                      0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  44.                                                                                                                                                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  45.                                                                                                                                                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  46.                                                                                                                                                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  47.                                                                                                                                                      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), var2 = c(0, 0, 0, 0, 0,
  48.                                                                                                                                                                                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  49.                                                                                                                                                                                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  50.                                                                                                                                                                                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  51.                                                                                                                                                                                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  52.                                                                                                                                                                                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  53.                                                                                                                                                                                                    1, 1)), row.names = c(NA, -112L), class = c("tbl_df", "tbl",
  54.                                                                                                                                                                                                                                                "data.frame"))
  55.  
  56. #set timeseries 1 (full)
  57. enroll = ts(data=data$Enrollment, frequency = 5,
  58.             start=c(1997,1), end=c(2019,2))
  59.  
  60. #set testing set (partial)
  61. enroll_partial = ts(data=data$Enrollment, frequency = 5,
  62.                     start=c(1997,1), end=c(2017,2))
  63.  
  64. summary(enroll) #summary stats - note mean: 71.39
  65. plot(enroll) #visualize ts
  66. decomposed <- decompose(enroll, type="mult") # use type = "additive" for additive components
  67. plot (decomposed) # see plot below
  68. ggseasonplot(enroll)
  69.  
  70. #timeseries diagnostics
  71. plot(diff(enroll)) #attempt to detrend TS - looks good
  72. acf(diff(enroll))
  73. pacf(diff(enroll))
  74.  
  75. #load regressors
  76. x_var1 <- ts(data=data$var1, frequency = 5,
  77.             start=c(1997,1), end=c(2019,2))
  78.  
  79. x_var2 <- ts(data=data$var2, frequency = 5,
  80.               start=c(1997,1), end=c(2019,2))
  81.  
  82. x <- ts.union(x_var1, x_var2)
  83.  
  84. x_var1_par <- ts(data=data$var1, frequency = 5,
  85.                 start=c(1997,1), end=c(2017,2))
  86.  
  87. x_var2_par <- ts(data=data$var2, frequency = 5,
  88.                   start=c(1997,1), end=c(2017,2))
  89.  
  90. x_par <- ts.union(x_var1_par, x_var2_par)
  91.  
  92.  
  93. #ARIMA
  94. model <- auto.arima(enroll, xreg=x)  
  95. model
  96. coeftest(model)
  97. checkresiduals(model)
  98. tsdisplay(residuals(model), lag.max=45, main='(1,1,1)(1,0,0)[5] Model Residuals')
  99.  
  100.  
  101. #testing model
  102. model_par <-arima((enroll_partial), c(1, 1, 1),seasonal = list(order = c(1, 0, 0), period = 5), xreg=x_par)
  103. model_par
  104.  
  105. #TEST PREDICTIONS
  106. fcast_par <- forecast(model_par, h=10) #error
  107. fcast_par <- forecast(model_par, h=10, xreg=x_par) #error
  108. fcast_par <- forecast(model_par, h=10, xreg=forecast(x_par,h=10)) #error
  109.  
  110. model_x_par <- arima((x_par), c(1, 1, 1),seasonal = list(order = c(1, 0, 0), period = 5)) #error
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement