Я новичок в языке программирования R. Я просто хотел знать, есть ли способ присвоить нулевые значения только одному столбцу в нашем наборе данных. Потому что все команды и библиотеки вменения, которые я видел, вменяют нулевые значения всего набора данных.
Вменение в R
Ответы (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
для получения подробной информации о том, как выполняется вменение.
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
Есть множество пакетов, которые могут сделать это за вас. (немного больше информации о данных может помочь предложить вам лучшие варианты)
Одним из примеров может быть использование пакета VIM.
В ней есть функция kNN (вменение k-ближайшего соседа). В этой функции есть опция переменная, где вы можете указать, какие переменные должны быть вменены.
Вот пример:
library("VIM")
kNN(sleep, variable = c("NonD","Gest"))
Набор данных сна, который я использовал в этом примере, поставляется вместе с VIM.
Если в ваших столбцах есть временная зависимость, которую вы хотите вменять, используя пакеты вменения временных рядов, это также может иметь смысл. В этом случае вы можете использовать, например, пакет imputeTS. Вот пример:
library(imputeTS)
na.kalman(tsAirgap)
Набор данных tsAirgap, используемый здесь в качестве примера, также поставляется с imputeTS.