基于Stan实现正态测量模型的后验预测分布
正态测量模型的后验预测分布演示示例
我整理了这个用于演示正态测量模型下后验预测分布的示例,具体内容如下:
1. 观测数据集
首先定义用于分析的speed数据集,在R中可以这样赋值:
speed <- c(28, 26, 33, 24, 34, -44, 27, 16, 40, -2, 29, 22, 24, 21, 25, 30, 23, 29, 31, 19, 24, 20, 36, 32, 36, 28, 25, 21, 28, 29, 37, 25, 28, 26, 30, 32, 36, 26, 30, 22, 36, 23, 27, 27, 28, 27, 31, 27, 26, 33, 26, 32, 32, 24, 39, 28, 24, 25, 32, 25, 29, 27, 28, 29, 16, 23)
2. Stan模型实现
对应的完整Stan模型结构如下,包含数据定义、参数块、模型拟合以及后验预测分布的生成:
data { int<lower=0> N; // 样本数量 vector[N] speed; // 输入的观测数据 } parameters { real mu; // 正态分布的总体均值参数 real<lower=0> sigma; // 正态分布的总体标准差(约束为正数) } model { // 为参数设置弱信息先验 mu ~ normal(0, 50); sigma ~ exponential(1); // 观测数据的似然函数 speed ~ normal(mu, sigma); } generated quantities { // 生成后验预测样本:基于参数的后验分布模拟新观测值 real y_pred = normal_rng(mu, sigma); }
模型说明
data块:声明输入的数据类型和维度,这里N是样本量,speed是观测向量。parameters块:定义需要估计的模型参数,mu是均值,sigma是标准差(通过<lower=0>确保其为正)。model块:指定参数的先验分布和观测数据的似然函数,完成贝叶斯推断的核心部分。generated quantities块:生成后验预测分布的样本,这部分是用来评估模型拟合效果或预测新数据的关键。
内容的提问来源于stack exchange,提问作者The Pointer
相关产品推荐
相关产品推荐

