来自面板研究的时间序列中缺失计数数据的多重插补

机器算法验证 r 时间序列 面板数据 数据插补
2022-02-27 21:23:34

我正在尝试解决一个问题,该问题涉及面板数据研究中缺失数据的估算(不确定我是否正确使用了“面板数据研究” - 正如我今天所知道的那样。)我有 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。我的最终目标是使用这些数据及其功能的包来估算2007 年和 2008 年某些月份amelia2的缺失,其中数据是TotalDeaths失踪。

任何帮助,如何做到这一点,也许关于如何解决这个问题的建议将不胜感激。

如果这有帮助,我将尝试采用与 Clint Roberts 在他的博士论文中所做的类似的方法。

编辑:

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

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

1个回答

您可以使用该Amelia包来估算数据(完全披露:我是 的作者之一Amelia)。vignette有一个扩展示例,说明如何使用它来估算丢失的数据。

似乎您有按月观察到的地区-性别-年龄组的单位。首先,您为每种类型的单元创建一个因子变量(即,每个区域-性别-年龄组一个级别)。让我们称之为group. 然后,您需要一个时间变量,它可能是自 2003 年 1 月以来的月数。因此,该变量在 2004 年 1 月将是 13。将此变量称为timeAmelia 将允许您使用以下命令根据时间趋势进行估算:

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

和参数仅表示时间tscs单位变量。splinetime论点设置了使用时间来估算缺失数据的灵活性。这里,a 2 表示插补将使用时间的二次函数,但更高的值将更灵活。这里的intercs论点告诉 Amelia 为每个地区-性别-年龄组使用单独的时间趋势。这给模型增加了很多参数,所以如果你遇到麻烦,你可以设置这个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"))