为什么这种多重插补质量低下?


9

考虑以下R代码:

> data <- data.frame(
            a=c(NA,2,3,4,5,6),b=c(2.2,NA,6.1,8.3,10.2,12.13),c=c(4.2,7.9,NA,16.1,19.9,23))
> data
   a     b    c
1 NA  2.20  4.2
2  2    NA  7.9
3  3  6.10   NA
4  4  8.30 16.1
5  5 10.20 19.9
6  6 12.13 23.0

如您所见,我对数据进行了大致的设计c = 2*b = 4*a。因此,我希望缺少的值在左右a=1, b=2, c=12。所以我进行了分析:

> imp <- mi(data)
Beginning Multiple Imputation ( Sat Oct 18 03:02:41 2014 ):
Iteration 1 
 Chain 1 : a*  b*  c*  
 Chain 2 : a*  b*  c*  
 Chain 3 : a*  b*  c*  
Iteration 2 
 Chain 1 : a*  b   c   
 Chain 2 : a*  b*  c*  
 Chain 3 : a   b*  c   
Iteration 3 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a*  b*  c*  
Iteration 4 
 Chain 1 : a   b   c   
 Chain 2 : a   b*  c   
 Chain 3 : a*  b   c   
Iteration 5 
 Chain 1 : a   b   c*  
 Chain 2 : a   b*  c   
 Chain 3 : a   b*  c   
Iteration 6 
 Chain 1 : a*  b   c*  
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 7 
 Chain 1 : a   b   c   
 Chain 2 : a   b*  c   
 Chain 3 : a   b   c*  
Iteration 8 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b*  c*  
Iteration 9 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c*  
 Chain 3 : a   b   c   
Iteration 10 
 Chain 1 : a   b*  c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 11 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 12 
 Chain 1 : a   b   c   
 Chain 2 : a*  b   c   
 Chain 3 : a   b   c   
Iteration 13 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c*  
 Chain 3 : a   b   c*  
Iteration 14 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 15 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c*  
Iteration 16 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b*  c   
Iteration 17 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 18 
 Chain 1 : a   b   c*  
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 19 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c*  
Iteration 20 
 Chain 1 : a   b   c*  
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 21 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 22 
 Chain 1 : a   b   c*  
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 23 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 24 
 Chain 1 : a   b   c*  
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 25 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 26 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 27 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 28 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 29 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
mi converged ( Sat Oct 18 03:02:45 2014 )
Run 20 more iterations to mitigate the influence of the noise...
Beginning Multiple Imputation ( Sat Oct 18 03:02:45 2014 ):
Iteration 1 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 2 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 3 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 4 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 5 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 6 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 7 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 8 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 9 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 10 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 11 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 12 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 13 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 14 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 15 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 16 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 17 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 18 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 19 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Iteration 20 
 Chain 1 : a   b   c   
 Chain 2 : a   b   c   
 Chain 3 : a   b   c   
Reached the maximum iteration, mi did not converge ( Sat Oct 18 03:02:48 2014 )

最后观察完成的数据集:

> mi.completed(imp)
[[1]]
  a     b    c
1 2  2.20  4.2
2 2  2.20  7.9
3 3  6.10 16.1
4 4  8.30 16.1
5 5 10.20 19.9
6 6 12.13 23.0

[[2]]
  a     b    c
1 2  2.20  4.2
2 2  6.10  7.9
3 3  6.10  7.9
4 4  8.30 16.1
5 5 10.20 19.9
6 6 12.13 23.0

[[3]]
  a     b    c
1 2  2.20  4.2
2 2  2.20  7.9
3 3  6.10  7.9
4 4  8.30 16.1
5 5 10.20 19.9
6 6 12.13 23.0

如您所见,估算值不是我期望的。实际上,它们看起来像是单次插补的结果,因为缺失值似乎是从相邻记录中获取的。

我想念什么?

我应该指出,我在统计学上的“知识”主要限于我大约14年前参加的入门课程中模糊地记得的内容。我只是在寻找一种简单的方法来估算缺失的值,它不一定是最优化的方法,但确实需要某种意义(我无法理解这些结果)。很有可能mi不是实现我想要的目标的正确方法(也许应该使用预测),因此我愿意提出建议。

我还尝试了与的类似方法mice,从而得到了相似的结果。

更新 Amelia开箱即用。知道我/ mi / mouse缺少的东西还是很有趣的。


1
您通常会尝试使用多重插补吗?如果没有更多上下文,我很难回答这个问题。[由于您只使用三个变量和六个记录,因此插补的质量很低,我也不感到惊讶]
Patrick S. Forscher 2015年

