R

為什麼這種多重插補質量低?

  • October 18, 2014

考慮以下 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不是實現我想要的正確方法的情況(也許應該使用predict代替),所以我願意接受建議。

我還嘗試了與 類似的方法mice,這導致了類似的結果。

更新 Amelia開箱即用。不過,知道 mi / mouse 缺少什麼仍然會很有趣。

鑑於您使用六個案例 [記錄] 和三個變量,您的插補質量將非常低。

要了解為什麼會出現這種情況,請記住多重插補是通過用合理的插補值填充缺失值來實現的。這些估算值的計算公式為單獨的數據集(我將在此答案的後面部分返回這些估算值的派生方式)。不同數據集的估算值會略有不同。

因此,給定一個感興趣的統計量(例如,平均值、回歸係數等),可以使用用於估計平均標準誤差的數據集內數據集(我將其稱為插補內方差的數量,或)程度各地不同數據集(我稱之為插補間方差的量,或)。

插補質量之間的關係,, 和

可以使用插補內方差和插補間方差推導出統計量的估算估計受缺失信息影響的程度的估計。當然,丟失的信息越多,插補的質量就越差。因缺失而丟失的信息的估計被標記 , 並由以下公式給出:

在這個公式中是插補間方差的比率到插補內方差:

因此,高值導致高值,這反過來將導致高值. 高價值反過來,表示由於丟失數據和質量較差的插補而丟失了更多信息。

在公式中也是一個函數和. 具體來說,估計為

因此,除了增加插補間方差與插補內方差的比率外,還增加了插補間方差與插補內方差的比率。也減少. 這將導致更高的價值,表明更多信息因缺失而丟失,且插補質量較差。

總之,插補間方差的值較高從兩個方面影響插補質量:

  1. 較高的值增加插補之間的方差與插補內的方差之比,降低插補質量
  2. 較高的值降低可用自由度,降低插補質量

病例數與病例數的關係

給定兩個相似的數據集,案例數量較少的數據集將具有較大的插補間方差.

這會發生,因為正如我上面所描述的,插補間方差是通過計算感興趣的統計量來計算的每個內估算數據集和計算程度各不相同數據集。如果給定數據集的案例數量較多,但缺失值的數量與另一個相似,則較小比例的值將在每個數據集中自由變化估算數據集,這意味著在跨估算數據集。

因此,一般而言,增加案例數量(或更準確地說,減少缺失值的比例)將提高插補質量。

變量數與變量之間的關係

給定兩個相似的數據集,具有大量變量的數據集將具有較小的插補間方差,只要這些額外的變量能提供有關缺失值的信息。

之所以會發生這種情況,是因為通常情況下,通過使用來自其他變量的信息來“填充”給定變量的缺失值,以生成缺失值的合理估計(如何生成這些估計的具體細節將根據 MI 實現而有所不同)你正在使用)。額外變量形式的更多信息將導致更穩定的估算值,從而減少感興趣的統計量的變化跨越每一個估算數據集。

因此,一般而言,增加數據集中可用變量的數量將提高插補質量,只要這些額外的變量能夠提供有關缺失值的信息。

參考

魯賓,DB (1996)。18 年以上後的多重插補。 美國統計協會雜誌,91,473-489。

謝弗,JL(1999)。多重插補:入門。 醫學研究中的統計方法,8、3-15。

引用自:https://stats.stackexchange.com/questions/120521

comments powered by Disqus