Sumber daya untuk analisis deret waktu Terganggu dalam R

12

Saya cukup baru di R. Saya telah mencoba membaca tentang analisis deret waktu dan telah selesai

  1. Analisis seri Waktu Shumway dan Stoffer dan penerapannya Edisi ke-3 ,
  2. Peramalan Hyndman yang sangat baik : prinsip dan praktik
  3. Avril Coghlan's Menggunakan R untuk Time Series Analysis
  4. A. Ian McLeod dkk. Analisis Rangkaian Waktu dengan R
  5. Analisis Rangkaian Waktu Terapan Dr. Marcel Dettling

Sunting: Saya tidak yakin bagaimana menangani ini tetapi saya menemukan sumber daya yang bermanfaat di luar Cross Validated. Saya ingin memasukkannya di sini kalau-kalau ada yang tersandung pada pertanyaan ini.

Analisis regresi tersegmentasi dari studi time series terputus dalam penelitian penggunaan obat

Saya memiliki serangkaian waktu univariat dari jumlah barang yang dikonsumsi (data hitungan) yang diukur setiap hari selama 7 tahun. Intervensi diterapkan pada populasi penelitian sekitar pertengahan seri waktu. Intervensi ini tidak diharapkan untuk menghasilkan efek langsung dan waktu timbulnya efek pada dasarnya tidak diketahui.

Menggunakan forecastpaket Hyndman, saya telah menggunakan model ARIMA untuk data pra-intervensi auto.arima(). Tetapi saya tidak yakin bagaimana menggunakan kecocokan ini untuk menjawab apakah ada perubahan tren yang signifikan secara statistik dan menghitung jumlahnya.

# 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")

Apakah ada sumber daya khusus yang berhubungan dengan analisis deret waktu terputus dalam R? Saya telah menemukan ini berurusan dengan ITS di SPSS tetapi saya belum dapat menerjemahkan ini ke R.

dais.johns
sumber
Apakah Anda ingin melakukan kesimpulan apakah intervensi memiliki pengaruh yang signifikan secara statistik, atau Anda ingin memodelkan intervensi untuk mendapatkan perkiraan yang lebih baik ? Dan bisakah Anda membuat data tersedia?
Stephan Kolassa
@StephanKolassa Tentu Saja! Tujuan saya adalah melakukan inferensi. Saya akan memberikan data dummy dalam Edit untuk lebih mengilustrasikan poin saya.
dais.johns
@StephanKolassa Data disediakan untuk yang terbaik dari kemampuan saya.
dais.johns
Penelitian sebelumnya menunjukkan bahwa intervensi mempengaruhi pada skala perubahan +/- 5%.
dais.johns
@StephanKolassa Menyediakan data yang dapat digunakan aktual
dais.johns

Jawaban:

4

Ini dikenal sebagai analisis titik perubahan. Paket R changepointdapat melakukan ini untuk Anda: lihat dokumentasi di sini (termasuk referensi ke literatur): http://www.lancs.ac.uk/ ~killick / Pub / KillickEckley2011.pdf

Brent Kerby
sumber
Terima kasih. Saya melihat ini. Sejauh yang saya tahu ini akan menghitung kemungkinan poin perubahan dalam seri, tetapi tidak akan menganalisis perbedaan tren. Saya minta maaf jika asumsi ini salah, saya belum dapat meninjau paket selain dari permukaan.
dais.johns
Setelah mengidentifikasi titik perubahan, Anda dapat membagi data menjadi dua seri waktu (sebelum dan setelah titik perubahan) dan memperkirakan parameter dari dua seri waktu secara terpisah. Beberapa saran lagi: karena data Anda memiliki tren musiman yang kuat, ini harus dihapus sebelum analisis titik perubahan; dan jika Anda akan menggunakan model ARIMA, maka perbedaan juga harus dilakukan sebelum analisis titik perubahan (atau, sebagai alternatif, Anda harus menggunakan beberapa prosedur yang lebih khusus).
Brent Kerby 3-15
Terima kasih atas saran Anda, saya akan berusaha menerapkan dan akan menandai sebagai "dijawab" jika ini menyelesaikan masalah.
dais.johns
2

Saya akan menyarankan model hirarki tindakan berulang. Metode ini harus memberikan hasil yang kuat karena setiap individu akan bertindak sebagai kontrolnya sendiri. Coba periksa tautan ini dari UCLA.

kblansit
sumber
0

Untuk pendekatan Bayesian, Anda dapat menggunakan mcpagar sesuai dengan model Poisson atau Binomial (karena Anda memiliki hitungan dari periode interval tetap) dengan autoregresi diterapkan pada residu (dalam ruang log). Kemudian bandingkan model dua segmen dengan model satu segmen menggunakan cross-validation.

Sebelum kita mulai, perhatikan bahwa untuk dataset ini, model ini tidak cocok dan validasi silang terlihat tidak stabil. Jadi saya akan menahan diri untuk tidak menggunakan yang berikut dalam skenario berisiko tinggi, tetapi itu menggambarkan pendekatan umum:

# 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)

Untuk dataset saat ini, ini menghasilkan

       elpd_diff se_diff
model2    0.0       0.0 
model1 -459.1      64.3 

Yaitu, elpd_diff/se_diffrasio sekitar 7 yang mendukung model nol (tidak ada perubahan). Kemungkinan peningkatan meliputi:

  • memodelkan tren periodik menggunakan sin()atau cos().
  • menambahkan informasi sebelumnya tentang kemungkinan lokasi perubahan, misalnya prior = list(cp_1 = dnorm(1999.8, 0.5),.

Baca lebih lanjut tentang pemodelan autoregresi, melakukan perbandingan model, dan pengaturan prior yang mcpsitus . Pengungkapan: Saya adalah pengembang dari mcp.

Jonas Lindeløv
sumber