Ресурсы для Прерванного анализа временных рядов в R


12

Я довольно плохо знаком с R. Я попытался прочитать анализ временных рядов и уже закончил

  1. Анализ временных рядов Шамвея и Стоффера и его приложения, 3-е издание ,
  2. Отличное прогнозирование Хиндмана : принципы и практика
  3. Использование R Аврил Коглан для анализа временных рядов
  4. А. Ян Маклеод и др. Анализ временных рядов с помощью R
  5. Прикладной анализ временных рядов доктора Марселя Деттлинга

Изменить: я не уверен, как справиться с этим, но я нашел полезный ресурс за пределами перекрестной проверки. Я хотел бы включить это здесь на случай, если кто-нибудь наткнется на этот вопрос.

Сегментированный регрессионный анализ исследований прерывистых временных рядов в исследованиях использования лекарственных средств

У меня есть одномерный временной ряд количества потребляемых предметов (данные подсчета), измеряемых ежедневно в течение 7 лет. Вмешательство было применено к исследуемой популяции примерно в середине временного ряда. Ожидается, что это вмешательство не даст немедленного эффекта, а время наступления эффекта по существу неизвестно.

Используя forecastпакет Hyndman, я приспособил модель ARIMA к использованию данных перед вмешательством auto.arima(). Но я не уверен, как использовать это соответствие, чтобы ответить, имело ли место статистически значимое изменение тренда, и определить количество.

# for simplification I will aggregate to monthly counts
# I can later generalize any teachings the community supplies
count <- c(2464, 2683, 2426, 2258, 1950, 1548, 1108,  991, 1616, 1809, 1688, 2168, 2226, 2379, 2211, 1925, 1998, 1740, 1305,  924, 1487, 1792, 1485, 1701, 1962, 2896, 2862, 2051, 1776, 1358, 1110,  939, 1446, 1550, 1809, 2370, 2401, 2641, 2301, 1902, 2056, 1798, 1198,  994, 1507, 1604, 1761, 2080, 2069, 2279, 2290, 1758, 1850, 1598, 1032,  916, 1428, 1708, 2067, 2626, 2194, 2046, 1905, 1712, 1672, 1473, 1052,  874, 1358, 1694, 1875, 2220, 2141, 2129, 1920, 1595, 1445, 1308, 1039,  828, 1724, 2045, 1715, 1840)
# for explanatory purposes
# month <- rep(month.name, 7)
# year <- 1999:2005
ts <- ts(count, start(1999, 1))
train_month <- window(ts, start=c(1999,1), end = c(2001,1))
require(forecast)
arima_train <- auto.arima(train_month)
fit_month <- Arima(train_month, order = c(2,0,0), seasonal = c(1,1,0), lambda = 0)
plot(forecast(fit_month, 36)); lines(ts, col="red")

Существуют ли какие-либо ресурсы, специально посвященные анализу прерванных временных рядов в R? Я обнаружил, что это связано с ИТС в SPSS, но я не смог перевести это на R.


Вы хотите сделать вывод о том, оказало ли вмешательство статистически значимый эффект, или вы хотите смоделировать вмешательство для получения более точных прогнозов ? И не могли бы вы сделать данные доступными?
Стефан Коласса

@StephanKolassa Конечно! Моя цель - сделать вывод. Я предоставлю фиктивные данные в редактировании, чтобы лучше проиллюстрировать мою точку зрения.
dais.johns

@StephanKolassa Данные предоставлены в меру моих способностей.
dais.johns

Предыдущее исследование показало, что влияние вмешательства должно быть в масштабе изменения +/- 5%.
dais.johns

@StephanKolassa Предоставил фактические полезные данные
dais.johns

Ответы:


4

Это называется анализом изменений. Пакет R changepointможет сделать это для вас: см. Документацию здесь (включая ссылки на литературу): http://www.lancs.ac.uk/~killick/Pub/KillickEckley2011.pdf


Спасибо. Я смотрю на это. Насколько я могу судить, это вычислит возможные точки изменения в серии, но не будет анализировать разницу тренда. Я прошу прощения, если это предположение неверно, я не смог рассмотреть пакет, кроме как поверхностно.
dais.johns

После определения точки изменения вы можете разбить данные на два временных ряда (до и после точки изменения) и оценить параметры двух временных рядов отдельно. Еще пара предложений: поскольку ваши данные имеют сильную сезонную тенденцию, их следует удалить до анализа точки изменения; и если вы собираетесь использовать модель ARIMA, то различие также должно быть выполнено до анализа точки изменения (или, альтернативно, вам нужно будет использовать более специализированную процедуру).
Брент Керби

Спасибо за ваши предложения, которые я попытаюсь реализовать, и помечу их как «ответ», если это решит проблему.
dais.johns

2

Я бы предложил повторить меры иерархической модели. Этот метод должен обеспечить надежные результаты, так как каждый человек будет действовать как его / ее собственный контроль. Попробуйте проверить эту ссылку из UCLA.


0

Для байесовского подхода вы можете использовать mcpдля подгонки пуассоновской или биномиальной модели (поскольку у вас есть отсчеты по периодам с фиксированным интервалом) с авторегрессией, примененной к остаткам (в пространстве журнала). Затем сравните двухсегментную модель с односегментной моделью, используя перекрестную проверку.

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

# Fit the change point model
library(mcp)
model_full = list(
  count ~ 1 + ar(1),  # intercept and AR(1)
  ~ 1  # New intercept
)
fit_full = mcp(model_full, data = df, family = poisson(), par_x = "year")


# Fit the null model
model_null = list(
  count ~ 1 + ar(1)  # just a stable AR(1)
)
fit_null = mcp(model_null, data = df, family = poisson(), par_x = "year")

# Compare predictive performance using LOO cross-validation
fit_full$loo = loo(fit_full)
fit_null$loo = loo(fit_null)
loo::loo_compare(fit_full$loo, fit_null$loo)

Для данного набора данных это приводит к

       elpd_diff se_diff
model2    0.0       0.0 
model1 -459.1      64.3 

То есть elpd_diff/se_diffсоотношение около 7 в пользу нулевой модели (без изменений). Возможные улучшения включают в себя:

  • моделирование периодического тренда с помощью sin()или cos().
  • добавляя предварительную информацию о вероятном месте изменения, например, prior = list(cp_1 = dnorm(1999.8, 0.5).

Подробнее о моделировании авторегрессии, делая сравнение модели и установки Priors на mcpсайте . Раскрытие информации: я разработчик mcp.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.