1.Stan简介
Stan 是一种用于统计建模和高性能统计计算的先进平台。Stan已经在社会、生物和物理科学、工程和商业领域被应用于统计建模、数据分析和预测。
基于Stan概率编程语言开发统计模型
进行MCMC采样
基于变分推理的近似贝叶斯计算
基于正则项的极大似然函数的优化方法
Stan提供Python和R语言安装包,Stan可以自动化实现统计学模型转化为C++代码的功能,以方便用户进行部署调用。本文主要讲述怎样使用Stan进行统计学模型参数估计,并嵌入C++开发平台。
2.Stan模型代码结构
下面是Stan语言模型构建程序骨架:
functions模块包含了用户自定义函数
data指明定义了模型的输入数据格式及其数据类型
transformed data模块允许用户定义常量或从data转换过来的数据
parameters模块声明模型的参数
transformed parameters模块允许定义变量来保存由data或parameters生成的中间数据
model模块定义了模型的对数密度函数
generated quantities 模块允许基于parameters,data, 及随机数生成用户需要的数据
functions {
// ... function declarations and definitions ...
}
data {
// ... declarations ...
}
transformed data {
// ... declarations ... statements ...
}
parameters {
// ... declarations ...
}
transformed parameters {
// ... declarations ... statements ...
}
model {
// ... declarations ... statements ...
}
generated quantities {
// ... declarations ... statements ...
}
3.Stan优化算法
Stan提供优化算法来搜索使用Stan语言定义的密度函数模式,此模式可被用来进行参数估计,或用来做贝叶斯后验分析。Stan提供三种优化算法,分别为牛顿法和两种近似牛顿法(BFGS、LBFGS)。
在使用优化算法过程中,一个主要问题是收敛性的监测问题,在Stan优化算法可以使用多种参数进行监测。任意一个监测参数满足时则认为该函数已经收敛。可以通过将其相应的容差参数设置为零来禁止此种收敛监测。
参数收敛监测,如果参数 在第 次迭代过程中,其变化量小于tol_param时,则认为收敛,公式如下: