如何针对zeroinfl()模型的零膨胀部分绘制边际效应图?
零膨胀负二项回归模型零膨胀部分边际效应可视化方法
针对你用pscl::zeroinfl()构建的零膨胀负二项回归模型,要单独提取零膨胀部分变量lfpsimusa的边际效应并可视化,有以下几种可行方法:
方法1:使用marginaleffects包(推荐)
marginaleffects包对pscl的零膨胀模型支持完善,可直接通过component参数指定提取零膨胀部分的效应,代码简洁且默认可视化效果美观。
# 加载依赖包 library(pscl) library(marginaleffects) # 构建零膨胀负二项回归模型(替换为你的实际变量与数据集) model <- zeroinfl( count_var ~ x1 + x2 | lfpsimusa + z1 + z2, data = your_dataset, dist = "negbin" ) # 绘制lfpsimusa对零膨胀概率的边际效应(预测概率曲线) plot_predictions( model, variables = "lfpsimusa", component = "zero" # 明确指定提取零膨胀部分 ) # 若需查看斜率型边际效应(变量每单位变化的效应值) plot_slopes( model, variables = "lfpsimusa", component = "zero" )
方法2:用sjPlot正确指定参数
你之前用sjPlot::plot_model()失败,大概率是未指定component参数。该函数支持通过此参数提取零膨胀部分:
library(sjPlot) library(pscl) # 构建模型(同上) model <- zeroinfl(count_var ~ x1 + x2 | lfpsimusa + z1 + z2, data = your_dataset, dist = "negbin") # 绘制零膨胀部分的边际效应预测图 plot_model( model, type = "pred", # 预测型边际效应 terms = "lfpsimusa", # 指定目标变量 component = "zero" # 提取零膨胀部分 )
方法3:手动计算+ggplot2自定义绘图
如果需要高度自定义图形样式,可手动计算零膨胀部分的预测概率,再用ggplot2绘制:
library(pscl) library(ggplot2) # 构建模型 model <- zeroinfl(count_var ~ x1 + x2 | lfpsimusa + z1 + z2, data = your_dataset, dist = "negbin") # 生成新数据:固定其他协变量,生成lfpsimusa的连续序列 new_data <- expand.grid( lfpsimusa = seq(min(your_dataset$lfpsimusa), max(your_dataset$lfpsimusa), length.out = 100), x1 = mean(your_dataset$x1), # 连续协变量取均值 x2 = median(your_dataset$x2), # 分类协变量可取众数/中位数 z1 = mean(your_dataset$z1), z2 = median(your_dataset$z2) ) # 预测零膨胀部分的概率及标准误 pred_result <- predict(model, newdata = new_data, type = "zero", se.fit = TRUE) new_data$zero_prob <- pred_result$fit new_data$se <- pred_result$se.fit # 计算95%置信区间 new_data$lower <- new_data$zero_prob - 1.96 * new_data$se new_data$upper <- new_data$zero_prob + 1.96 * new_data$se # 绘制自定义边际效应图 ggplot(new_data, aes(x = lfpsimusa, y = zero_prob)) + geom_line(linewidth = 1, color = "#2c3e50") + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2, fill = "#3498db") + labs(x = "lfpsimusa", y = "结构零概率", title = "零膨胀部分lfpsimusa的边际效应") + theme_minimal()
内容的提问来源于stack exchange,提问作者Victor Schousboe
相关产品推荐
相关产品推荐

