Оцінка тієї ж моделі за кількома часовими рядами


26

У мене початковий досвід у часових рядах (деякі оцінки / прогнозування ARIMA), і я стикаюся з проблемою, яку я не повністю розумію. Будь-яка допомога буде дуже вдячна.

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

Мене попросили оцінити єдину модель, яка описує ВСІ серії, - наприклад, уявіть, що я міг би знайти одну ARIMA (p, d, q) з однаковими порядками, коефіцієнтами тощо, яка могла б відповідати всім серіям. Мій керівник не хоче, щоб я окремо оцінював кожну серію, а також не хоче, щоб я робив якусь модель VAR із залежностями між серіями.

Моє запитання: як я б навіть назвав таку модель, і як би я міг займатися її оцінкою / прогнозуванням? Якщо вам легше використовувати приклади коду, я розмовляю як SAS, так і R.

Відповіді:


8

Ви можете здійснити пошук в сітці: почніть з ARIMA (1,0,0) і спробуйте всі можливості, аж до ARIMA (5,2,5) або чогось іншого. Встановіть модель до кожної серії та оцініть незалежну від масштабу помилку як MAPE або MASE (MASE, мабуть, буде кращою). Виберіть модель ARIMA з найнижчим середнім значенням MASE для всіх ваших моделей.

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

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


2
Дякую - я спробую це. Я згоден, що це здається не найкращою ідеєю. Я отримав аргумент, що для кожної серії не вистачає спостережень (~ 28) для хорошої оцінки і що було б більш обґрунтовано оцінювати всі серії. Я не впевнений, що згоден з цим аргументом.
sparc_spread

21

Один із способів зробити це - побудувати довгий часовий ряд з усіма вашими даними та з послідовностями пропущених значень між серіями, щоб розділити їх. Наприклад, в R, якщо у вас є три серії ( x, yі z) кожен довжиною 100 і частотою 12, ви можете приєднатися до них наступним чином

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Зауважте, що кількість відсутніх значень обрана для забезпечення збереження сезонного періоду. Я підкреслив підсумковий рік з 8 відсутніми значеннями, а потім додав чотири пропущені роки (48 значень) до наступної серії. Цього повинно бути достатньо, щоб забезпечити будь-яке послідовне співвідношення між серіями.

Тоді ви можете використовувати auto.arima()найкращу модель:

library(forecast)
fit <- auto.arima(combined)

Нарешті, ви можете застосувати комбіновану модель до кожної серії окремо, щоб отримати прогнози:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

5
+1, акуратний трюк. Судячи з коментаря ОП до іншої відповіді, я збирався запропонувати якусь модель даних панелі, але це набагато краще.
mpiktas

Це величезна допомога, яку дуже цінують. Чи можете ви пояснити більше: кількість пропущених значень обрана для забезпечення збереження сезонного періоду ? Вибачте, що не дотримувався повністю - дякую.
sparc_spread

1
Якщо в даних є сезонність (як це часто буває з щомісячними спостереженнями), ви хочете, щоб довгі серії все ще мали януари кратні 12 один від одного, лютневі кратні 12 один від одного тощо. Потім, коли модель вибирається, сезонність можна моделювати відповідним чином.
Роб Хайндман

3
Щоб додати цей фокус - ви можете додати зовнішні регресори (xreg), що вказують на приналежність до категорії. Це пояснювало б окремі засоби для різних серій, зберігаючи інші спільні коефіцієнти.
Джеймсон Куїнн

6

Оцінка єдиної моделі для декількох часових рядів є сферою економетрики даних на панелі . Однак у вашому випадку без пояснювальної змінної відповідь @Rob Hyndman, мабуть, найкраще відповідає. Однак якщо виявиться, що засоби часових рядів різні (протестуйте це, оскільки в цьому випадку метод @Rob Hyndman повинен вийти з ладу!), Але структура ARMA така ж, вам доведеться використовувати Ареллано-Бонд (вибачте у wikipedia на ньому немає сторінки, тому шукайте її в google). Модель у такому випадку була б:

уiт=αi+ρ1уi,т-1+...+ρpуi,т-p+εiт

iεiтi


1
Дуже цінуємо ваше рішення та інші. Ви згадуєте про це: Однак якщо виявиться, що засоби часових рядів різні (протестуйте його, оскільки в цьому випадку метод @Rob Hyndman повинен зазнати невдачі!) Чи можете ви пояснити, чому це так? Спасибі.
sparc_spread

2
@sparc_spread, припустимо, це лише дві серії. Один зосереджений приблизно на 0 з дисперсією 1, а другий - на рівні 1000 з відхиленням 1. Тоді якщо обидва ряди підходять за допомогою однакових коефіцієнтів, це означає, що ми обмежуємо альфа_1 = альфа_2, тому прогнози для обох серій будуть приблизно 500, жахливо відключено. В основному, трактування всіх серій як належних до однієї моделі може вимагати певного перегляду / нормалізації до встановлення сумісної моделі.
zkurtz

4

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

ПРИМІТКА. Ви все ще закінчуєтесь лише 28 показаннями, лише меншим рівнем шуму, тому це може не відповідати вашій ситуації.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

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


Це спрацює лише в тому випадку, якщо всі сигнали подібні за своєю природою (наприклад, періодичні), всі вони знаходяться у фазі - у вашому прикладі, якби дві синусоїди були на 180 градусів поза фазою, вони повністю відміняться!
tdc

3
Так, усереднення ваших даних є доцільним лише тоді, коли кожна серія дат повинна представляти однакові дані, і (ви з радістю вважаєте, що) вони відрізняються лише тим, що кожен має різний шум.
Даррен Кук

1

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


0

Я намагаюся зробити те саме. Мабуть, там є щось, що називається "багатоваріантна авторегресивна" модель. Я знайшов посилання на нього, але не як ним користуватися. Грунтуючись на зв'язаному папері, я припускаю, що він був реалізований у Р.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf


Стандартний підхід - векторна авторегресія, і існує пакет R, який називається var .
Сіань

Чи відрізняється векторна авторегезія, ніж авторегресія на даних панелі? Або це питання різних полів, різних назв? Для даних панелі запропоновано пакет PLM. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.