Як робити прогнозування з виявленням залишків у R? - Порядок та метод аналізу часових рядів


16

У мене є дані про щомісячні часові ряди, і я хотів би робити прогнозування з виявленням людей, що вижили.

Це зразок мого набору даних:

       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
2006  7.55  7.63  7.62  7.50  7.47  7.53  7.55  7.47  7.65  7.72  7.78  7.81
2007  7.71  7.67  7.85  7.82  7.91  7.91  8.00  7.82  7.90  7.93  7.99  7.93
2008  8.46  8.48  9.03  9.43 11.58 12.19 12.23 11.98 12.26 12.31 12.13 11.99
2009 11.51 11.75 11.87 11.91 11.87 11.69 11.66 11.23 11.37 11.71 11.88 11.93
2010 11.99 11.84 12.33 12.55 12.58 12.67 12.57 12.35 12.30 12.67 12.71 12.63
2011 12.60 12.41 12.68 12.48 12.50 12.30 12.39 12.16 12.38 12.36 12.52 12.63

Я посилався на процедуру та методи аналізу Timeseries за допомогою R , щоб зробити ряд різних моделей прогнозування, однак це не здається точним. Крім того, я не впевнений, як включити в нього також і футболістів.

У мене є ще один пост про моє запиті про tsoutliers і моделюванні ARIMA і порядку більше тут , а також.

Отже, це мій код на даний момент, який схожий на посилання №1.

Код:

product<-ts(product, start=c(1993,1),frequency=12)

#Modelling product Retail Price

#Training set
product.mod<-window(product,end=c(2012,12))
#Test set
product.test<-window(product,start=c(2013,1))
#Range of time of test set
period<-(end(product.test)[1]-start(product.test)[1])*12 + #No of month * no. of yr
(end(product.test)[2]-start(product.test)[2]+1) #No of months
#Model using different method
#arima, expo smooth, theta, random walk, structural time series
models<-list(
#arima
product.arima<-forecast(auto.arima(product.mod),h=period),
#exp smoothing
product.ets<-forecast(ets(product.mod),h=period),
#theta
product.tht<-thetaf(product.mod,h=period),
#random walk
product.rwf<-rwf(product.mod,h=period),
#Structts
product.struc<-forecast(StructTS(product.mod),h=period)
)

##Compare the training set forecast with test set
par(mfrow=c(2, 3))
for (f in models){
    plot(f)
    lines(product.test,col='red')
}

##To see its accuracy on its Test set, 
#as training set would be "accurate" in the first place
acc.test<-lapply(models, function(f){
    accuracy(f, product.test)[2,]
})
acc.test <- Reduce(rbind, acc.test)
row.names(acc.test)<-c("arima","expsmooth","theta","randomwalk","struc")
acc.test <- acc.test[order(acc.test[,'MASE']),]

##Look at training set to see if there are overfitting of the forecasting
##on training set
acc.train<-lapply(models, function(f){
    accuracy(f, product.test)[1,]
})
acc.train <- Reduce(rbind, acc.train)
row.names(acc.train)<-c("arima","expsmooth","theta","randomwalk","struc")
acc.train <- acc.train[order(acc.train[,'MASE']),]

 ##Note that we look at MAE, MAPE or MASE value. The lower the better the fit.

Це сюжет мого різного прогнозування, який не здається дуже надійним / точним, шляхом порівняння червоного "тестового набору" та синього "прогнозованого" набору. Сюжет різних прогнозів Різний прогноз

Різна точність відповідних моделей тестового та навчального набору

Test set
                    ME      RMSE       MAE        MPE     MAPE      MASE      ACF1 Theil's U
theta      -0.07408833 0.2277015 0.1881167 -0.6037191 1.460549 0.2944165 0.1956893 0.8322151
expsmooth  -0.12237967 0.2681452 0.2268248 -0.9823104 1.765287 0.3549976 0.3432275 0.9847223
randomwalk  0.11965517 0.2916008 0.2362069  0.8823040 1.807434 0.3696813 0.4529428 1.0626775
arima      -0.32556886 0.3943527 0.3255689 -2.5326397 2.532640 0.5095394 0.2076844 1.4452932
struc      -0.39735804 0.4573140 0.3973580 -3.0794740 3.079474 0.6218948 0.3841505 1.6767075

Training set
                     ME      RMSE       MAE         MPE     MAPE      MASE    ACF1 Theil's U
theta      2.934494e-02 0.2101747 0.1046614  0.30793753 1.143115 0.1638029  0.2191889194        NA
randomwalk 2.953975e-02 0.2106058 0.1050209  0.31049479 1.146559 0.1643655  0.2190857676        NA
expsmooth  1.277048e-02 0.2037005 0.1078265  0.14375355 1.176651 0.1687565 -0.0007393747        NA
arima      4.001011e-05 0.2006623 0.1079862 -0.03405395 1.192417 0.1690063 -0.0091275716        NA
struc      5.011615e-03 1.0068396 0.5520857  0.18206018 5.989414 0.8640550  0.1499843508        NA

