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

为何R中MASS包polr()的重复测量随机效应模型预测值完全一致?

问题根源与解决方案

为什么预测值完全一致?

MASS包的polr()函数不支持随机效应语法,你写的(1 | ID)并没有被识别为随机截距项,实际拟合的是仅包含固定截距的有序logit模型(等价于polr(value ~ 1, data = subset_data))。这类模型对所有观测都输出相同的预测概率,自然不会体现被试间的差异。

正确拟合带随机效应的有序logit模型

要建模重复测量的随机效应,推荐使用以下两个工具:


方案1:使用ordinal包的clmm()函数

clmm()专门用于拟合条件logistic混合模型,完美支持有序因变量和随机效应:

# 安装并加载包
install.packages("ordinal")
library(ordinal)

# 拟合带被试随机截距的模型
random_effects_model_clmm <- clmm(value ~ 1 + (1 | ID), data = subset_data)

# 生成每个观测的预测概率
predicted_values_clmm <- predict(random_effects_model_clmm, type = "prob")

此时不同被试(ID)的预测概率会呈现差异,因为模型捕捉了被试间的随机变异。


方案2:使用brms包的brm()函数(贝叶斯方法)

如果你倾向于贝叶斯框架,brms支持灵活的混合效应有序模型,结果解释更直观:

# 安装并加载包
install.packages("brms")
library(brms)

# 拟合贝叶斯有序logit混合模型
random_effects_model_brms <- brm(
  formula = value ~ 1 + (1 | ID),
  data = subset_data,
  family = cumulative()  # 指定有序因变量的分布类型
)

# 生成预测概率
predicted_values_brms <- predict(random_effects_model_brms, type = "prob")

后续扩展

之后你还可以加入研究中的固定效应(Prompt_Condition和Response_Condition),比如修改公式为:

# clmm版本
clmm(value ~ Prompt_Condition * Response_Condition + (1 | ID), data = subset_data)

# brms版本
brm(value ~ Prompt_Condition * Response_Condition + (1 | ID), data = subset_data, family = cumulative())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:33:29