R语言 计算MICE数据集中的频率

hfsqlsce  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(159)

我用一个示例数据集,例如:MTCARS

data(mtcars)
    library(mice)
    imp <- mice(mtcars,
                seed=123,
                m=5,
                maxit=10)
  • 假设我想计算disp、hp和其他变量的汇总均值。我该怎么做?如何计算合并频率?
  • 如果我想进行合并t检验或卡方检验(例如vsam),我应该使用什么代码?我应该使用“with()”吗?有人可以写一个例子吗?我遇到了麻烦,因为这是我第一次使用“with()”
wnrlj8wa

wnrlj8wa1#

R中的小鼠包提供了处理缺失数据的多重插补。为了从多重插补数据集估计参数,如平均值,我们必须考虑合并结果。这是为了确保在分析中考虑插补的不确定性。
要计算R中插补数据集的合并平均值或任何其他描述性统计量,可以使用mice::pool()函数。
下面是一个如何对变量“disp”和“hp”执行此操作的示例:

# install.packages("mice")  # uncomment if you haven't installed the package
  library(mice)
  
  # Use mtcars as the example dataset
  data(mtcars)
  
  # Impute the data with mice
  imp <- mice(mtcars, seed=123, m=5, maxit=10)
  
  # Generate the pooled mean
  pooled_results <- pool(imp)
  
  # Print the pooled mean for "disp" and "hp"
  print(pooled_results$analyses$disp)
  print(pooled_results$analyses$hp)

至于使用插补数据集进行假设检验(如t检验或卡方检验),您可以使用mice::with()函数。此函数允许您对每个插补数据集执行操作,然后将结果合并在一起。
以下是“am”和“vs”的合并t检验的示例:

# Conduct the t-tests
  t_test_results <- with(imp, t.test(am ~ vs))
  
  # Pool the results
  pooled_t_test <- pool(t_test_results)
  
  # Print the pooled result
  print(pooled_t_test)

请注意,在执行统计检验之前,最好始终检查统计检验的假设,并谨慎解释结果,因为多重插补并不是缺失数据的万灵药。事实上,如果使用不当,它可能会引入偏见。
截至2021年9月我的知识截止日期,mice包中没有用于合并频率的函数。您可能需要分别计算每个插补数据集的频率,然后合并结果。

nhaq1z21

nhaq1z212#

首先,mtcars不是用于填补示例的好数据集,因为mtcars不包含NA值。例如,我将使用mice包中的nhanes
您可以使用Heyman和Eekhout的 Applied Missing Data Analysis 中的语法。Chapter 5 describes how to pool means and standard deviations。你可以编辑Heyman和Eekhout的代码,使用table而不是mean来获取频率。我已经做了这些编辑,并创建了一个名为mice_func()的函数,它可以很容易地做到这一点。

library(mice); library(dplyr)
data("nhanes")
set.seed(123)
myimp <- mice(nhanes, seed = 123, m = 5, maxit = 10, printFlag = FALSE)
myvs <- c("age", "bmi", "chl")

mice_func <- function(imp, vs){
  
  impdat <- mice::complete(imp, action = "long", include = FALSE)
  
  z <- lapply(as.list(vs), function(x){
    x = as.name(x)
    pool_freq <- with(impdat, by(impdat, .imp, function(y) c(
      table(y[[x]])
    )))
    Reduce("+", pool_freq)/length(pool_freq)
  }) %>%
    setNames(as.list(vs))
  
  return(z)
}

mice_func(myimp, myvs)

计算t检验等也包括在第5章。

# Conduct an independent t-test via lm in each imputed dataset
fit.t.test <- with(data = myimp, exp = lm(age ~ bmi + chl))
t.test.estimates <- pool(fit.t.test)
summary(t.test.estimates)

相关问题