В вашей загрузочной функции вы сохраняете только коэффициенты регрессии, поэтому для выполнения любого вида проверки вам необходимо вернуть предсказанную вероятность. Сначала я запускаю 10 бутстрапов ниже и обратите внимание, что вы используете либо матрицу модели, либо формулу и data.frame, но не оба, в вашем коде вы получите 2 перехвата:
library(tidyverse)
library(caret)
set.seed(100)
mydata <- read.csv("data.csv")
idx = createDataPartition(mydata$INJ_FAT,p=0.8)
train.data <- mydata[idx$Resample1,]
test.data <- mydata[-idx$Resample1,]
library(boot)
set.seed(12345)
logit.boot <- boot(data=train.data, statistic=logit.bootstrap, R=10)
Ваши коэффициенты здесь хранится 1 строка для каждого bootstrap, для каждого столбца 1 коэффициент:
head(logit.boot$t)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] -4.271000 1.1001241 -1.4136104 -1.621620 -2.584495 5.374047 -2.691607
[2,] -5.048106 1.6833989 -0.2461192 -2.053468 -1.937496 5.608855 -2.415466
[3,] -8.152342 0.9078029 -1.2023567 -1.102740 -2.585418 5.462476 -2.304434
[4,] -6.254665 1.1466750 -0.5599730 -2.132731 -3.401947 4.939235 -17.332697
Для 1 bootstrap, чтобы получить вероятность предсказания, вы делаете:
logodds_to_pred = function(pred,levels){
ifelse(exp(pred)/(1+exp(pred))>0.5,levels[2],levels[1])
}
predictions_b1 = model.matrix(INJ_FAT~.,data=test.data) %*% logit.boot$t[1,]
# convert to 0/1, if prob > 0.5 it's 1 else 0
predictions_b1 = logodds_to_pred(predictions_b1,c(0,1))
confusionMatrix(table(predictions_b1,test.data$INJ_FAT))
Confusion Matrix and Statistics
predictions_b1 0 1
0 544 27
1 10 91
Accuracy : 0.9449
95% CI : (0.9249, 0.9609)
No Information Rate : 0.8244
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.7984
Mcnemar's Test P-Value : 0.008529
Чтобы собрать его для всех загрузчиков, мы делаем матричное умножение для всех загрузок:
logodds = model.matrix(INJ_FAT~.,data=test.data) %*% t(logit.boot$t)
predictions = apply(logodds,2,logodds_to_pred,level=c(0,1))
И для каждого bootstrap (столбец) мы делаем матрицу путаницы и получаем сводку:
results = lapply(1:ncol(predictions),function(i){
confusionMatrix(table(test.data$INJ_FAT,predictions[,i]))$overall
})
results[[1]]
Accuracy Kappa AccuracyLower AccuracyUpper AccuracyNull
9.449405e-01 7.983978e-01 9.249033e-01 9.609404e-01 8.497024e-01
AccuracyPValue McnemarPValue
6.879023e-15 8.528852e-03
Не совсем уверен, как вы консолидируете свои результаты по многим бутстрапам, но я думаю, что с вышеизложенным вы можете двигаться дальше ..