Ресурси для аналізу перерваних часових рядів в 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.