#r #glm
#r #glm
Вопрос:
Я хочу оценить калькулятор, который предсказывает события, вычисляя предполагаемый процент вероятности того, что событие произойдет, на основе многочисленных входных переменных (на практике речь идет о пациентах с факторами риска и послеоперационными осложнениями). К сожалению, я не понимаю, как на самом деле работает калькулятор, но могу смотреть только на значения ввода / вывода. После ввода нескольких сценариев я получаю df, подобный этому:
risk <- runif(100, 0, 1)
event <- sample(c(0,1), 100, replace = TRUE)
test.df <- data.frame(risk, event)
Риск описывает прогнозируемую вероятность, а событие описывает, действительно ли произошло осложнение.
Теперь я хочу выяснить, насколько хорош калькулятор для прогнозирования осложнений у моих пациентов.
Было бы целесообразно использовать биномиальную glm и оценивать ее с помощью масштабируемой оценки brier?
library (stats)
library (DescTools)
mod <- glm(event ~ risk, family = binomial, data = test.df)
BrierScore(mod, scaled = TRUE)
С моей точки зрения, можно также напрямую рассчитать оценку Brier и масштабировать оценку Brier из df, но я не уверен, будет ли это правильным подходом.
BS <- function(obs, pred) {
mean((obs - pred)^2)
}
Scaled_BS <- function(obs, pred) {
1 - (BS(obs, pred) / (mean(obs) * (1 - mean(obs))))
}
BS(event, risk)
Scaled_BS(event, risk)
Пожалуйста, простите меня, если это совершенно неправильный подход. Я новичок в такого рода задачах, и любая помощь будет высоко оценена!
Ответ №1:
Использование оценки Brier — это нормально, но вы можете дополнить анализ ROC, который предназначен для проверки двоичных результатов. Ключ в анализе ROC возвращает значение в диапазоне 0-1. Чем ближе к 1, тем лучше прогнозы. И если значение близко к 0,5, то прогноз является случайным и не обладает прогностической способностью. Эмпирическое правило заключается в том, что производительность модели является правильной, если AUROC превышает 0,7. Я набросал для вас код, используя ROCR
package:
library(ROCR)
#Data
risk <- runif(100, 0, 1)
event <- sample(c(0,1), 100, replace = TRUE)
test.df <- data.frame(risk, event)
#Model
mod <- glm(event ~ risk, family = binomial, data = test.df)
#Evaluate
test.df$score<-predict(mod,type='response',test.df)
pred<-prediction(test.df$score,test.df$event)
discr=performance(pred,"auc")
#Compute AUROC
AUROC=as.numeric(discr@y.values)
Вывод для AUROC
:
AUROC
[1] 0.5700522
Что является низким. Также вы можете построить кривую ROC, ближайшая кривая к левому верхнему углу означает, что прогнозы исходят из высокопроизводительной модели. В случае ваших данных:
Который находится в середине квадрата, а не близко к левому верхнему углу. Этот показатель может помочь вам определить производительность вашей модели.
Комментарии:
1. Большое вам спасибо за вашу быструю поддержку и рекомендации относительно AUROC. Я хотел использовать оценку Brier, потому что она использовалась другими коллегами в контексте того же калькулятора. Я предполагаю, что в конце концов оба подхода должны дать результат с одинаковой тенденцией? Еще раз спасибо и хороших выходных!
2. @NR117 Большое спасибо! Да, оба показателя количественно оценивают производительность, но AUROC используется для большей точности, поскольку AUROC понимается как вероятность. Близкая к 1 лучшая классификация. Оценка Brier возвращает число, которое иногда может быть трудно интерпретировать. Надеюсь, это вам поможет 🙂