Rangkaian waktu untuk data jumlah, dengan jumlah <20

23

Baru-baru ini saya mulai bekerja di klinik TBC. Kami bertemu secara berkala untuk membahas jumlah kasus TB yang saat ini kami tangani, jumlah tes yang diberikan, dll. Saya ingin mulai memodelkan jumlah ini sehingga kami tidak hanya menebak apakah ada sesuatu yang tidak biasa atau tidak. Sayangnya, saya hanya memiliki sedikit pelatihan dalam rangkaian waktu, dan sebagian besar paparan saya adalah model untuk data yang sangat berkelanjutan (harga saham) atau jumlah yang sangat besar (influenza). Tetapi kami menangani 0-18 kasus per bulan (rata-rata 6,68, median 7, var 12,3), yang didistribusikan seperti ini:

[gambar hilang karena kabut waktu]

[gambar dimakan oleh grue]

Saya telah menemukan beberapa artikel yang membahas model-model seperti ini, tetapi saya sangat menghargai mendengar saran dari Anda - baik untuk pendekatan maupun untuk paket R yang dapat saya gunakan untuk mengimplementasikan pendekatan tersebut.

EDIT: jawaban mbq telah memaksa saya untuk berpikir lebih hati-hati tentang apa yang saya tanyakan di sini; Saya terlalu terpaku pada hitungan bulanan dan kehilangan fokus sebenarnya dari pertanyaan itu. Yang ingin saya ketahui adalah: apakah (cukup terlihat) penurunan dari, katakanlah, 2008 dan seterusnya mencerminkan tren penurunan jumlah kasus secara keseluruhan? Bagiku jumlah kasus setiap bulan dari 2001-2007 mencerminkan proses yang stabil; mungkin beberapa musim, tetapi secara keseluruhan stabil. Dari tahun 2008 hingga sekarang, sepertinya proses itu berubah: jumlah kasus secara keseluruhan menurun, meskipun jumlah bulanan mungkin bergetar naik turun karena keacakan dan musiman. Bagaimana saya bisa menguji jika ada perubahan nyata dalam proses? Dan jika saya bisa mengidentifikasi penurunan,

Matt Parker
sumber
2
Tautan telah mati. Jika Anda dapat memperoleh gambar (atau membuat ulang), silakan gunakan sistem baru yang menyimpannya di imgur.
Glen_b -Reinstate Monica
Sayangnya, plot-plot ini berasal dari beberapa pekerjaan yang lalu. Permintaan maaf!
Matt Parker
1
Mengingat pos ini (# 173) berasal dari jauh ketika situs itu dalam versi beta, itu tidak mengherankan - beberapa orang dapat mengulang plot dari pos sejauh itu pada saat ini. Bagaimanapun, terima kasih.
Glen_b -Reinstate Monica

Jawaban:

15

Untuk menilai tren historis, saya akan menggunakan gam dengan komponen tren dan musiman. Sebagai contoh

require(mgcv)
require(forecast)
x <- ts(rpois(100,1+sin(seq(0,3*pi,l=100))),f=12)
tt <- 1:100
season <- seasonaldummy(x)
fit <- gam(x ~ s(tt,k=5) + season, family="poisson")
plot(fit)

Kemudian summary(fit)akan memberi Anda tes signifikansi dari perubahan tren dan plot akan memberi Anda beberapa interval kepercayaan. Asumsi di sini adalah bahwa pengamatan independen dan distribusi kondisional adalah Poisson. Karena mean dibiarkan berubah dengan lancar dari waktu ke waktu, ini bukanlah asumsi yang kuat.

Peramalan lebih sulit karena Anda perlu memproyeksikan tren ke masa depan. Jika Anda bersedia menerima ekstrapolasi linear tren di akhir data (yang tentu saja cerdik tapi mungkin ok untuk beberapa bulan), maka gunakan

fcast <- predict(fit,se.fit=TRUE,
               newdata=list(tt=101:112,season=seasonaldummyf(x,h=12)))

Untuk melihat perkiraan pada grafik yang sama:

plot(x,xlim=c(0,10.5))
lines(ts(exp(fcast$fit),f=12,s=112/12),col=2)
lines(ts(exp(fcast$fit-2*fcast$se),f=12,s=112/12),col=2,lty=2)
lines(ts(exp(fcast$fit+2*fcast$se),f=12,s=112/12),col=2,lty=2)

Anda dapat melihat bulan-bulan yang tidak biasa dengan mencari pencilan dalam residu (penyimpangan) yang cocok.

Rob Hyndman
sumber
8

Anda mungkin ingin melihatnya strucchange :

Menguji, memantau dan menentukan perubahan struktural dalam model regresi (linier). strucchange fitur tes / metode dari kerangka uji fluktuasi umum serta dari kerangka uji F (uji Chow). Ini termasuk metode untuk menyesuaikan, merencanakan dan menguji proses fluktuasi (misalnya, CUSUM, MOSUM, perkiraan rekursif / bergerak) dan statistik F, masing-masing. Dimungkinkan untuk memantau data yang masuk secara online menggunakan proses fluktuasi. Akhirnya, breakpoints dalam model regresi dengan perubahan struktural dapat diperkirakan bersama dengan interval kepercayaan. Penekanan selalu diberikan pada metode untuk memvisualisasikan data. "

PS. Grafik yang bagus;)

