面板研究中时间序列中缺失计数数据的多重估算


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包及其功能来估算TotalDeaths2007年和2008年某些月份的丢失情况,其中失踪。

我们将不胜感激任何帮助,如何做到这一点,以及关于如何解决该问题的建议。

如果这有帮助,我将尝试采用类似于克林特·罗伯茨(Clint Roberts)在其博士论文中所做的方法。

编辑:

在按照@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

如您所见,实际上还有“自然”和“非自然”的更多细节。

Answers:


10

您可以使用该Amelia数据包估算数据(完整披露:我是的作者之一Amelia)。该包晕影对如何用它来填充缺失数据的扩展例子。

好像您在每月级别上观察到的是district-gender-ageGroup的单位。首先,为每种类型的单位创建一个因子变量(也就是说,为每个district-gender-ageGroup创建一个因子变量)。我们称之为group。然后,您将需要一个时间变量,该时间可能是自2003年1月以来的月数。因此,该变量在2004年1月将为13。将其称为time。Amelia允许您使用以下命令根据时间趋势进行估算:

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

tscs参数只是表示时间和单位的变量。该splinetime参数设置时间用于插补丢失数据的灵活性。在这里,2表示插补将使用时间的二次函数,但较高的值将更灵活。intercs这里的参数告诉Amelia为每个district-gender-ageGroup使用单独的时间趋势。这会为模型添加许多参数,因此,如果遇到麻烦,可以将其设置FALSE为尝试调试。

无论如何,这将使您利用数据中的时间信息进行估算。由于缺少的数据的边界为零,因此您可以使用bounds参数将插补强制为这些逻辑边界。

编辑:如何创建组/时间变量

时间变量可能是最容易创建的,因为您只需要从2002年开始计数(假设这是数据中最低的年份):

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

group变量稍微难一些,但是一种快速的方法是使用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了一段时间,但放弃了(在此之前)。我以前看过该小插图(但是以某种方式丢失了它!)只是快速浏览了一下,并将逐步通过。我现在遇到的一个问题是,我不确定如何创建grouptime变量。(我尝试创建它们以进行时间序列分析/预测,但周围有一个循环。)我确定它在vigette中-因此,如果遇到麻烦,我会尽快与您联系。再次感谢:)
OSlOlSO 2011年

很高兴这很有用。我添加了一个如何创建这些变量的示例。希望能有所帮助。
马特·布莱克威尔

感谢@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.
OSlOSO 2011年

对于边界,我遵循了晕影,并使用以下方法创建了边界:bds <- matrix(c(6, 7, 8,0, 0,0, 500, 500,500), nrow = 3, ncol = 3)我基本上只是选择500作为随机上限。我确实尝试过不给出第三列,但Amelia警告说它需要第三列。也许有一种方法可以只具体规定一个下限?
OSlOSO

我在问题中添加了数据示例-也许这是否导致错误?但我对此表示怀疑。
OSlOSO 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.