r - 使用 MICE 进行多重插补后的个体 AUC
问题描述
在使用 MICE 进行插补后,我有一个关于计算数据集中每个人的 AUC 的问题。
我知道如何在完整的案例数据集中做到这一点。我已经这样做了:
id <- c(1,2,3,4,5,6,7,8,9,10)
measure_1 <- c(60,80,90,55,60,61,77,67,88,90)
measure_2 <- c(55,88,88,55,70,61,80,66,65,92)
measure_3 <- c(62,88,85,56,68,62,89,62,70,99)
measure_4 <- c(62,90,83,54,65,62,91,59,67,96)
dat <- data.frame(id, measure_1, measure_2, measure_3, measure_4)
dat
x <- c(0,7,14,21) # number of days
library(Bolstad2)
f <- function(a){
Patient <- dat[a,]
vector_patient <- c(Patient[2:5])
AUCpatient <- sintegral(x,vector_patient)$int
return(AUCpatient)
}
vector <- c(1:10)
listAUC <- lapply(vector, f)
vector_AUC <- unlist(listAUC, use.names=FALSE)
vector_AUC
这给了我一个包含所有患者所有 AUC 的向量。如果我愿意,可以将此向量添加到我的数据集中。
但现在我有一个问题:我的数据集中有缺失。我的数据集可以使用以下代码获得:
id <- c(1,2,3,4,5,6,7,8,9,10)
measure1 <- c(60,NA,90,55,60,61,77,67,88,90)
measure2 <- c(55,NA,NA,55,70,NA,80,66,65,92)
measure3 <- c(62,88,85,NA,68,62,89,62,70,99)
measure4 <- c(62,90,83,54,NA,62,NA,59,67,96)
datmis <- data.frame(id, measure1, measure2, measure3, measure4)
datmis
我想使用 MICE 估算这个数据集。
library(mice)
imp <- mice(datmis, maxit = 0)
meth <- imp$method
pred <- imp$predictorMatrix
imp <- mice(datmis, method = meth, predictorMatrix = pred, seed = 2018, maxit = 10, m = 5)
所以现在我把所有的东西都推定了。我想在每个估算的数据集中为每个人创建 AUC。然后我想汇总结果,为每个人生成一个 AUC。但是,使用前面示例中的公式 create 不再起作用。有人可以帮助我吗?
解决方案
这是一种方法。运行插补后,您可以
- 遍历每个估算的数据集
- 用估算的数据计算 AUC
- 使用鲁宾规则汇集估计
下面的代码涵盖了前 2 点
x <- c(0,7,14,21) # number of days
library("tidyverse")
library("MESS")
res <- lapply(1:5, function(i) {
complete(imp, i) %>%
group_by(id) %>%
mutate(AUC=MESS::auc(x, c(measure1, measure2, measure3, measure4)))})
我正在使用该auc
功能,MESS
因为它相当快速且灵活,但您可以将其替换为您的版本。
这会生成一个包含 5 个数据框的列表,可用于合并估计值(上面列表中的第 3 部分)。
library("mitools")
with(imputationList(res), lm(AUC ~ 1)) %>% pool() %>% summary()
这产生
estimate std.error statistic df p.value
(Intercept) 1512.77 81.62359 18.53349 7.389246 1.829668e-07
关于插补的另一条评论:您确定要使用id
数字变量来预测度量吗?这为缺失的变量产生了一个类似于回归的预测器,这似乎相当不切实际。
推荐阅读
- javascript - 有没有办法将 formatISOLocal 用于多个日期输入
- puppet - 通过 puppet 禁用用户 sudo 的有效方法
- c - 我怎样才能有一个执行两个任务的条件语句?第一个,然后另一个循环
- go - 如何测试结构是否实现了特定接口
- vue.js - 在 vue 的嵌套 v-for 循环中访问索引变量
- sql - 当它们没有共同点时,如何从表 2 更新表 1?
- javascript - 如何在数组中找到特定的数组?
- google-cloud-datastore - 在数据存储模式下使用 Cloud Firestore 中的查询进行唯一性检查
- sql - 在oralce SQL中将行移动到列和列到行
- javascript - 我的 web 资源代码 javascript 在 chrome 上运行,但不在动态 crm 的 IE 11 中