Перекрестная проверка AUC для кривой ROC с логистической регрессией
Я запускаю скрипт r для перекрестной проверки AUC для кривой ROC. У меня есть набор данных из 70 человек; 24 с болезнью и 46 без болезни. У меня есть список из восьми переменных, которые я использую в модели логистической регрессии для разработки прогностической модели.
Проблема в том, что когда я использую утилиту iid_example в пакете cvAUC, она возвращает ошибку: "Ошибка в Y0[[v]]: индекс за пределами".
Я искал переполнение стека справки и понял, что это может быть результатом неправильного числа строк, но я не смог это выяснить. Может кто-то помочь мне, пожалуйста!.
Код R показан ниже. "золото" - это результат, остальные переменные являются ковариатами. Нет конкретной переменной воздействия.
# Create CV folds (stratify by outcome)
.cvFolds <- function(Y, V){
Y0 <- split(sample(which(Y == 0)),
rep(1:V, length = length(which(Y == 0))))
Y1 <- split(sample(which(Y == 1)),
rep(1:V, length = length(which(Y == 1))))
folds <- vector("list", length = V)
for (v in seq(V)) {folds[[v]] <- c(Y0[[v]], Y1[[v]])}
return(folds)
}
# Train/test glm for each fold
.doFit <- function(v, folds, data){
fit <- glm(Y ~ ., data = data[-folds[[v]],], family = "binomial")
pred <- predict(fit, newdata = data[folds[[v]],], type = "response")
return(pred)
}
iid_example <- function(data, y = "V1", V = 10){
# Create folds
folds <- .cvFolds(Y = data$Y, V = V)
# CV train/predict
predictions <- unlist(sapply(seq(V), .doFit,
folds = folds, data = data))
# Re-order pred values
predictions[unlist(folds)] <- predictions
# Get CV AUC and confidence interval
out <- ci.cvAUC(predictions = predictions, labels = data$Y,
folds = folds, confidence = 0.95)
return(out)
}
# Load a training set with a binary outcome
train <- tb[ tb$zn == "Negative", c("inf", "tnf", "il2", "il6", "il10", "cd4_200", "cd8_1000","gold")]
library(cvAUC)
# Get cross-validated performance
set.seed(1)
out <- iid_example( data = train, y = "gold", V = 10 )