R语言进行多重插补-基于R语言的mice包预测均值法

学术   2024-08-12 11:03   陕西  


目录

(1)理论介绍                                                                            

 (2)实践操作





引言

世界卫,精神卫生是指一种健康状态,在这种状态中,每个人都能够认识到自身潜力,能够适应正常的生活压力,能够有成效地工作,并能够为其居住的社区做出贡献。



1.理论介绍



预测平均值匹配 (Predictive mean matching,PMM)

在多重插补中,采用回归模型预测法是直接以回归预测值为插补值,而预测平均值匹配法与回归模型预测法类似,但并不是直接以预测值进行填补的,而是根据回归系数估计值的后验分布中随机抽取N个参数,用这些新的参数再计算出预测值。

参考文献:多重填补法在公共卫生调查研究中的应用

预测平均值匹配法一般是适用于连续变量,但我在查看了mice包的帮助文档后,发现这种方法适用于任何数据,如下所示:


         

 



2.实践操作



目的 

  对ms2013里面的缺失数据采用mice包的pmm进行填补,由于适用于任何数据类型,就不用转变为因子了

填补数据的整个流程有以下6步:

l第一步:导入数据

l第二步:查看数据集变量缺失情况

l第三步:mice函数填补数据    

l第四步:查看填补的数据与原始数据是否比较类似

l第五步:填补后5个数据库按众数进行提取形成最终的数据库

l第六步:导出数据: 加载writexl包

代码实现

#导入数据

.libPaths()#查看R包位置.libPaths("D:/Program File/R/R-4.3.2/library")#定义包安装位置setwd("E:/02学习/经验/03R语言图形绘制/18R语言进行多重插补合集")#设置工作空间getwd()#加载工作空间          #下载所需要的包install.packages("mice")install.packages("ranger")install.packages("writexl")          library(lattice) #调入函数包library(MASS)library(nnet)library(mice) #前三个包是mice的基础library(foreign)library(ranger)

#第一步:导入数据

data1<-read.csv("ms2013.csv",                as.is = TRUE,header = T,sep = ",", fileEncoding='utf-8')          str(data1)    

         

 

#第二步:查看数据集变量缺失情况

p1<-md.pattern(data1)

这个图怎么看呢?红色代表缺失,蓝色代表未缺失,分两步看

(1)上和下:代表的是每个变量缺失几个,如零食爱好缺失218个观测

(2)左右:代表有多少观测缺失了哪几个变量;比如,613个观测是完整的,没有缺失;

5个观测仅缺失了吸烟年龄这个变量;126个观测缺失了零食爱好到吸烟年龄这四个变量。

         

 

#第三步:mice函数填补数据

x<-mice(data1,        m=5,#插补几个数据集,默认5        seed=10,#随机化种子数,保障每次插补的一样            method = "pmm")#选择方法x$method#查看每个变量所用的插补方法x$imp#查看填补结果

可以看到,采用的都是pmm法

         

 

         

 

#第四步:填补后查看插补的结果

#蓝色是原始数据,红色是插补的数据

stripplot(x,pch=19,cex=1.2,alpha=.3)

#局限性是只能查看数值型的变量,对于因子变量无法查看

可以看到,吸烟年龄到饮酒频率进行了插补,且红色的插补数据,可以看到5个数据集和原始数据集的分布基本一致,说明pmm法插补的效果可以的。

         

 

         

 

#第五步:插补数据的选择


那么,插补的数据集,如何使用,这里我给出以下3个建议:    1)选择其中1个数据集,作为最终插补的数据集x1<-complete(x,action=01)x2<-complete(x,action=02)x3<-complete(x,action=03)x4<-complete(x,action=04)x5<-complete(x,action=05)2)可以将5个数据集合并,根据插补的5个数据集的变量求缺失值或者众数,形成最终的数据集。代码自行研究3)直接采用5个数据集进行回归分析,然后采用最终的汇总结果fit<-with(x,glm(MS~吸烟年龄+是否吸烟+零食爱好+饮酒频率,family = binomial))fit#统计分析结果汇总fit<-pool(fit)summary(fit)

如下:这里就给出了5个数据集变量的汇总结果。

但是这种方法我认为有两点局限性:

(1)我们在一开始插补前要把所有变量放过来,但是实际上操作中,我们往往只是需要插补几个变量,然后数据集可能有上百变量

(2)如果采用5个数据集汇总的结果,因为插补的数据结果是保存在列表中了,不是数据框了,所以没办法转化数据格式了。比如上面的结果明显自变量全是数值变量

         

 

综上,我比较推荐第一种和第二种方法,为什么第一种也可以呢?我们可以结合第四步插补结果图,然后选择与原始数据插补比较符合的,如果5个数据集插补都比较符合,那就随便选择其中一个,也就是我们依据图形结果进行主观判断,这样,就算审稿人提出疑问,也能说明。   


本期的原始数据

ms2013.xlsx


本公众号致力于分享实用的医学科研干货和热点科研文章共享平台,如果您有任何医学科研相关问题或经验分享,可以私信我!

谢谢阅读,以上均为个人在科研实践过程中的一些做法,如有错误敬请指正!!!



End




关注我获得

更多精彩


流病统计与科研学习笔记
流行病与卫生统计学专业主要分享基于SAS、R以及其他统计软件实现各种统计学方法和结果绘图,提高自己的学习能力
 最新文章