Оценка одной и той же модели по нескольким временным рядам


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

22

Одним из способов сделать это является создание длинных временных рядов со всеми вашими данными и последовательностями пропущенных значений между рядами для их разделения. Например, в 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 такая же, тогда вам придется использовать Arellano-Bond (извините, википедия имеет нет страницы на нем, так что искать его в Google) тип оценки. Модель в этом случае будет:

YяTзнак равноαя+ρ1Yя,T-1+,,,+ρпYя,T-п+εяT

яεяTя


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

2
@ sparc_spread, предположим, что это всего лишь две серии. Один центрируется примерно в 0 с дисперсией 1, а другой - в 1000 с дисперсией 1. Затем, если оба ряда подгоняются с использованием одинаковых коэффициентов, это означает, что мы ограничиваем alpha_1 = alpha_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

Я пытаюсь сделать то же самое. По-видимому, существует нечто, называемое «многовариантной авторегрессионной» моделью. Я нашел ссылку на это, но не как его использовать. Основываясь на связанном документе, я предполагаю, что он был реализован в R.

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.