Hadley
sumber
Saya harus membacanya lebih teliti nanti, tapi ya, paket ini pasti menangani masalah yang saya hadapi di sini. Terima kasih! Dan juga, terima kasih atas kata-kata baik tentang plot; p
Matt Parker
6

Apakah itu benar-benar membutuhkan model yang canggih? Berdasarkan apa yang saya ketahui tentang TB, jika tidak ada epidemi, infeksi adalah tindakan stokastik sehingga hitungan bulan N tidak boleh dikorelasikan dengan hitungan dari bulan N-1. (Anda dapat memeriksa asumsi ini dengan autokorelasi). Jika demikian, menganalisis hanya distribusi jumlah bulanan mungkin cukup untuk memutuskan apakah beberapa jumlah secara signifikan lebih tinggi dari normal.
Di sisi lain Anda dapat mencari korelasi dengan beberapa variabel lain, seperti musim, lalu lintas perjalanan, atau apa pun yang dapat Anda bayangkan yang mungkin berkorelasi. Jika Anda akan menemukan sesuatu seperti ini, maka dapat digunakan untuk beberapa normalisasi data.


sumber
1
Poin Anda tentang hitungan bulan N tidak selalu dikorelasikan dengan N-1 adalah baik. Dengan penyakit yang tumbuh lambat seperti TB, itu adalah sesuatu yang harus saya perhatikan dengan seksama, tetapi saya cukup yakin saya dapat mengidentifikasi tentang berapa banyak jeda antara waktu kami melaporkan sumber kasus dan waktu kami melaporkan sekunder kasus.
Matt Parker
1
Namun, Anda ingin menganalisis distribusi jumlah bulanan yang menjadi inti pertanyaan saya. Ada penurunan yang pasti dalam TB, baik secara nasional di AS maupun di distrik saya. Sebagai contoh, ketika saya membandingkan tahun 2009 dengan tahun-tahun sebelumnya, jelas ada lebih sedikit kasus. 2010 berada di jalur untuk memiliki lebih sedikit. Apa yang saya coba identifikasi (yang saya lakukan dengan pekerjaan yang buruk untuk menjelaskan dalam pertanyaan) adalah apakah penurunan ini merupakan bagian dari tren penurunan yang sedang berlangsung, atau hanya goyangan ke bawah. Terima kasih - Anda membuat saya berpikir lebih hati-hati tentang masalahnya.
Matt Parker
5

Seringkali, data penyakit seperti ini dilakukan dengan model linier umum, karena tidak selalu merupakan aplikasi analisis deret waktu - bulan-bulan sering tidak semuanya berkorelasi satu sama lain.

Jika saya diberi data ini, inilah yang akan saya lakukan (dan memang, telah dilakukan dengan data yang mirip dengan itu):

Buat variabel "waktu" yang lebih akurat digambarkan sebagai "Bulan sejak 1/1/2000" jika saya mengamati data Anda dengan benar. Kemudian saya menjalankan model linear umum dalam R menggunakan distribusi Poisson (atau Negative Binomial) dan tautan log dengan kira-kira bentuk berikut:

