【问题标题】:Correlation matrix for subset of columns from a multiple imputation dataset多重插补数据集中列子集的相关矩阵
【发布时间】:2016-07-13 07:12:56
【问题描述】:

我正在使用R 中的mice 包对具有大量缺失的数据集进行多重插补。原始数据集中的一些变量对于插补过程和以后的分析很重要。但是,我想使用cor() 创建一个相关矩阵,而不包括一些变量。通常,对于一个简单的数据集xcor(x[,3:7]) 将产生第 3 列到第 7 列的相关矩阵。如果x 是由mice 函数创建的mids 对象,通常会使用with 来执行重复分析以创建mira 对象,然后使用pool 创建mipo 池化结果对象。但是,with 的第二个元素应该是引用数据集列的公式,而不是进入cor() 的输入类型。如果xmids 对象,则cor(x[,3:7]) 不起作用,with(x, cor(x[,3:7])) 也不起作用。

如何为多重插补数据集中的变量子集创建合并相关矩阵?

#reproducible example
x = data.frame(matrix(rnorm(100),10,10))  #create random data
x[9:10,] = NA #add missingness
x.mice = mice(x)  #make imputed data set
cor(x.mice[,3:7]) #doesn't work
with(x.mice, cor(x.mice[,3:7])) #doesn't work
with(x.mice[,3:7], cor()) #doesn't work

【问题讨论】:

  • 请考虑在您的问题中添加reproducible example:这将对我们有很大帮助。
  • 好点,文森特·吉列莫特。我在问题中添加了一个。谢谢。
  • 如果你命名数据中的列,它可能更容易使用。所以在相关位置使用x = setNames(x, letters[1:10])(在调用鼠标之前)然后这应该可以工作with(x.mice, cor(cbind(a,b)))
  • 但是作为另一个想法,由于没有 pool 方法(除非你使用 lm 我猜),它可能更容易循环通过 complete 数据集... @ 987654346@
  • 为了合并结果,我只取 mean 矩阵,巧合的是,它也是一个相关矩阵。如果所有矩阵都在一个列表L 中,则执行Reduce("+",L)/5 以获得池化相关矩阵。

标签: r r-mice


【解决方案1】:

我也遇到了同样的问题。新添加的包“miceadds”为mice 包添加了非常有用的功能。

具体来说,对于您的问题,请查找函数 micombine.cor,该函数对多重插补的相关性和协方差进行推断 数据集。

例如:

library(missForest)
library(mice)
library(miceadds)

#Get the data
data <- iris

#introduce missings
iris.mis <- prodNA(iris, noNA = 0.1)


#imputedata
imputed     <-mice(iris.mis, m = 5, maxit = 5, method = "pmm")

#correlations for the first three variables (package miceadds) 
correlations<- miceadds::micombine.cor(mi.res=iris.mis, variables = c(1:3))

#and because i am a psychologist and don't like scientific coding... 
old_school<-format(correlations$p, scientific=FALSE)
correlations["p_value"] <- NA; correlations$p_value <- old_school; 
correlations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2011-08-20
    • 2014-01-30
    • 2020-03-09
    相关资源
    最近更新 更多