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

使用rstan的贝叶斯有序逻辑回归模型语法排查及函数报错问题

贝叶斯IRT单维2PL GRM构建报错排查

问题描述

我参考已发表论文的分级响应模型(有序逻辑回归)代码,使用brms构建贝叶斯IRT单维2PL GRM,代码如下:

# Load packages ----
library(rstan)
library(tidyverse)
library(brms)
# Bayes IRT Unidimensional 2pl GRM ----

formula_uni <- bf(
  resp | thres(gr = item) ~ 1 + (1 | id),
  disc ~ 1 + (1 |i| item)
)

prior_uni <-
  prior("normal(0, 3)", class = "Intercept") +
  prior("constant(1)", class = "sd", group = "id") +
  prior("normal(0, 1)", class = "sd", group = "item", dpar = "disc") 

## Posterior Samples ----
fit_uni <- brm(
  formula = formula_uni,
  data = tsc_dat1,
  family = brmsfamily("cumulative", "logit", link_disc = "log"),
  prior = prior_uni,
  iter = 5000,
  chains = 4,
  cores = 4
)

运行时出现语法错误,报错信息如下:

Compiling Stan program...
SYNTAX ERROR, MESSAGE(S) FROM PARSER:
No matches for: 

  log_inv_logit_diff(real, real)

Function log_inv_logit_diff not found.
 error in 'model61a4787630c_d5da0bad07704d69638ca1b1ee168864' at line 19, column 84
  -------------------------------------------------
    17:        return log1m_inv_logit(disc * (thres[nthres] - mu));
    18:      } else {
    19:        return log_inv_logit_diff(disc * (thres[y] - mu), disc * (thres[y - 1] - mu));
                                                                                           ^
    20:      }
  -------------------------------------------------

请问该模型语法是否正确?此报错是遗漏加载包还是其他原因导致?

解答

模型语法正确性

你的模型语法是正确的:

  • 公式中thres(gr=item)指定每个项目对应独立阈值,符合GRM的核心设定;
  • disc ~ 1 + (1|i|item)为项目区分度设置随机效应,是2PL GRM的标准写法;
  • 先验设置合理:截距项用宽正态先验,被试能力标准差固定为1(满足IRT模型识别要求),区分度的随机效应标准差用正态先验;
  • 族设置brmsfamily("cumulative", "logit", link_disc = "log")准确,cumulative对应分级响应模型,link_disc="log"保证区分度为正。

报错原因

这个报错和加载包无关,核心原因是你的rstan/brms版本过低:log_inv_logit_diff是Stan 2.26及以上版本新增的函数,旧版本rstan(对应旧版Stan)未包含该函数,导致编译时无法识别。

解决办法

升级rstan和brms到最新版本:

# 升级brms
install.packages("brms", dependencies = TRUE)
# 若rstan版本过旧,先卸载再安装
remove.packages("rstan")
install.packages("rstan", dependencies = TRUE)

升级完成后重启R会话,再重新运行模型代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:12:12