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

关于rstanarm包stan_glm()对象的linear.predictors及预测变量提取的咨询

我来帮你把这两个问题掰扯清楚,都是用rstanarm时容易搞混的点~

关于stan_glm()中linear.predictors的解释

首先得明确:linear.predictors不是你输入的原始预测变量,它是模型计算出来的线性预测值——简单说就是用模型估计出的系数(包括截距)和你的预测变量做线性组合得到的结果。

拿你用mom_iq作为单预测变量的例子来说,假设模型公式是y ~ mom_iq,那线性预测值的计算公式就是:
linear_prediction = 截距项 + mom_iq的回归系数 × mom_iq的观测值
每个观测都会对应一个这样的计算结果,所以它和你输入的mom_iq原始数值肯定不一样,本质是模型对每个观测的“潜在线性输出”,是模型内部的中间计算产物,而不是输入的自变量本身。

在rstanarm里,linear.predictors其实是基于参数后验分布的每个样本计算出来的,所以它会是一个(后验样本数 × 观测数)的矩阵(用extract(model, "linear.predictors")可以看到完整的后验分布);如果用fitted(model),得到的是每个观测线性预测值的后验均值,和linear.predictors的后验均值是一致的。

从stan_glm()对象中获取原始预测变量的方法

如果你想从拟合好的模型对象里直接提取输入的预测变量(比如mom_iq),有几种简单的方法:

方法1:从模型的框架(model.frame)提取

stan_glm拟合时会保留拟合所用的模型框架,直接从这里提取最方便:

# 假设你的模型对象叫model
model.frame(model)$mom_iq

这个方法拿到的是原始的、未做任何变换的预测变量(比如如果你在公式里用了log(mom_iq),这里拿到的还是原始的mom_iq值)。

方法2:从模型矩阵(model.matrix)提取

模型矩阵是模型实际用来计算的变量矩阵(会自动处理截距、因子哑变量、变量变换等),如果你的预测变量是直接输入的(没有变换),可以这样提取:

model.matrix(model)[, "mom_iq"]

如果你的预测变量做了变换(比如log(mom_iq)),这里拿到的就是变换后的数值,适合需要查看模型实际使用的变量时用。

方法3:拟合时设置x=TRUE,从模型对象的x元素提取

如果你在拟合模型的时候加上x=TRUE参数,模型对象会直接保存所用的预测变量矩阵:

# 拟合时设置x=TRUE
model <- stan_glm(y ~ mom_iq, data = your_data, x = TRUE, ...)
# 提取mom_iq
model$x[, "mom_iq"]

这个方法和model.matrix的结果一致,都是模型实际计算用的变量值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:07:32