基于Tidymodels生成校准图的方法咨询
用Tidymodels绘制逻辑回归模型的校准图
要绘制预测值与观测值的校准图,核心是对比分组后的平均预测概率和实际事件发生比例,用tidyverse工具就能轻松实现,步骤如下:
生成预测概率数据
从训练好的模型对象中导出概率预测,和原始观测的响应变量合并:# 替换成你的模型对象、测试集、响应变量名和目标类别 preds <- predict(model_fit, test_data, type = "prob") %>% bind_cols(test_data %>% select(response_var))计算校准分组统计量
将预测概率分成若干分位数组(比如10组),计算每组的平均预测概率、实际事件比例和样本量:library(dplyr) calibration_data <- preds %>% # 按预测概率分10组,替换成你的预测概率列名(比如.pred_positive) mutate(prob_bin = cut(.pred_positive, breaks = 10, labels = FALSE)) %>% group_by(prob_bin) %>% summarise( mean_pred_prob = mean(.pred_positive), # 替换成响应变量的目标取值,比如response_var == "1" mean_actual_rate = mean(response_var == "1"), group_size = n() ) %>% ungroup()绘制校准图
用ggplot2绘制,添加理想校准线(斜率1、截距0):library(ggplot2) ggplot(calibration_data, aes(x = mean_pred_prob, y = mean_actual_rate)) + geom_point(aes(size = group_size), alpha = 0.7) + geom_abline(slope = 1, intercept = 0, color = "firebrick", linetype = "dashed") + labs( x = "平均预测概率", y = "实际事件发生比例", title = "逻辑回归模型校准图", size = "分组样本量" ) + theme_minimal()
如果用了交叉验证,建议合并所有折叠的预测值来计算校准统计,结果更稳健:
# 替换成你的交叉验证结果对象 cv_preds <- collect_predictions(resampled_fit, summarize = FALSE) %>% bind_cols(map_dfr(resampled_fit$splits, ~ analysis(.x) %>% select(response_var))) # 之后重复上述分组统计和绘图步骤即可
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

