r - 模拟数据并将缺失值随机添加到数据框

标签 r simulation missing-data data-manipulation imputation

我如何在模拟数据框中随机添加缺失值到某些列或每列(比如每列随机缺失约 5%),此外,是否有更有效的方法来模拟具有连续列和因子列的数据框?

 #Simulate some data
 N <- 2000
 data <- data.frame(id = 1:2000,age = rnorm(N,18:90),bmi = rnorm(N,15:40),
     chol = rnorm(N,50:350), insulin = rnorm(N,2:40),sbp = rnorm(N, 50:200),
               dbp = rnorm(N, 30:150), sex = c(rep(1, 1000), rep(2, 1000)), 
               smoke = rep(c(1, 2), 1000), educ = sample(LETTERS[1:4]))


 #Manually add some missing values
 data <- data %>%
                    mutate(age = "is.na<-"(age, age <19 | age >88),
                    bmi = "is.na<-"(bmi, bmi >38 | bmi <16),
                    insulin = "is.na<-"(insulin, insulin >38),
                    educ = "is.na<-"(educ, bmi >35))

最佳答案

我认为最好的解决方案是为此使用mice 包。这是一个专门用于插补的 R 包。它还有一个名为 amputate 的函数,用于将丢失的数据引入 data.frame。

ampute - Generate Missing Data For Simulation Purposes This function generates multivariate missing data in a MCAR, MAR or MNAR manner.

此解决方案的优点是您可以设置多个参数来模拟丢失的数据。

ampute(data, prop = 0.5, patterns = NULL, freq = NULL, mech = "MAR",
  weights = NULL, cont = TRUE, type = NULL, odds = NULL,
  bycases = TRUE, run = TRUE)

如您所见,您可以设置缺失值的百分比、缺失数据机制(MCAR 将是您选择的完全随机缺失)和其他几个参数。该解决方案也非常干净,因为它只有 1 行代码。

关于r - 模拟数据并将缺失值随机添加到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528719/

相关文章:

java - 通过 ID 引用对象? ( java )

c - 非标准节点信息问题(XPath、C代码)

python - Python 中 Google Analytics 数据的数据插补

r - ggplot2 中具有预定义概率值的直方图

r - 添加每个因素水平的总计汇总行

r - 在 R 中使用 lapply 生成具有不同参数的随机数

php - 在设计期间测量 MySQL 数据库性能

r - StreamR、filterStream立即结束

r - 如何使用 ggplot2 在直方图条上显示百分比标签

SQL - 自事件发生后的衰减时间然后在下一个事件重新开始