2013-07-10 2 views
0

Я хотел бы ввести недостающие значения в набор данных, основанный на распределении других значений переменной.Вменение отсутствующих значений

Представьте себе, что 30% значений = 1, 20% = 2 и 50% = 3, в сущности, я хотел бы сделать следующее:

impute(var,1) # for 30 % of the NA occurrences # 
impute(var,2) # for 20 % of the NA occurrences # 
impute(var,3) # for 50 % of the NA occurrences # 

Может кто-нибудь помочь?

Джон

ответ

2

Если я правильно понимаю, что вы хотите:

var[is.na(var)] <- sample(1:3, sum(is.na(var)), replace=TRUE, prob=c(0.3,0.2,0.5)) 
+0

Это возвращает значения 2,1,2,2,1,2,2,1,2,2 и следующее предупреждение: В var [is.na (var)] <- sample (1: 3, replace = TRUE, prob = c (0.3: Количество элементов для замены не кратно замещающей длины – user2568648

+0

@ user2568648 См. Edit. – James

+0

Спасибо, Джеймс, похоже, что это работает некорректно. Запуск кода 5 раз I получаем 20 x 1, 9 x 2 и 21 x 3, что соответствует вероятностям p (1) = 0,4, p (2) = 0,18 и p (3) = 0,42. Возможно, при достаточно большом количестве повторений вероятности будут сходиться к желаемому уровни. – user2568648

2

Я хотел бы вменить пропущенные значения в наборе данных на основе распределения остальных значений переменной.

Я очень доволен pamr пакета по Tibshirany. Он основывает вменение на k ближайших соседей недостающих точек данных. Просто позвоните:

imputed.matrix <- pamr.knnimpute(list(x==matrix.with.missing.data))[['x']] 

обычно работает нормально.

Отметьте, что pamr.knnimpute не является детерминированным; типичная корреляция по всем условным парам составляет> 0,9.

Смежные вопросы