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

ael*_*hak 4 simulation r data-manipulation missing-data 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))
Run Code Online (Sandbox Code Playgroud)

sta*_*007 5

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

ampute - 生成用于模拟目的的缺失数据 该函数以 MCAR、MAR 或 MNAR 方式生成多元缺失数据。

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

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

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