R中用于中断时间序列分析的资源


12

我对R相当陌生。我尝试阅读时间序列分析,并且已经完成

  1. Shumway和Stoffer的时间序列分析及其应用第3版
  2. Hyndman出色的预测:原理和实践
  3. 艾薇儿·科兰(Avril Coghlan)使用R进行时间序列分析
  4. A. Ian McLeod等人的R时间序列分析
  5. Marcel Dettling博士的应用时间序列分析

编辑:我不确定如何处理此问题,但我发现了交叉验证之外的有用资源。我想把它包括在这里,以防有人偶然发现这个问题。

药物使用研究中中断时间序列研究的分段回归分析

我有一个连续7年每天测量的消耗项目数(计数数据)的单变量时间序列。大约在时间序列的中间对研究人群进行了干预。预计这种干预不会立即产生效果,而且效果发生的时间基本上是不可知的。

使用Hyndman的forecast软件包,我使用来将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中找到处理ITS的方法,但无法将其转换为R。


您要推断干预是否具有统计学上的显着效果,还是要对干预进行建模以获得更好的预测?您能否使数据可用?
Stephan Kolassa 2015年

@StephanKolassa当然!我的目的是进行推理。我将在Edit中提供虚拟数据,以更好地说明我的观点。
dais.johns,2015年

@StephanKolassa尽我所能提供数据。
dais.johns,2015年

先前的研究表明,干预影响的变化范围为+/- 5%。
dais.johns,2015年

@StephanKolassa提供了实际可用的数据
dais.johns,2015年

Answers:


4

这称为变更点分析。R软件包changepoint可以为您完成此任务:请参阅此处的文档(包括参考文献):http : //www.lancs.ac.uk/~killick/Pub/KillickEckley2011.pdf


谢谢。我正在调查这个。据我所知,这将计算系列中可能的变化点,但不会分析趋势差异。如果这个假设不正确,我深表歉意。
dais.johns,2015年

标识更改点后,可以将数据分为两个时间序列(更改点之前和之后),并分别估计两个时间序列的参数。还有一些建议:由于您的数据具有强烈的季节性趋势,因此应在更改点分析之前将其删除;如果要使用ARIMA模型,则还应在更改点分析之前进行差分(或者,或者,您需要使用一些更专门的过程)。
布伦特·克比

感谢您的建议,我将尝试实施,如果解决了该问题,它将标记为“已回答”。
dais.johns,2015年


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)

阅读有关建模自回归,进行模型比较以及设置网站优先级的更多mcp信息。披露:我是的开发者mcp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.