R中的估算

时间:2012-10-29 01:18:57

标签: r imputation

我是R编程语言的新手。我只是想知道有没有办法在我们的数据集中计算只有一列的空值。因为我看过所有的插补命令和库,所以会估算整个数据集的空值。

3 个答案:

答案 0 :(得分:14)

以下是使用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,了解有关如何实施估算的详细信息

答案 1 :(得分:1)

为什么不使用更复杂的插补算法,例如鼠标(链式方程式的多重插补)?下面是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

答案 2 :(得分:0)

有很多套餐可以帮到你。 (关于数据的更多信息可以帮助建议您最好的选择)

一个例子可以使用 VIM 包。

它有一个名为 kNN 的函数(k-最近邻估算) 此函数有一个选项变量,您可以在其中指定哪些变量应该被估算。

以下是一个例子:

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

本例中使用的睡眠数据集附带VIM。

如果您的列中存在一些时间依赖性,您希望使用时间序列估算包,也可能有意义。在这种情况下,您可以使用例如 imputeTS 包。 这是一个例子:

  library(imputeTS)
  na.kalman(tsAirgap)

此处使用的tsAirgap数据集也与imputeTS一起出现。