Индивидуальный AUC после многократного вливания с использованием MICE - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть вопрос о расчете AUC для каждого человека в наборе данных после вменения с использованием MICE.

Я знаю, как я могу сделать это в полном наборе данных дел. Я сделал это следующим образом:

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 в предыдущем примере больше не работает. Есть кто-то, кто может мне помочь?

1 Ответ

0 голосов
/ 09 ноября 2018

Вот один из способов сделать это. После выполнения вменения вы можете

  1. Выполнить через каждый вмененный набор данных
  2. Вычислить AUC с заимствованными данными
  3. Оценка пула вместе с использованием правила Рубина

Первые 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 в качестве числовой переменной. Это создает регрессионный предиктор для отсутствующих переменных, что кажется нереальным.

...