如何绘制有序logit回归的预测概率?哑变量x轴的替代方案
哑变量下的有序logit预测概率可视化方案及示例
当你的x轴变量是0/1哑变量时,不需要用seq()生成连续序列,直接枚举它的两个离散取值(0和1)即可。核心逻辑是:固定其他协变量在均值水平,分别计算x=0和x=1时各响应类别的预测概率,再可视化对比。
以下是完整的R语言示例:
1. 拟合有序logit模型
先模拟数据并拟合模型(可替换为你的真实数据与模型):
# 加载依赖包 library(MASS) library(tidyverse) # 模拟有序响应数据:y为3分类有序变量,x是0/1哑变量,z是连续协变量 set.seed(123) n <- 500 x <- rbinom(n, 1, 0.4) z <- rnorm(n, mean = 5, sd = 1) # 生成有序响应y y <- ordered(ifelse(-2 + 1.5*x + 0.8*z + rlogis(n) > 1, 3, ifelse(-2 + 1.5*x + 0.8*z + rlogis(n) > 0, 2, 1))) # 拟合有序logit模型 model <- polr(y ~ x + z, data = data.frame(x, z, y), Hess = TRUE)
2. 构造预测数据集
直接指定x的两个取值,其他变量固定在均值:
pred_data <- tibble( x = c(0, 1), # 枚举哑变量的所有可能取值 z = mean(z) # 固定连续变量z在均值水平 )
3. 计算预测概率
基于模型生成每个x对应的各响应类别概率:
pred_probs <- predict(model, newdata = pred_data, type = "probs") %>% as.data.frame() %>% mutate(x = pred_data$x) %>% pivot_longer(cols = starts_with("."), names_to = "响应类别", values_to = "预测概率")
4. 可视化结果
因为x是离散的,用分组柱状图展示概率分布更直观:
ggplot(pred_probs, aes(x = factor(x), y = 预测概率, fill = 响应类别)) + geom_col(position = "dodge", width = 0.7) + labs(x = "哑变量X", y = "预测概率", fill = "响应类别") + theme_minimal() + scale_fill_brewer(palette = "Set2")
如果想模仿原示例的折线图风格,也可以将x转为数值后用折线+点的形式,只需把绘图代码改成:
ggplot(pred_probs, aes(x = x, y = 预测概率, color = 响应类别, group = 响应类别)) + geom_line(linewidth = 1) + geom_point(size = 3) + labs(x = "哑变量X", y = "预测概率", color = "响应类别") + theme_minimal() + scale_color_brewer(palette = "Set2")
内容的提问来源于stack exchange,提问作者rr19
相关产品推荐
相关产品推荐

