Вменение в R

Я новичок в языке программирования R. Я просто хотел знать, есть ли способ присвоить нулевые значения только одному столбцу в нашем наборе данных. Потому что все команды и библиотеки вменения, которые я видел, вменяют нулевые значения всего набора данных.


person Mehrdad Rohani    schedule 29.10.2012    source источник
comment
Это очень широкий вопрос в его нынешнем виде. Пожалуйста, приведите некоторые примеры данных и то, что вы пробовали (например, все команды и пакеты импуации, которые вы рассмотрели).   -  person mnel    schedule 29.10.2012


Ответы (3)


Вот пример использования пакета Hmisc и impute

library(Hmisc)
DF <- data.frame(age = c(10, 20, NA, 40), sex = c('male','female'))

# impute with mean value

DF$imputed_age <- with(DF, impute(age, mean))

# impute with random value
DF$imputed_age2 <- with(DF, impute(age, 'random'))

# impute with the media
with(DF, impute(age, median))
# impute with the minimum
with(DF, impute(age, min))

# impute with the maximum
with(DF, impute(age, max))


# and if you are sufficiently foolish
# impute with number 7 
with(DF, impute(age, 7))

 # impute with letter 'a'
with(DF, impute(age, 'a'))

См. ?impute для получения подробной информации о том, как выполняется вменение.

person mnel    schedule 29.10.2012
comment
извините, но знаете ли вы какие-либо другие вменения, которые не вменяются средним и случайным значением? - person Mehrdad Rohani; 29.10.2012
comment
Если вы обновите свой вопрос, чтобы отразить то, что вы хотите и что вы пробовали ... - person mnel; 29.10.2012
comment
Также если вы читали файл справки для impute (как я предлагал!), Вы бы увидели, что вы можете передать функцию для вменения. - person mnel; 29.10.2012

Почему бы не использовать более сложные алгоритмы вменения, например мышей (множественное вменение по цепным уравнениям)? Ниже приведен фрагмент кода на R, который вы можете адаптировать к своему случаю.

library(mice)

#get the nhanes dataset
dat <- mice::nhanes

#impute it with mice
imp <- mice(mice::nhanes, m = 3, print=F)

imputed_dataset_1<-complete(imp,1)

head(imputed_dataset_1)

#     age  bmi hyp chl
# 1   1   22.5   1 118
# 2   2   22.7   1 187
# 3   1   30.1   1 187
# 4   3   24.9   1 186
# 5   1   20.4   1 113
# 6   3   20.4   1 184

#Now, let's see what methods have been used to impute each column
meth<-imp$method
#  age   bmi   hyp   chl
#"" "pmm" "pmm" "pmm"

#The age column is complete, so, it won't be imputed
# Columns bmi, hyp and chl are going to be imputed with pmm (predictive mean matching)

#Let's say that we want to impute only the "hyp" column
#So, we set the methods for the bmi and chl column to ""
meth[c(2,4)]<-""
#age   bmi   hyp   chl 
#""    "" "pmm"    "" 

#Let's run the mice imputation again, this time setting the methods parameter to our modified method
imp <- mice(mice::nhanes, m = 3, print=F, method = meth)

partly_imputed_dataset_1 <- complete(imp, 3)

head(partly_imputed_dataset_1)

#    age  bmi hyp chl
# 1   1   NA   1  NA
# 2   2 22.7   1 187
# 3   1   NA   1 187
# 4   3   NA   2  NA
# 5   1 20.4   1 113
# 6   3   NA   2 184
person Ahmedov    schedule 13.03.2017

Есть множество пакетов, которые могут сделать это за вас. (немного больше информации о данных может помочь предложить вам лучшие варианты)

Одним из примеров может быть использование пакета VIM.

В ней есть функция kNN (вменение k-ближайшего соседа). В этой функции есть опция переменная, где вы можете указать, какие переменные должны быть вменены.

Вот пример:

library("VIM")
kNN(sleep, variable = c("NonD","Gest"))

Набор данных сна, который я использовал в этом примере, поставляется вместе с VIM.

Если в ваших столбцах есть временная зависимость, которую вы хотите вменять, используя пакеты вменения временных рядов, это также может иметь смысл. В этом случае вы можете использовать, например, пакет imputeTS. Вот пример:

  library(imputeTS)
  na.kalman(tsAirgap)

Набор данных tsAirgap, используемый здесь в качестве примера, также поставляется с imputeTS.

person Steffen Moritz    schedule 11.11.2016