You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用brms处理结果定义不完善的逻辑回归问题遇阻

不完美检测下的疾病概率模型错误排查与修正

问题根源

你当前的模型公式中,nlf(p~inv_logit(X1 + X2 + X3))直接将协变量相加,没有为每个协变量指定待估计的回归系数,brms无法识别需要估计X1/X2/X3的效应,因此只输出了Se和Sp的后验结果。

修正方案

有两种更规范的写法可以让brms正确估计协变量系数:

写法一:手动声明系数(适合需要自定义系数名称的场景)

# 修正后的模型公式
bform <- bf(
  Y ~ q,
  nlf(q ~ Se * p + (1 - p) * (1 - Sp)),
  nlf(p ~ inv_logit(b0 + b1*X1 + b2*X2 + b3*X3)),
  Se + Sp ~ 1,
  b0 + b1 + b2 + b3 ~ 1,  # 明确声明这些是待估计的参数
  nl = TRUE,
  family = bernoulli("identity")
)

# 补充系数的先验(可根据业务需求调整)
bprior <- set_prior("beta(4.6, 0.86)", nlpar = "Se", lb = 0, ub = 1) +
  set_prior("beta(77.55, 4.4)", nlpar = "Sp", lb = 0, ub = 1) +
  set_prior("normal(0, 2)", nlpar = "b0") +
  set_prior("normal(0, 2)", nlpar = "b1") +
  set_prior("normal(0, 2)", nlpar = "b2") +
  set_prior("normal(0, 2)", nlpar = "b3")

# 运行模型
model <- brm(bform, data = bd, prior = bprior, init = "0")
summary(model)

写法二:利用brms线性预测器语法(更简洁,推荐)

直接通过eta ~ X1 + X2 + X3声明协变量效应,brms会自动生成对应系数:

# 修正后的模型公式
bform <- bf(
  Y ~ q,
  nlf(q ~ Se * p + (1 - p) * (1 - Sp)),
  p ~ inv_logit(eta),
  eta ~ X1 + X2 + X3,  # 常规公式写法,自动处理协变量效应
  Se + Sp ~ 1,
  nl = TRUE,
  family = bernoulli("identity")
)

# 补充先验,为eta的所有系数统一设置先验
bprior <- set_prior("beta(4.6, 0.86)", nlpar = "Se", lb = 0, ub = 1) +
  set_prior("beta(77.55, 4.4)", nlpar = "Sp", lb = 0, ub = 1) +
  set_prior("normal(0, 2)", class = "b", nlpar = "eta")

# 运行模型
model <- brm(bform, data = bd, prior = bprior, init = "0")
summary(model)

关键说明

  • 对于因子型变量X2、X3,brms会自动处理水平编码(默认生成虚拟变量),系数代表对应水平相对于参考水平的logit尺度效应。
  • 运行summary(model)后,就能在输出中看到协变量X1/X2/X3的系数后验分布(包括均值、置信区间等)。

内容的提问来源于stack exchange,提问作者Buczinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:30:44