Imputazione multipla per i dati di conteggio mancanti in una serie temporale da uno studio del pannello


9

Sto cercando di affrontare un problema che riguarda l'imputazione dei dati mancanti da uno studio dei dati del panel (non sono sicuro se sto usando correttamente lo "studio dei dati del panel" - come l'ho imparato oggi.) Ho i dati del conteggio dei decessi totali per gli anni 2003 al 2009, tutti i mesi, maschio e femmina, per 8 distretti diversi e per 4 fasce di età.

Il frame di dati è simile al seguente:

         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

Per i 10 mesi sparsi nel 2007 e nel 2008 alcuni dei decessi totali di tutti i distretti non sono stati registrati. Sto cercando di stimare questi valori mancanti attraverso un metodo di imputazione multipla. O utilizzando modelli lineari generalizzati o modelli SARIMA.

Il mio problema più grande è l'uso del software e della codifica. Ho fatto una domanda su StackOverflow, dove desidero estrarre i dati in gruppi più piccoli come questo:

         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

Andando a

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

Ma qualcuno ha suggerito che dovrei piuttosto portare la mia domanda qui - forse chiedere una direzione? Al momento non sono in grado di inserire questi dati come serie temporale / studio di gruppo in R. Il mio obiettivo finale è quello di utilizzare questi dati e il amelia2pacchetto con le sue funzioni per imputare la perdita TotalDeathsper alcuni mesi nel 2007 e 2008, in cui i dati sono mancante.

Qualsiasi aiuto, come fare questo e forse suggerimenti su come affrontare questo problema sarebbero apprezzati con gratitudine.

Se questo aiuta, sto cercando di seguire un approccio simile a quello che ha fatto Clint Roberts nella sua tesi di dottorato .

MODIFICARE:

Dopo aver creato la variabile 'time' e 'group' come suggerito da @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

Come noterai, in realtà ci sono ulteriori dettagli "Naturale" e "Non naturale".

Risposte:


10

È possibile utilizzare il Ameliapacchetto per imputare i dati (divulgazione completa: sono uno degli autori di Amelia). La vignetta del pacchetto contiene un esempio esteso di come utilizzarlo per imputare i dati mancanti.

Sembra che tu abbia unità che sono osservate a livello di distretto-genere-età a livello mensile. Per prima cosa crei una variabile fattore per ogni tipo di unità (vale a dire, un livello per ciascun gruppo distretto-genere-età). Chiamiamo questo group. Quindi, avresti bisogno di una variabile per il tempo, che è probabilmente il numero di mesi dal gennaio 2003. Pertanto, questa variabile sarebbe 13 nel gennaio del 2004. Chiama questa variabile time. Amelia ti permetterà di imputare in base alle tendenze temporali con i seguenti comandi:

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

Gli argomenti tse csindicano semplicemente il tempo e le variabili unitarie. L' splinetimeargomento stabilisce quanto flessibile dovrebbe essere il tempo da utilizzare per imputare i dati mancanti. Qui, un 2 significa che l'imputazione utilizzerà una funzione quadratica del tempo, ma valori più alti saranno più flessibili. L' intercsargomento qui dice ad Amelia di usare una tendenza temporale separata per ciascun gruppo distretto-genere-età. Ciò aggiunge molti parametri al modello, quindi se si verificano problemi, è possibile impostare questo FALSEper provare a eseguire il debug.

In ogni caso, questo ti porterà imputazioni usando le informazioni temporali nei tuoi dati. Poiché i dati mancanti sono limitati a zero, è possibile utilizzare l' boundsargomento per forzare le imputazioni in tali limiti logici.

EDIT: come creare variabili di gruppo / tempo

La variabile temporale potrebbe essere la più semplice da creare, poiché devi solo contare dal 2002 (supponendo che sia l'anno più basso nei tuoi dati):

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

La variabile di gruppo è leggermente più difficile ma un modo rapido per farlo è usare il comando incolla:

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

Con queste variabili create, si desidera rimuovere le variabili originali dall'imputazione. Per fare ciò puoi usare l' idvarsargomento:

a.out <- amelia(my.data, ts = "time", cs = "group", splinetime = 2, intercs = TRUE,
                idvars = c("District", "Gender", "Month", "Year", "AgeGroup"))

Grazie mille per la tua risposta! Ho giocato Ameliaper un po 'ma ho rinunciato (prima di questo). Ho già visto la vignetta (ma l'ho persa in qualche modo!) L'ho appena vista e la esaminerò a fondo. Un problema che ho ora è che non sono sicuro su come creare le variabili groupe time. (Ho provato a crearli per l'analisi / previsione delle serie storiche, ma ho fatto un giro attorno ad esso.) Sono sicuro che è nel vigette - quindi ti risponderò se sto lottando. Grazie ancora :)
OSlOlSO,

Sono contento che sia utile. Ho aggiunto un esempio di come creare quelle variabili. Spero che aiuti.
Matt Blackwell,

Grazie per gli esempi @Matt. Per qualche strana ragione mi ha dato un errore quando ho usato "ts = time" e "cs = group". Ho appena sostituito "time" e "group" con il rispettivo numero di colonna e poi ha funzionato. 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,

Per i limiti ho seguito la vignetta e ho creato i limiti usando: bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)Fondamentalmente ho appena scelto 500 come limite superiore casuale. Ho provato solo a non dare una terza colonna, ma Ameliaho avvertito che richiede la terza. Esiste forse un modo per specificare un limite inferiore?
OSlOlSO,

Ho aggiunto un esempio dei dati nella domanda - forse se ciò ha causato l'errore? Ma ne dubito.
OSlOlSO,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.