Ресурси для аналізу перерваних часових рядів в R


12

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

  1. Аналіз часових рядів Shumway and Stoffer та його додатків 3-е видання ,
  2. Прекрасне прогнозування Хайндмана : принципи та практика
  3. Використання Аврила Коглана R для аналізу часових рядів
  4. A. Ian McLeod et al. Аналіз часових рядів з R
  5. Прикладний аналіз часового ряду доктора Марселя Деттлінга

Редагувати: Я не впевнений, як з цим впоратися, але я знайшов корисний ресурс поза Cross Validated. Я хотів включити його сюди на випадок, якщо хтось наткнеться на це питання.

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

У мене є одномірний часовий ряд кількості споживаних предметів (дані про підрахунок), що вимірюються щодня протягом 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, але я не зміг перекласти це на Р.


Ви хочете зробити висновок про те, чи втручання мало статистично значимий ефект, чи ви хочете моделювати втручання для отримання кращих прогнозів ? А ви могли б зробити дані доступними?
Стефан Коласа

@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.