R语言实现多重插补法

文章介绍了如何使用R语言中的mice包对缺失数据进行五次插补,包括数据预处理、线性模型fit、插补数据评估(AIC和BIC)、整合插补结果、绘制图表以检查插补效果,并最终补全并保存完整数据到Excel文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>library(lattice) #调入函数包

 > library(MASS)

> library(nnet)

> library(mice) #前三个包是mice的基础

> library(openxlsx)#书写xlsx的包

>data <- read_excel("E://ACT.xlsx", sheet = 1)#读取数据

#插补数据,data是需要插补的数据集,m是插补5次,method使用的方法是pmm,seed是随机种子,print=FALSE是结果不打印

> imputed_Data <- mice(data, m=5, maxit = 50, method = 'pmm', seed = 500,print=FALSE)

#在fit时需要注意:lm是线性模型,result(结局变量),~之后的是自变量,自变量命名时不得有空格,“-”等特殊符号,这里需要将所有的自变量都纳入

> fit=with(imputed_Data,lm(result ~ age + nation + height + weight + BMI + BSA + classification +TNM +transfer + underlyingdisease + cycle + GCSF + therapyleukocyte + Hemoglobin + Platelet + Neutrophils + Whiteblood + Hemoglobinafter + Plateletafter + Neutrophilsafter + erythrocyte + HCT+ MCV + PDW + ALC + MONO + TBLT + DBLT + TP + ALB + AG + ALT + AST + BUN + SCR + UA + LDH + PT+ PTA + INR + FIB +APTT + DDimer + CEA + Ca125 + Ca153))

#将5次插补的数据进行整合后查看,如何选择插补后的数据集,我是根据AIC和BIC值进行选择的,两个越小越好,其实应该使用5次数据集整合的结果,但由于我需要数据进行下一步的分析

> summary(fit,type="glance")

> pooled<-pool(fit)#整和插补数据

> summary(pooled)#查看插补数据情况

> bwplot(impt)#画箱式图看插补的效果

> densityplot(impt)#画密度图,看插补后数据的分布

> stripplot(imputed_Data, col=c("grey",mdc(2)),pch=c(1,20)) #画插补后数据的点状图

> completeData <- complete(imputed_Data,5)#补全数据,此处的5表示选择第五次的插补数据进行补全

> write.xlsx(completeData, "E://completeData.xlsx", sheetName = "Sheet1", rowNames = FALSE)#将完整数据保存在指定的路径

  • mice() 多重插补
  • with() 分析完整数据集
  • pool() 整合数据
  • complete() 输出插补完的数据集
  • imputed_Dat$imp #查看插补数据集
  • install.packages("plm") #安装包
### R语言中使用`mice`包进行多重的方法 #### 安装并加载`mice`包 为了在R环境中利用`mice`包的功能,首先需要安装该软件包(如果尚未安装),之后将其加载到工作空间。 ```r install.packages("mice") # 如果未安装,则需先运行此命令 library(mice) ``` #### 数据准备 假设有一个名为`data`的数据框包含了部分缺失值。可以创建一个简单的示例数据集用于说明: ```r set.seed(123) # 设置随机种子以便结果可重现 n <- 100 # 样本数量 x1 <- rnorm(n, mean = 5, sd = 2) x2 <- factor(sample(c('A', 'B'), n, replace = TRUE)) y <- as.numeric(x2 == "A") + x1 * runif(n) + rnorm(n) # 创建一些NA值作为缺失数据 missing_rate <- 0.2 for (i in seq_len(ncol(data))) { data[sample(seq_len(n), size = floor(n * missing_rate)), i] <- NA } head(data) ``` #### 执行多重 通过调用`mice()`函数来启动多重过程,默认情况下会自动检测每列的最佳模型类型,并返回一个包含所有必要信息的对象。 ```r imputation_model <- mice(data, m = 50, method = c(pmm = "pmm", logreg = "logreg"), seed = 316)[^5] summary(imputation_model) ``` 这里指定了生成50个填后的数据集(`m=50`),对于连续型变量采用最近邻热卡填法(`pmm`),而对于二元逻辑回归则选择了`logreg`方法。 #### 查看和分析的结果 完成上述操作后,可以通过多种方式查看已处理过的数据以及评估其质量。例如提取其中一个完整的数据集供进一步分析之用: ```r completed_data_1 <- complete(imputation_model, action = 1L) str(completed_data_1) ``` 还可以绘制诊断图帮助理解不同版本之间的一致性和差异程度: ```r plot(imputation_model) ``` 此外,支持导出所有的填充版次成独立文件或直接应用于后续建模流程之中。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值