log(Counts) = b0 + b1*t + b2*(t^2) + b3*cos(2pi*w*t) + b4*sin(2pi*w*t)

Di mana t adalah waktu yang dijelaskan di atas, dan w adalah 1/365 untuk penyakit tahunan seperti flu. Umumnya 1 / n, di mana n adalah panjang siklus penyakit Anda. Saya tidak tahu apa itu TB.

Dua tren waktu akan menunjukkan Anda - di luar variasi musiman normal - jika Anda memiliki variasi yang berarti dari waktu ke waktu.

Fomite
sumber
4

Anda mungkin mempertimbangkan menerapkan diagram Kontrol Tukey ke data.

babelproofreader
sumber
Heh - ini sebenarnya salah satu plot yang saya buat yang tidak berhasil masuk ke pos. Masalah yang saya miliki adalah memutuskan bagaimana menghitung batas - upaya awal saya adalah dengan batas Poisson, dengan lambda diatur ke rata-rata data saya, tetapi varians terlalu tinggi untuk menjadi Poisson yang tepat (cukup tinggi untuk masalah dalam praktik? Saya tidak tahu).
Matt Parker
Masalah selanjutnya adalah bahwa pusat distribusi dapat berubah dari waktu ke waktu - misalnya, tidak masuk akal untuk menetapkan batas tersebut menggunakan data dari awal 1900-an, ketika Colorado adalah surga bagi pasien TB. Jadi apa cara yang tepat untuk menjaga agar garis tetap up-to-date dengan perubahan jangka panjang dalam proses, sementara masih dapat mengidentifikasi penyimpangan?
Matt Parker
4

Anda dapat mencoba memodelkan data Anda menggunakan Dynamic Generalized Linear Model (DGLM). Di R, Anda dapat memuat model seperti ini menggunakan paket sspir dan KFAS. Dalam arti tertentu, ini mirip dengan pendekatan gam yang disarankan oleh Rob, kecuali bahwa alih-alih mengasumsikan rata-rata log dari pengamatan Poisson menjadi fungsi waktu yang lancar, ia mengasumsikan bahwa ia mengikuti dinamika stokastik.


sumber
Keren - Saya tidak tahu tentang paket KFAS. Ada juga dlm dan dse untuk pendekatan ruang-ish negara, dan gambaran umum untuk pengguna R di sini: cran.r-project.org/web/views/TimeSeries.html
conjugateprior
2
Saya akan sangat merekomendasikan dlmpaket. DLM tidak semudah digunakan sebagai solusi lain, tetapi dlmmembuatnya semudah mungkin dan memiliki sketsa bagus yang memandu Anda melalui proses.
Wayne
2

Saya akan meninggalkan pertanyaan utama sendirian, karena saya pikir saya akan salah (walaupun saya juga menganalisis data untuk penyedia layanan kesehatan, dan jujur, jika saya memiliki data ini, saya hanya akan menganalisisnya menggunakan teknik standar dan berharap yang terbaik, mereka terlihat cukup oke untuk saya).

Adapun paket R, saya telah menemukan perpustakaan TSA dan buku yang menyertainya memang sangat berguna. The armasubsetsperintah, terutama, saya pikir adalah penghemat waktu yang besar.

Chris Beeley
sumber
2

Melarikan diri dari statistik enumeratif tradisional seperti yang disarankan Deming dan menjelajah ke statistik analitik tradisional - dalam hal ini, diagram kontrol. Lihat buku apa pun oleh Donald Wheeler PhD, khususnya "Topik Tingkat Lanjut dalam SPC" untuk info lebih lanjut.

GTB
sumber
Seseorang baru saja mengajukan pertanyaan tentang bagan SPC (alias QC) dalam R di stats.stackexchange.com/questions/15809/… di mana saya memberikan beberapa petunjuk paket. Saya sendiri tidak yakin dengan SPC / QC: Saya ingin tahu apakah itu lebih berguna di era pra-komputer dan untuk para pekerja di lantai toko, tetapi perlu dipertimbangkan.
Wayne
Sebenarnya, apakah jawaban ini berlebihan dengan @ babelproofreader?
Wayne
2