З точності моделей ми бачимо, що найбільш точною моделлю була б theta модель. Я не впевнений, чому прогноз дуже неточний, і я вважаю, що одна з причин полягала в тому, що я не ставився до "людей, що вижили" в моєму наборі даних, що призвело до поганого прогнозу для всієї моделі.

Це мій сюжетний план

Сюжет випускників Аутлієри

Вихід tsoutliers

ARIMA(0,1,0)(0,0,1)[12]                    

Coefficients:
        sma1    LS46    LS51    LS61    TC133   LS181   AO183   AO184   LS185   TC186    TC193    TC200
      0.1700  0.4316  0.6166  0.5793  -0.5127  0.5422  0.5138  0.9264  3.0762  0.5688  -0.4775  -0.4386
s.e.  0.0768  0.1109  0.1105  0.1106   0.1021  0.1120  0.1119  0.1567  0.1918  0.1037   0.1033   0.1040
       LS207    AO237    TC248    AO260    AO266
      0.4228  -0.3815  -0.4082  -0.4830  -0.5183
s.e.  0.1129   0.0782   0.1030   0.0801   0.0805

sigma^2 estimated as 0.01258:  log likelihood=205.91
AIC=-375.83   AICc=-373.08   BIC=-311.19

 Outliers:
    type ind    time coefhat  tstat
1    LS  46 1996:10  0.4316  3.891
2    LS  51 1997:03  0.6166  5.579
3    LS  61 1998:01  0.5793  5.236
4    TC 133 2004:01 -0.5127 -5.019
5    LS 181 2008:01  0.5422  4.841 
6    AO 183 2008:03  0.5138  4.592
7    AO 184 2008:04  0.9264  5.911
8    LS 185 2008:05  3.0762 16.038
9    TC 186 2008:06  0.5688  5.483
10   TC 193 2009:01 -0.4775 -4.624
11   TC 200 2009:08 -0.4386 -4.217
12   LS 207 2010:03  0.4228  3.746
13   AO 237 2012:09 -0.3815 -4.877
14   TC 248 2013:08 -0.4082 -3.965
15   AO 260 2014:08 -0.4830 -6.027
16   AO 266 2015:02 -0.5183 -6.442

Мені хотілося б знати, як я можу далі "проаналізувати" / прогнозувати свої дані за допомогою цих відповідних наборів даних та виявлення людей, що втратили життя, і т.д.

Нарешті, я хотів би знати, як поєднувати різні моделі прогнозування разом, оскільки з того, що згадував @forecaster у посиланні №1, поєднання різної моделі, швидше за все, призведе до кращого прогнозування / прогнозування.

ВИДАЛЕНО

Мені хотілося б добре включити атрибути в інші моделі.

Я спробував деякі коди, наприклад.

