Рассмотрим следующий код 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
, который привел к подобным результатам.
ОБНОВЛЕНИЕ Амелия прекрасно работает из коробки. Тем не менее, было бы интересно узнать, чего мне не хватает с ми / мышами.
> 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
Извините за форматирование, но я думаю, что это лучшее, что я мог сделать в комментарии.
x
/ 2x
/4x