Menanggapi pertanyaan langsung Anda, "Bagaimana saya bisa menguji jika ada perubahan nyata dalam proses? Dan jika saya dapat mengidentifikasi penurunan, bagaimana saya bisa menggunakan tren itu dan apa pun musim mungkin ada untuk memperkirakan jumlah kasus yang mungkin kita lihat dalam bulan-bulan mendatang? " Mengembangkan Model Fungsi Transfer (ARMAX) yang siap menjelaskan ketergantungan periode-ke-periode termasuk dan struktur ARIMA musiman. Menggabungkan Pergeseran Level yang Dapat Diidentifikasi, Pulsa Musiman, Tren Waktu Lokal, dan PUlses yang mungkin telah disarankan oleh metode empiris / analitis seperti Deteksi Intervensi. JIKA MODEL ROBUST INI TERMASUK FAKTOR / SERI yang cocok dengan "menurun" Maka doa-doa Anda telah dijawab. Dalam alternatifnya tambahkan struktur yang dihipotesiskan misalnya untuk menguji perubahan tren waktu pada titik T1 membangun dua boneka X1 = 1,1,2,3 ,,,,,, T dan X2 = 0,0,0,0,0,0,0,0,1,2,3,4,5, .... DI MANA NOL AKHIR DI PERIODE T1-1. Tes hipotesis dari perubahan tren yang signifikan pada periode waktu T1 akan dinilai menggunakan "nilai t" untuk X2.

Diedit 9/22/11

Seringkali, data penyakit seperti ini memiliki efek bulanan karena cuaca / suhu sering merupakan penyebab yang tidak ditentukan. Untuk menghilangkan seri caudsal sejati, model ARIMA menggunakan memori atau boneka musiman sebagai pengganti. Selain itu seri seperti ini dapat memiliki perubahan level dan / atau tren waktu lokal yang mencerminkan perubahan struktural dari waktu ke waktu. Mengeksploitasi struktur autoregresif dalam data daripada memaksakan berbagai artefak seperti waktu dan waktu dan waktu kubik dll telah ditemukan sangat berguna dan kurang anggapan dan ad hoc. Kehati-hatian juga harus diambil untuk mengidentifikasi "nilai-nilai yang tidak biasa" karena mereka sering dapat berguna dalam menyarankan variabel penyebab tambahan dan setidaknya mengarah pada perkiraan yang kuat dari parameter model lainnya. Akhirnya kami telah menemukan bahwa variabilitas / paramaters dapat bervariasi dari waktu ke waktu sehingga penyempurnaan model ini dapat dilakukan.

IrishStat
sumber
Bagaimana cara menyesuaikan nilai p ke akun untuk mengidentifikasi T1 post hoc ( yaitu , memperhatikannya setelah meninjau data)?
whuber
semua perbaikan yaitu pemeriksaan diagnostik yang mengarah ke augmentasi diperlakukan sama dengan struktur yang disarankan saat data berada di dalam laci. Menambahkan jeda ke variabel prediktor berdasarkan pemeriksaan diagnostik hanya menambah hipotesis nol lain ke daftar. Ini tidak berbeda dengan menghapus koefisien yang tidak signifikan.
IrishStat
@Irish saya tidak mengikuti itu. T1 tampaknya tidak ketinggalan: itu menetapkan changepoint. Tidakkah mudah untuk menemukan perubahan "signifikan" jika Anda diizinkan terlebih dahulu memeriksa data untuk memilih di mana titik perubahan itu?
whuber
@whuber Ya Anda benar. Tetapi pikirkan Proses Stepwise Forward dalam Regresi di mana Anda memeriksa variabel alternatif (dihilangkan) untuk "potensi penggabungan". Ini tidak berbeda dalam arti bahwa Anda memutuskan "tren yang dihilangkan" yang harus ditambahkan ke model untuk membuat proses kesalahan yang dihasilkan Gaussian.
IrishStat
@ Irish Itu analogi yang mencerahkan. Jika saya mengerti, pada dasarnya Anda mempertimbangkan untuk memiliki satu variabel potensial untuk setiap periode (menentukan perubahan yang mungkin terjadi pada periode tersebut) dan meminta proses sistematis untuk menentukan mana dari variabel-variabel ini yang harus dimasukkan dalam model. Ini menunjukkan bahwa beberapa prosedur penyesuaian level-p standar, seperti Bonferroni, mungkin dapat diterapkan. Apakah itu valid?
whuber