Beberapa imputasi untuk data hitung yang hilang dalam serangkaian waktu dari studi panel

9

Saya mencoba untuk mengatasi masalah yang berhubungan dengan imputasi data yang hilang dari studi data panel (Tidak yakin apakah saya menggunakan 'studi data panel' dengan benar - seperti yang saya pelajari hari ini.) Saya memiliki total data jumlah kematian untuk tahun 2003 hingga 2009, semua bulan, pria & wanita, untuk 8 kabupaten berbeda dan untuk 4 kelompok umur.

Kerangka data terlihat seperti ini:

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    11       05-14           1
         Northern    Male 2006    11         15+          83
         Northern    Male 2006    12           0           3
         Northern    Male 2006    12        01-4           0
         Northern    Male 2006    12       05-14           0
         Northern    Male 2006    12         15+         106
         Southern  Female 2003     1           0           6
         Southern  Female 2003     1        01-4           0
         Southern  Female 2003     1       05-14           3
         Southern  Female 2003     1         15+         136
         Southern  Female 2003     2           0           6
         Southern  Female 2003     2        01-4           0
         Southern  Female 2003     2       05-14           1
         Southern  Female 2003     2         15+         111
         Southern  Female 2003     3           0           2
         Southern  Female 2003     3        01-4           0
         Southern  Female 2003     3       05-14           1
         Southern  Female 2003     3         15+         141
         Southern  Female 2003     4           0           4

Selama 10 bulan yang tersebar di tahun 2007 dan 2008, beberapa kematian total dari semua kabupaten tidak dicatat. Saya mencoba memperkirakan nilai yang hilang ini melalui metode imputasi berganda. Baik menggunakan Generalized Linear Models atau SARIMA models.

Masalah terbesar saya adalah penggunaan perangkat lunak dan pengkodean. Saya mengajukan pertanyaan pada Stackoverflow, di mana saya ingin mengekstraksi data ke dalam kelompok yang lebih kecil seperti ini:

         District  Gender Year Month    AgeGroup TotalDeaths
         Northern    Male 2003     1        01-4           0
         Northern    Male 2003     2        01-4           1
         Northern    Male 2003     3        01-4           0
         Northern    Male 2003     4        01-4           3
         Northern    Male 2003     5        01-4           4
         Northern    Male 2003     6        01-4           6
         Northern    Male 2003     7        01-4           5
         Northern    Male 2003     8        01-4           0
         Northern    Male 2003     9        01-4           1
         Northern    Male 2003    10        01-4           2
         Northern    Male 2003    11        01-4           0
         Northern    Male 2003    12        01-4           1
         Northern    Male 2004     1        01-4           1
         Northern    Male 2004     2        01-4           0

Pergi ke

         Northern    Male 2006    11        01-4           0
         Northern    Male 2006    12        01-4           0

Tetapi seseorang menyarankan saya sebaiknya membawa pertanyaan saya di sini - mungkin menanyakan arah? Saat ini saya tidak dapat memasukkan data ini sebagai studi time-series / panel yang tepat ke dalam R. Tujuan akhirnya saya adalah untuk menggunakan data ini dan amelia2paket dengan fungsinya untuk menyalahkan hilang TotalDeathsselama bulan-bulan tertentu pada 2007 dan 2008, di mana data tersebut hilang.

Bantuan apa pun, cara melakukan ini dan mungkin saran tentang cara mengatasi masalah ini akan sangat dihargai.

Jika ini membantu, saya mencoba mengikuti pendekatan yang serupa dengan apa yang dilakukan Clint Roberts dalam tesis PhD-nya .

EDIT:

Setelah membuat variabel 'waktu' dan 'grup' seperti yang disarankan oleh @Matt:

> head(dat)
     District Gender Year Month AgeGroup Unnatural Natural Total time                    group
1 Khayelitsha Female 2001     1        0         0       6     6    1     Khayelitsha.Female.0
2 Khayelitsha Female 2001     1     01-4         1       3     4    1  Khayelitsha.Female.01-4
3 Khayelitsha Female 2001     1    05-14         0       0     0    1 Khayelitsha.Female.05-14
4 Khayelitsha Female 2001     1     15up         8      73    81    1  Khayelitsha.Female.15up
5 Khayelitsha Female 2001     2        0         2       9    11    2     Khayelitsha.Female.0
6 Khayelitsha Female 2001     2     01-4         0       2     2    2  Khayelitsha.Female.01-4

Seperti yang Anda perhatikan, sebenarnya ada detail lebih lanjut 'Alami' dan 'Tidak Alami'.

OSlOlSO
sumber

Jawaban:

10

