Panel çalışmasından bir zaman serisinde eksik sayı verileri için çoklu gösterim


9

Bir panel veri etüdünden eksik verilerin ithalatı ile ilgili bir sorunu ele almaya çalışıyorum ('panel veri etüdünü' doğru bir şekilde kullanıp kullanmadığımı bilmiyorum - bugün öğrendiğim gibi.) 2003 yılı için toplam ölüm sayısı verilerim var 2009 yılına kadar tüm aylar, kadın ve erkek, 8 farklı bölge ve 4 yaş grubu için.

Veri çerçevesi şuna benzer:

         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

2007 ve 2008 yıllarına yayılan 10 ay boyunca, tüm ilçelerden toplam ölümlerin bir kısmı kaydedilmedi. Birden fazla imputation yöntemi ile bu eksik değeri tahmin etmeye çalışıyorum. Genelleştirilmiş Doğrusal Modeller veya SARIMA modelleri kullanılır.

En büyük sorunum yazılım kullanımı ve kodlama. Bu gibi küçük gruplara veri ayıklamak istiyorum Stackoverflow, bir soru sordum:

         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

Gidiyor

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

Ama birisi sorumu buraya getirmeyi tercih etmemi önerdi - belki de bir yönlendirme isteyin? Şu anda bu verileri R'ye uygun bir zaman serisi / panel çalışması amelia2olarak giremiyorum. Nihai amacım , bu verileri ve paketi işlevleriyle birlikte TotalDeaths, verilerin olduğu 2007 ve 2008'de belirli aylar boyunca eksiklik anlamına gelmesi. eksik.

Herhangi bir yardım, bunun nasıl yapılacağı ve belki de bu sorunun nasıl çözüleceğine dair öneriler minnetle takdir edilecektir.

Bu yardımcı olur, ben Clint Roberts doktora yaptıklarını benzer bir yaklaşım takip etmeye çalışıyorum Tez .

DÜZENLE:

@Matt tarafından önerilen şekilde 'zaman' ve 'grup' değişkenini oluşturduktan sonra:

> 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

Fark ettiğiniz gibi, aslında 'Doğal' ve 'Doğal olmayan' daha fazla ayrıntı var.

Yanıtlar:


10

AmeliaVerileri çarpıtmak için paketi kullanabilirsiniz (tam açıklama: Yazarlarından biriyim Amelia). Paket vinyet eksik verileri impute nasıl kullanılacağını uzun bir örnek vardır.

Aylık düzeyde gözlemlenen ilçe-cinsiyet-yaş Grubu olan birimleriniz var gibi görünüyor. İlk olarak, her bir birim türü için bir faktör değişkeni yaratırsınız (yani her bölge-cinsiyet-yaş Grubu için bir seviye). Buna diyelim group. Daha sonra, zaman için bir değişkene ihtiyacınız olacaktır, bu da Ocak 2003'ten bu yana geçen ay sayısıdır. Bu nedenle, bu değişken 2004 yılının Ocak ayında 13 olacaktır. Bu değişkeni çağırın time. Amelia, aşağıdaki komutlarla zaman trendlerine göre impute etmenize izin verecektir:

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

tsVe csargümanlar sadece zaman ve birim değişkenleri belirtir. splinetimeArgüman setleri nasıl esnek eksik verileri impute kullanılmalıdır zaman durmuş olmalıdır. Burada 2, impütasyonun kuadratik bir zaman fonksiyonu kullanacağı, ancak daha yüksek değerlerin daha esnek olacağı anlamına gelir. Buradaki intercsargüman, Amelia'ya her bir bölge-cinsiyet-yaş Grubu için ayrı bir zaman eğilimi kullanmasını söyler. Bu modele birçok parametre ekler, bu yüzden sorun yaşarsanız, FALSEhata ayıklamayı denemek için ayarlayabilirsiniz .

Her durumda, bu, verilerinizdeki zaman bilgisini kullanarak sizi uyarır. Eksik veriler sıfıra bağlı olduğu için, boundsargümanı bu mantıksal sınırlara emputasyonları zorlamak için kullanabilirsiniz .

EDIT: Grup / zaman değişkenleri oluşturma

Zaman değişkeni oluşturmak en kolay yöntem olabilir, çünkü 2002'den itibaren saymanız yeterlidir (verilerinizdeki en düşük yıl olduğu varsayılarak):

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

Grup değişkeni biraz daha zordur, ancak bunu yapmanın hızlı bir yolu paste komutunu kullanmaktır:

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

Bu değişkenler oluşturulduğunda, orijinal değişkenleri gösterimden kaldırmak istersiniz. Bunu yapmak için idvarsargümanı kullanabilirsiniz :

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

Yanıtınız için çok teşekkür ederim! Biraz oynuyorum Ameliaama bundan vazgeçtim (bundan önce). Daha önce skeç gördüm (ama bir şekilde kaybettim!) Sadece hızlı bir göz attı ve içinden geçecek. Şimdi sahip olduğum bir sorun, groupve timedeğişkenlerinin nasıl oluşturulacağından emin olmam . (Onları zaman serisi analizi / tahmini için oluşturmaya çalıştım, ama etrafında bir döngü var.) Eminim ki bu vigette - bu yüzden mücadele edersem size geri döneceğim. Tekrar teşekkürler :)
OSlOlSO

Yararlı olduğuna sevindim. Bu değişkenlerin nasıl oluşturulacağına dair bir örnek ekledim. Umarım yardımcı olur.
Matt Blackwell

@Matt örnekleri için teşekkürler. Bazı tuhaf nedenlerle "ts = time" ve "cs = group" kullandığımda hata verdi. Ben sadece "zaman" ve "grup" ilgili sütun numarası ile değiştirin ve sonra çalıştı. 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

Sınırlar için vinyeti takip ettim ve kullanarak sınırlar oluşturdum: bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)Temelde sadece rastgele bir üst sınır olarak 500 seçtim. Sadece üçüncü bir sütun vermemeye çalıştım, ancak üçüncü sütunu Ameliagerektirdiği konusunda uyardım. Belki de sadece bir alt sınır belirlemenin bir yolu var mı?
OSlOlSO

Sorudaki verilere bir örnek ekledim - belki de bu Hataya neden olduysa? Ama bundan şüpheliyim.
OSlOlSO
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.