和 Brier Score 是评估此二项式 glm 模型的正确方法吗?
Is and Brier Score the right approach to evaluate this binomial glm model?
我想评估一个预测事件的计算器,该计算器根据大量输入变量计算事件发生概率的估计百分比(实际上是关于具有风险因素和术后并发症的患者)。不幸的是,我不了解计算器的实际工作原理,只能查看 input/output 值。在进入一些场景后,我得到了这样的 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)
从我的角度来看,也可以直接从 df 计算 Brier 分数和 Scaled Brier 分数,但我不确定这是否是正确的方法。
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)
如果这是一个完全错误的方法,请原谅我。我是这类任务的新手,如有任何帮助,我们将不胜感激!
使用 Brier 分数很好,但您可以补充 ROC 分析,该分析旨在测试二元结果。 ROC 分析的关键是返回 0-1 之间的值。越接近 1,预测越好。如果该值接近 0.5,则预测是随机的并且缺乏预测能力。经验法则是,如果 AUROC 超过 0.7,则模型的性能是合适的。我已经使用 ROCR
包为您绘制了一个代码:
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 曲线,曲线最接近左上角意味着预测来自高性能模型。对于您的数据:
这是正方形的中间,不靠近左上角。此度量可以帮助您确定模型的性能。
我想评估一个预测事件的计算器,该计算器根据大量输入变量计算事件发生概率的估计百分比(实际上是关于具有风险因素和术后并发症的患者)。不幸的是,我不了解计算器的实际工作原理,只能查看 input/output 值。在进入一些场景后,我得到了这样的 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)
从我的角度来看,也可以直接从 df 计算 Brier 分数和 Scaled Brier 分数,但我不确定这是否是正确的方法。
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)
如果这是一个完全错误的方法,请原谅我。我是这类任务的新手,如有任何帮助,我们将不胜感激!
使用 Brier 分数很好,但您可以补充 ROC 分析,该分析旨在测试二元结果。 ROC 分析的关键是返回 0-1 之间的值。越接近 1,预测越好。如果该值接近 0.5,则预测是随机的并且缺乏预测能力。经验法则是,如果 AUROC 超过 0.7,则模型的性能是合适的。我已经使用 ROCR
包为您绘制了一个代码:
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 曲线,曲线最接近左上角意味着预测来自高性能模型。对于您的数据:
这是正方形的中间,不靠近左上角。此度量可以帮助您确定模型的性能。