forecast.ets( res$fit ,h=period,xreg=newxreg)
Error in if (object$components[1] == "A" & is.element(object$components[2], : argument is of length zero

forecast.StructTS(res$fit,h=period,xreg=newxreg)
Error in predict.Arima(object, n.ahead = h) : 'xreg' and 'newxreg' have different numbers of columns

Виникли деякі помилки, і я не впевнений у правильному коді, щоб включити випускників як регресорів. Крім того, як мені працювати з thetaf або rwf, оскільки немає прогнозу.theta або прогнозу.rwf?


1
Можливо, вам слід скористатись іншим підходом до отримання допомоги, оскільки постійне повторне редагування, здається, не працює
IrishStat

Я погоджуюся з @irishstat, обидві відповіді нижче дають пряму відповідь на ваше запитання, і, схоже, мало уваги.
синоптик

Спробуйте прочитати документацію конкретних функцій, яка дає помилки, ETS і thetaf не мають можливості обробляти регресори.
синоптик

Відповіді:


7

Ця відповідь також пов'язана з пунктами 6 та 7 вашого іншого питання .

Аутсорсинг розуміється як спостереження, які не пояснюються моделлю, тому їхня роль у прогнозах обмежена в тому сенсі, що присутність нових людей, які не випадають, не передбачається. Все, що вам потрібно зробити, - це включити цих випускників до рівняння прогнозу.

У випадку з добавковою формою (яка впливає на одне спостереження), змінна, що містить цю групу, буде просто заповнена нулями, оскільки сповіщення виявлено для спостереження у вибірці; у випадку зсуву рівня (постійної зміни даних) змінна заповнюватиметься тими, щоб зберегти зсув у прогнозах.


Далі я показую, як можна отримати прогнози в R за моделлю ARIMA з видатками, виявленими 'tsoutliers'. Ключ - правильно визначити аргумент, newxregякий передається predict.

(Це лише для того, щоб проілюструвати відповідь на ваше запитання про те, як поводитися з випускниками людей при прогнозуванні. Я не розглядаю питання про те, чи отримана модель чи прогнози є найкращим рішенням.)

require(tsoutliers)
x <- c(
  7.55,  7.63,  7.62,  7.50,  7.47,  7.53,  7.55,  7.47,  7.65,  7.72,  7.78,  7.81,
  7.71,  7.67,  7.85,  7.82,  7.91,  7.91,  8.00,  7.82,  7.90,  7.93,  7.99,  7.93,
  8.46,  8.48,  9.03,  9.43, 11.58, 12.19, 12.23, 11.98, 12.26, 12.31, 12.13, 11.99,
 11.51, 11.75, 11.87, 11.91, 11.87, 11.69, 11.66, 11.23, 11.37, 11.71, 11.88, 11.93,
 11.99, 11.84, 12.33, 12.55, 12.58, 12.67, 12.57, 12.35, 12.30, 12.67, 12.71, 12.63,
 12.60, 12.41, 12.68, 12.48, 12.50, 12.30, 12.39, 12.16, 12.38, 12.36, 12.52, 12.63)
x <- ts(x, frequency=12, start=c(2006,1))
res <- tso(x, types=c("AO","LS","TC"))

# define the variables containing the outliers for
# the observations outside the sample
npred <- 12 # number of periods ahead to forecast 
newxreg <- outliers.effects(res$outliers, length(x) + npred)
newxreg <- ts(newxreg[-seq_along(x),], start = c(2012, 1))

# obtain the forecasts
p <- predict(res$fit, n.ahead=npred, newxreg=newxreg)

# display forecasts
plot(cbind(x, p$pred), plot.type = "single", ylab = "", type = "n", ylim=c(7,13))
lines(x)
lines(p$pred, type = "l", col = "blue")
lines(p$pred + 1.96 * p$se, type = "l", col = "red", lty = 2)  
lines(p$pred - 1.96 * p$se, type = "l", col = "red", lty = 2)  
legend("topleft", legend = c("observed data", 
  "forecasts", "95% confidence bands"), lty = c(1,1,2,2), 
  col = c("black", "blue", "red", "red"), bty = "n")

прогнози

Редагувати

Функція predict, що використовуються вищим за прогнози повертають на основі обраної моделі ARIMA, Аріма (2,0,0) зберігається в res$fitі виявлені викиди, res$outliers. У нас є модельне рівняння так:

ут=j=1мωjLj(Б)Ят(тj)+θ(Б)ϕ(Б)α(Б)ϵт,ϵтNЯD(0,σ2),

LjjtsoutliersЯт


тож те, що ти зробив, - це додати люди, що залишилися в аргумент "newxreg". Це називається регресором? Чи можу я знати використання регресора? Крім того, використовуючи регресор у функції "передбачення", він все-таки використовує ARIMA? або це інший метод прогнозування? Дякуємо багато за вашу допомогу у використанні танцюлерів. = D
Тед

чи можна включити асистентів як регресора, щоб їх використовувати в прогнозуванні і в інших моделях? як основна структурна модель, тета, випадкова прогулянка тощо?
Тед

@ Ted Так, прогнози базуються на моделі ARMA. Я відредагував свою відповідь з деякими подробицями про це.
javlacalle

Ви можете включити змінні регресора, що містять ефекти, такі як зміна рівня, добавки, що випадають, ... і в інших моделях, наприклад, випадкова прогулянка, структура структурних часових рядів, ... Якщо ви запитуєте, як використовувати певне програмне забезпечення для цього, ви напевно, слід задати його в іншому дописі і подумати, чи краще це питання підходить для інших сайтів, таких як stackoverflow .
javlacalle

о, добре. Інше питання, чи знаєте ви, чи є різниця між використанням прогнозу та прогнозу ? Якщо є, яка різниця
Тед,

2

Використання програмного забезпечення, яке мені допомогло розробити розумну модель для ваших 72 спостережень, включало б перетворення потужності (журнали), оскільки відхилення помилок пов'язані з очікуваним значенням. Це також досить очевидно з оригінального сюжету, коли око може виявити підвищену дисперсію на більш високому рівні. введіть тут опис зображенняз фактичним.fit/forecast введіть тут опис зображеннята графіком остаточних введіть тут опис зображеннязалишків. Зверніть увагу на більш реалістичні межі довіри з урахуванням трансформації потужності. Хоча ця відповідь не використовує R, вона піднімає планку щодо того, що може включати розумна модель, що використовує R.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.