パネル研究からの時系列の欠落カウントデータの複数の代入


9

私は、パネルデータスタディから欠落しているデータの帰属に対処する問題に取り組んでいます(「パネルデータスタディ」を正しく使用しているかどうかはわかりません-今日学んだとおりです)。2003年の総死亡数データが​​あります。 2009年まで、8つの異なる地区と4つの年齢グループのすべての月(男性と女性)。

データフレームは次のようになります。

         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年から2008年にかけての10か月の間に、すべての地区での合計死亡者数の一部は記録されませんでした。これらの欠損値を多重代入法で推定しようとしています。一般化線形モデルまたはSARIMAモデルを使用します。

私の最大の問題は、ソフトウェアとコーディングの使用です。Stackoverflowについて質問しました。データを次のような小さなグループに抽出します。

         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

に行く

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

しかし、誰かが私の質問をここに持ってくるべきだと提案しました-おそらく方向を尋ねますか?現在、このデータを適切な時系列/パネル研究としてRに入力することはできません。私の最終的な目的は、このデータとamelia2その機能を備えたパッケージを使用してTotalDeaths、2007年と2008年の特定の月の欠落を補完することです。行方不明。

どんな助け、これを行う方法、そしておそらくこの問題に取り組む方法についての提案は、ありがたく感謝されます。

これが役立つ場合、私はクリントロバーツが博士論文で行ったのと同様のアプローチに従っています。

編集:

@Mattによって提案された「time」および「group」変数を作成した後:

> 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

お気づきのように、実際には「ナチュラル」と「不自然」の詳細があります。

回答:


10

Ameliaパッケージを使用してデータを偽装できます(完全な開示:私はの作成者の1人ですAmelia)。パッケージビネットは、欠落したデータを転嫁するためにそれを使用する方法の拡張例があります。

まるで、月次レベルで観察されたDistrict-gender-ageGroupのユニットがあるようです。まず、ユニットのタイプごとに因子変数を作成します(つまり、各District-gender-ageGroupに対して1つのレベル)。これを呼びましょうgroup。次に、時間の変数が必要になります。これは、おそらく2003年1月からの月数です。したがって、この変数は2004年1月では13になりますtime。この変数を呼び出します。アメリアでは、次のコマンドを使用して、時間の傾向に基づいて推定することができます。

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

引数は単に時間と単位の変数を表します。引数セットはどのように柔軟性の欠落したデータを転嫁するために使用される時間必要があります。ここで、2は、補完が時間の2次関数を使用することを意味しますが、値が大きいほど柔軟になります。ここでの議論は、アメリアに、地区別の性別年齢グループごとに個別の時間トレンドを使用するように指示します。これにより多くのパラメーターがモデルに追加されるため、問題が発生した場合は、これをに設定してデバッグを試行できます。tscssplinetimeintercsFALSE

いずれにせよ、これにより、データの時間情報を使用して代入が行われます。欠損データの境界はゼロであるため、bounds引数を使用して、これらの論理境界に代入を強制できます。

編集:グループ/時間変数の作成方法

2002年から数えるだけでよいので、時間変数を作成するのが最も簡単な場合があります(データで最も低い年を想定しています)。

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

グループ変数は少し難しいですが、それを行う簡単な方法は、pasteコマンドを使用することです。

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

これらの変数を作成したら、補完から元の変数を削除します。これを行うには、idvars引数を使用できます。

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

お返事ありがとうございます!私はAmelia少し遊んでいますが、あきらめました(これ以前)。私は以前にビネットを見たことがあります(しかし、どういうわけかそれを失いました!)ただそれを簡単に見て、それを完全に通り抜けます。私が今抱えている問題の1つは、groupおよびtime変数の作成方法がわからないことです。(時系列分析/予測のためにそれらを作成してみましたが、ループが発生しました。)きっとそれがビジェットにあると思います-もし私が苦労しているなら、あなたに連絡します。ありがとうございました:)
OSlOlSO 2011

便利です。これらの変数の作成方法の例を追加しました。お役に立てば幸いです。
Matt Blackwell、

@Mattの例をありがとう。奇妙な理由で、「ts = time」と「cs = group」を使用するとエラーが発生しました。「時間」と「グループ」をそれぞれの列番号に置き換えるだけで機能します。 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.
OSlSOSO 2011

境界については、ビネットに従って境界を作成しました。bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)基本的には、ランダムな上限として500を選択しました。私は3番目の列を指定しないように努めましたが、3番目の列がAmelia必要であることを警告しました。おそらく下限を特定する方法はありますか?
OS10SO

私は質問にデータの例を追加しました-おそらくこれがエラーを引き起こしたのですか?しかし、私はそれを疑います。
OSlSOSO 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.