Anda dapat menggunakan Ameliapaket untuk menyalahkan data (pengungkapan penuh: Saya adalah salah satu penulis Amelia). The paket sketsa memiliki contoh diperpanjang bagaimana menggunakannya untuk menyalahkan data yang hilang.

Sepertinya Anda memiliki unit yang merupakan distrik-gender-ageGroup yang diamati pada tingkat bulanan. Pertama, Anda membuat variabel faktor untuk setiap jenis unit (yaitu, satu tingkat untuk setiap kabupaten-gender-ageGroup). Sebut ini group. Kemudian, Anda perlu variabel untuk waktu, yang mungkin merupakan jumlah bulan sejak Januari 2003. Dengan demikian, variabel ini akan menjadi 13 pada Januari 2004. Panggil variabel ini time. Amelia akan memungkinkan Anda untuk menyalahkan berdasarkan tren waktu dengan perintah berikut:

library(Amelia)
a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE)

The tsdan csargumen hanya menunjukkan waktu dan satuan variabel. The splinetimeArgumen set seberapa fleksibel harus waktu digunakan untuk menyalahkan data yang hilang. Di sini, a 2 berarti bahwa imputasi akan menggunakan fungsi kuadrat waktu, tetapi nilai yang lebih tinggi akan lebih fleksibel. The intercsArgumen di sini memberitahu Amelia menggunakan tren waktu terpisah untuk setiap kabupaten-gender kelompok umur. Ini menambahkan banyak parameter ke model, jadi jika Anda mengalami masalah, Anda dapat mengatur ini FALSEuntuk mencoba debug.

Bagaimanapun, ini akan membuat Anda imputasi menggunakan informasi waktu dalam data Anda. Karena data yang hilang dibatasi pada nol, Anda dapat menggunakan boundsargumen untuk memaksakan imputasi ke dalam batasan logis tersebut.

EDIT: Cara membuat variabel grup / waktu

Variabel waktu mungkin paling mudah dibuat, karena Anda hanya perlu menghitung dari tahun 2002 (dengan asumsi itu adalah tahun terendah dalam data Anda):

my.data$time <- my.data$Month + 12 * (my.data$Year - 2002)

Variabel grup sedikit lebih keras tetapi cara cepat untuk melakukannya adalah menggunakan perintah tempel:

my.data$group <- with(my.data, 
                      as.factor(paste(District, Gender, AgeGroup, sep = ".")))

Dengan variabel-variabel ini dibuat, Anda ingin menghapus variabel asli dari imputasi. Untuk melakukan itu, Anda dapat menggunakan idvarsargumen:

a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE,
                idvars = c("District", "Gender", "Month", "Year", "AgeGroup"))
Matt Blackwell
sumber
Terima kasih banyak atas tanggapan Anda! Saya sudah bermain dengan Ameliasedikit tetapi menyerah (sebelum ini). Saya sebelumnya telah melihat sketsa (tapi entah bagaimana kehilangan itu!) Baru saja melihatnya dan akan melalui itu. Satu masalah yang saya miliki sekarang adalah bahwa saya tidak yakin tentang cara membuat groupdan timevariabel. (Saya mencoba membuat mereka untuk analisis deret waktu / perkiraan, tetapi mengitarinya.) Saya yakin itu ada di vigette - jadi saya akan menghubungi Anda jika saya kesulitan. Terima kasih lagi :)
OSlOlSO
Senang itu berguna. Saya menambahkan contoh cara membuat variabel-variabel itu. Semoga itu bisa membantu.
Matt Blackwell
Terima kasih atas contoh @Matt. Untuk beberapa alasan aneh itu memberi saya kesalahan ketika saya menggunakan "ts = time" dan "cs = group". Saya hanya mengganti "waktu" dan "grup" dengan nomor kolom masing-masing dan kemudian berhasil. a.out=amelia(dat,ts=time,cs=group,splinetime=2,intercs=TRUE,idvars=c("District","Gender","Month","Year","AgeGroup"),bounds=bds) Amelia Error Code: 6 The 'ts' variable is out of the range of possible column numbers or is not an integer.
OSlOlSO
Untuk batas saya mengikuti sketsa dan membuat batas menggunakan: bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)Saya pada dasarnya hanya memilih 500 sebagai batas atas acak. Saya memang mencoba untuk tidak memberikan kolom ketiga, tetapi Ameliamemperingatkan bahwa itu membutuhkan yang ketiga. Apakah mungkin ada cara untuk menetapkan batas bawah secara spesifik?
OSlOlSO
Saya menambahkan contoh data dalam pertanyaan - mungkin jika ini yang menyebabkan Kesalahan? Tapi saya meragukannya.
OSlOlSO