@ PatrickS.Forscher你说得对。我刚刚尝试了100条记录进行类似的测试,结果符合我的预期。请给出一个答案,以便我接受。如果您可以为成功估算指定一些最低限度的标准,那就太好了。
t0x1n15年

您如何看待以下结果?> mi.completed(imp) [[1]] a b c 1 0.289 2.20 4.2 2 2.000 2.57 7.9 3 3.000 6.10 12.7 4 4.000 8.30 16.1 5 5.000 10.20 19.9 6 6.000 12.13 23.0 [[2]] a b c 1 0.603 2.20 4.2 2 2.000 5.82 7.9 3 3.000 6.10 13.4 4 4.000 8.30 16.1 5 5.000 10.20 19.9 6 6.000 12.13 23.0 [[3]] a b c 1 1.05 2.20 4.2 2 2.00 4.18 7.9 3 3.00 6.10 12.0 4 4.00 8.30 16.1 5 5.00 10.20 19.9 6 6.00 12.13 23.0对格式感到抱歉,但是我想这是我在评论中所能做的最好的事情。
Aleksandr Blekh 2015年

阿米莉亚二世(Amelia II)明确用于横截面时间序列的多重估算(又名面板研究)。MICE用于非横断面时间序列数据(或者至少,MICE对于此类时间序列产生较差的插补,请参见Honaker,J.和King,G.(2010)。如何处理时间序列交叉中的缺失值该怎么办截面数据。美国政治科学杂志,54(2):561–581。)
亚历克西斯

@AleksandrBlekh我也不喜欢他们,我希望有更接近的地方x/ 2x/4x
t0x1n

Answers:


13

假设您使用的是六个案例[记录]和三个变量,则插补的质量将很低。

要了解为什么会这样,请记住多重插补是通过用合理的插补值填充缺失值来实现的。这些估算值在m单独的数据集(我将在稍后的答案中返回这些推算值的导出方式)。估算值因数据集的不同而略有不同。

因此,给定统计量的兴趣 q (例如平均值,回归系数等),则可以使用 m 估计平均标准误差的数据集 qm 数据集(我称其为输入内方差的数量,或 U¯在何种程度上qm 数据集(我称其为投入量之间的差异,或者 B)。

插补质量之间的关系, BU¯

一个可以使用输入内方差 U¯ 和输入之间的方差 B得出对估计数量的统计估算受丢失信息影响的程度的估算。当然,丢失的信息越多,插补的质量越差。丢失信息丢失的估计值标记为 γ,并由以下公式给出:

γ=r+2df+3r+1

r 该公式中的是投入量之间方差的比率 B 输入内方差 U¯

r=(1+1m)BU¯

因此, B 导致高价值 r,这将导致较高的 γ。很高的价值γ反之,则表示由于缺少数据和质量估算欠佳而丢失的更多信息。

df 在公式中 γ 也是一个功能 BU¯。特别,df

df=(m1)(1+mU¯(m+1)B)2

因此,除了增加输入间方差与输入内方差之比外,还要增加 B 也减少 df。这将导致更高的价值γ,表示更多信息因丢失和质量估算欠佳而丢失。

总而言之,较高的输入间差异值 B 影响插补质量的方式有两种:

  1. 更高的价值 B 增加插补之间的方差与插补中的方差的比率,降低插补质量
  2. 更高的价值 B 降低可用自由度,降低插补质量

案件数与 B

给定两个在其他方面相似的数据集,则病例数较少的数据集的输入间差异较大 B

发生这种情况的原因是,如上所述,通过计算感兴趣的统计量来计算输入之间的方差 q 在每个 m 估算数据集并计算 q 在每个 m数据集。如果给定数据集的案例数量较多,但缺失值的数量与其他数据集相似,则较小的值比例可以在每个m 估算数据集,这意味着 q 估算的数据集。

因此,通常情况下,增加案例数量(或更准确地说,减少缺失值的比例)将提高插补质量。

变量数量与 B

给定两个在其他方面相似的数据集,具有较大数量变量的数据集的输入间差异较小 B,只要这些额外的变量可提供有关缺失值的信息。

之所以会发生这种情况,是因为通常会使用其他变量的信息来“填充”给定变量的缺失值,以生成对缺失值的合理估计(这些估计如何生成的具体细节将根据MI实施而有所不同。您正在使用)。以额外变量的形式提供的更多信息将导致更稳定的估算值,从而减少感兴趣的统计量的变化q 跨越每个 m 估算数据集。

因此,通常,只要那些额外的变量可提供有关缺失值的信息,增加数据集中可用变量的数量将提高插补质量。

参考文献

鲁宾,DB(1996)。18年以上后进行多次插补。 美国统计协会杂志,91,473-489。

Schafer,JL(1999)。多重插补:底漆。 《医学研究中的统计方法》,第8卷,第3-15页。

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.