Визначення параметрів (p, d, q) для моделювання ARIMA


10

Я досить новачок у статистиці і Р. Я хотів би знати процес визначення параметрів ARIMA для мого набору даних. Чи можете ви допомогти мені зрозуміти те саме, використовуючи R і теоретично (якщо можливо)?

Дані варіюються від 12 січня до 14 березня і відображають місячні продажі. Ось набір даних:

99 58 52 83 94 73 97 83 86 63 77 70 87 84 60 105 87 93 110 71 158 52 33 68 82 88 84

І ось така тенденція:

введіть тут опис зображення

Дані не виявляють тенденції, сезонної поведінки чи циклічності.

Відповіді:


9

Загалом, зануримось у розширений підручник з аналізу часових рядів (вступні книги, як правило, спрямовують тебе просто довіряти твоєму програмному забезпеченню), наприклад Аналіз часових рядів від Box, Jenkins & Reinsel Ви також можете знайти деталі про процедуру Box-Jenkins за допомогою googling. Зауважте, що існують інші підходи, ніж Box-Jenkins, наприклад, на основі AIC.

У R ви спочатку перетворюєте свої дані в об'єкт ts(часовий ряд) і повідомляєте R, що частота становить 12 (дані щомісяця):

require(forecast)
sales <- ts(c(99, 58, 52, 83, 94, 73, 97, 83, 86, 63, 77, 70, 87, 84, 60, 105, 87, 93, 110, 71, 158, 52, 33, 68, 82, 88, 84),frequency=12)

Ви можете побудувати (часткову) функцію автокореляції:

acf(sales)
pacf(sales)

Вони не передбачають поведінки AR або MA.

Потім ви підходите до моделі та оглядаєте її:

model <- auto.arima(sales)
model

Зверніться ?auto.arimaза допомогою. Як ми бачимо, auto.arimaобирає просту (0,0,0) модель, оскільки вона не бачить ні ваших даних, ні тенденції, ні сезонності, ні AR, ні MA. Нарешті, ви можете прогнозувати та побудувати графік часового ряду та прогнозувати:

plot(forecast(model))

прогноз

Подивіться ?forecast.Arima(зверніть увагу на столицю А!).

Цей безкоштовний онлайн підручник - це чудовий вступ до аналізу часових рядів та прогнозування з використанням Р. Дуже рекомендується.


Привіт Стефане, я додав дані та графік для мого набору даних. Як ви бачите, що у мене всього 27 точок даних, тож я тут працюю на димах. Чи можете ви щось тут запропонувати.
Raunak87

Я відредагував відповідь. Ваша серія не має великої структури, тому ви можете зробити дуже мало. Оскільки у вас по суті є шум і мало іншого, ви отримуєте великі інтервали прогнозування.
Стефан Коласа

4

Дві речі. Ваш часовий ряд щомісяця, вам потрібно щонайменше 4 роки даних для розумної оцінки ARIMA, оскільки відображені 27 балів не дають структуру автокореляції. Це також може означати, що на ваші продажі впливають деякі зовнішні фактори, а не співвідносяться з власною вартістю. Спробуйте дізнатися, який фактор впливає на ваші продажі і чи вимірюється цей фактор. Потім ви можете запустити регресію або VAR (Vector Autoregression), щоб отримати прогнози.

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

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

Зазвичай це відбувається з даними про продажі в роздрібній торгівлі або в ланцюзі постачань. Вони не демонструють багато структури автокореляції в серії. Хоча з іншого боку такі методи, як ARIMA або GARCH, як правило, працюють з даними на фондовому ринку або економічними показниками, де зазвичай є автокореляція.


3

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

Відомий факт, але часто ігнорується тут і в інших місцях, полягає в тому, що теоретичний ACF / PACF, який використовується для формулювання орієнтовних приміщень моделі ARIMA, не містить імпульсів / зрушень рівня / сезонних імпульсів / місцевих тенденцій часу. Крім того, він містить постійні параметри та постійну дисперсію помилок у часі. У цьому випадку 21-е спостереження (значення = 158) легко позначається як зовнішній / імпульсний, а запропоноване коригування -80 дає змінене значення 78. Отриманий в результаті ACF / PACF модифікованої серії показує мало або відсутність свідчень про стохастичну структуру (ARIMA). У цьому випадку операція мала успіх, але пацієнт помер. Зразок ACF заснований на коваріації / дисперсії, а надмірно завищена / роздута дисперсія дає зміщення вниз до ACF. Проф. Кіт Орд якось назвав це "ефектом Аліси в країні чудес".


2

Як вказував Стефан Коласа, у ваших даних немає багато структури. Функції автокореляції не пропонують структуру ARMA (див. acf(sales), pacf(sales)) І forecast::auto.arimaне вибирає жодного порядку AR чи MA.

require(forecast)
require(tsoutliers)
fit1 <- auto.arima(sales, d=0, D=0, ic="bic")
fit1
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept
#        81.3704
#s.e.     4.4070

Проте зауважте, що нульова нормальність у залишках відхиляється на рівні 5% значущості.

JarqueBera.test(residuals(fit1))[[1]]
#X-squared = 12.9466, df = 2, p-value = 0.001544

Зауваження: JarqueBera.testбазується на функції, jarque.bera.testдоступній в упаковці tseries.

Включаючи добавку для добавки в спостереженні 21, яка виявляється з tsoutliersнормальною здатністю до залишків. Таким чином, на оцінку перехоплення та прогноз не впливає зовнішнє спостереження.

res <- tsoutliers::tso(sales, types=c("AO", "TC", "LS"), 
  args.tsmethod=list(ic="bic", d=0, D=0))
res
#ARIMA(0,0,0) with non-zero mean 
#Coefficients:
#      intercept     AO21
#        78.4231  79.5769
#s.e.     3.3885  17.6072
#sigma^2 estimated as 298.5:  log likelihood=-115.25
#AIC=236.49   AICc=237.54   BIC=240.38
#Outliers:
#  type ind time coefhat tstat
#1   AO  21 2:09   79.58  4.52
JarqueBera.test(residuals(res$fit))[[1]]
#X-squared = 1.3555, df = 2, p-value = 0.5077

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