Rで中断された時系列分析のリソース


12

私はRにかなり慣れていません。時系列分析を読み込もうとして、すでに終了しています

  1. ShumwayとStofferの時系列分析とそのアプリケーション第3版
  2. Hyndmanの優れた予測:原則と実践
  3. Avril Coghlan による時系列分析でのR使用
  4. A. Ian McLeod et al 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確かに!私の目的は推論を行うことです。私のポイントをよりよく説明するために、編集でダミーデータを提供します。
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

変化点を特定したら、データを2つの時系列(変化点の前後)に分割し、2つの時系列のパラメーターを個別に推定できます。さらにいくつかの提案:データには強い季節傾向があるため、変化点分析の前にこれを削除する必要があります。ARIMAモデルを使用する場合は、変化点分析の前に差分も実行する必要があります(または、さらに特殊な手順を使用する必要があります)。
ブレントカービー2015

提案していただきありがとうございます。実装を試み、問題が解決した場合は「回答済み」とマークします。
dais.johns

2

繰り返し測定の階層モデルを提案します。この方法では、各個人が自分のコントロールとして機能するため、堅牢な結果が得られます。UCLAからこのリンクをチェックしてみてください


0

ベイジアンアプローチの場合、を使用mcpして、ポワソンモデルまたは二項モデル(固定間隔期間からのカウントがあるため)を使用して、(ログ空間の)残差に自動回帰を適用できます。次に、交差検証を使用して、2セグメントモデルを1セグメントモデルと比較します。

始める前に、このデータセットの場合、このモデルはうまく適合せず、交差検証が不安定に見えることに注意してください。したがって、私はハイステークスシナリオで以下を使用することを控えますが、一般的なアプローチを示しています。

# 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)ます。

、自己回帰をモデル化モデルの比較を行うと、事前確率に設定についてもっと読むウェブサイトを。開示:私はの開発者です。mcpmcp

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.