如何使用 R 中的 BSTS 包在一个图中绘制先验、对数似然和后验
How to plot Prior, Log Likelihood, and Posterior in one plot using BSTS Package from R
我仍在学习更多关于 bsts 包的知识,所以我正在使用 R AirPassengers 数据集并学习根据预测创建 BSTS 模型,
###library(lubridate)
###library(bsts)
###library(dplyr)
###library(ggplot2)
###Load the data
data("AirPassengers")
Y <- window(AirPassengers, start=c(1949, 1), end=c(1959,12))
ss <- AddLocalLinearTrend(list(), Y)
ss <- AddSeasonal(ss, Y, nseasons = 12)
bsts.model <- bsts(Y, state.specification = ss, niter = 500, ping=0, seed=2016)
burn <- SuggestBurn(0.1, bsts.model)
p <- predict.bsts(bsts.model, horizon = 12, burn = burn, quantiles = c(.025, .975))
我发现当我进一步查看 bsts.model 时,bsts.model$prior return 我是这样的
Prior returning only 1 value
然后 bsts.model$log.likelihood
BSTS Model Log.Likelihood with 500 MCMC draws
我知道的最后一个 p$ 分布是后验分布
Posterior distribution with 473 MCMC after burn each for month
以及我想知道的:
为什么先验只给出这一个值而不给出分布?是否可以将它们合二为一 picture/plot?
我使用 EasyFit 软件检查了 AirPassengers 数据集,然后使用这些参数 ibb 将结果拟合到 Beta 分布。co/dxwrvm 但我想知道更多,如果我可以使用 R..
提前致谢
[编辑--2017 年 11 月 18 日]-------------------------------- ----------------------
下面我只能在似然和后验之间作图,因为我仍然不知道先验从何而来:
绘图(密度(p$分布))
线路(密度(AirPassengers),类型="l")
Result Plotting
如果我定义自己的先验,我将使用 rt(1000,12,650) 的随机 t 分布
它生成 1000 次迭代,df=12,中心线=650,它将像这样匹配整个绘图图:
drawt = rt(1000,12,650)
线(密度(绘图))
with own prior definition
所以它清楚地看到这个先验(右侧)x 可能性(左侧)曾经创建过这些后验分布,但是 bsts 包可以生成后验而不需要我定义任何先验..有人可以帮我解释一下吗?
(我已经搜索了 Steve 提到的 state.specification 但它只是给了我一些趋势和季节性的 prior.guess 列表,我仍然很难理解先验分布在哪里来自,如果有办法,请给我更多真实的代码示例)
先验是观察方差的先验。它是一个逆伽马分布,prior.guess 作为标准差的猜测值,prior.df 作为先验样本大小。请参阅 SdPrior 的帮助页面。
我不确定 "beta distribution" 是什么意思。 beta 分布是 [0, 1] 上的分布(即它的支持)。您的意思可能是 "distribution on the 'beta's"(即回归系数),但在本例中这没有意义,因为您拟合的模型没有回归系数。
另请注意,状态模型的参数存在(独立的)先验分布。由于您使用的两个状态模型都是随机游走的组合,因此这些模型的唯一参数是随机游走中各个误差项的方差,因此这些也将是伽马分布。您可以通过检查 bsts.model$state.specification 找到这些先验分布。它是您在 bsts 调用中传递的 state.specification 参数的副本。在您的情况下,它是一个包含两个元素的列表,一个用于状态的每个组成部分(趋势和季节性)。
所以我最近通过反复试验和谷歌搜索进行了大量研究,
我发现这项使用贝叶斯的研究比我见过的其他研究更有用
http://sisifospage.tech/2017-10-30-forecasting-bsts.html
我自己得出结论,将这些(先验、数据似然、后验)预测成这样的一个图:
plot(密度(bsts.model$one.step.prediction.error),xlim=c(-100,1000),ylim=c(0,0.035)) // 这些表示我假设的先验
lines(density(p$distribution)) // 这些表示后验分布
lines(density(AirPassengers)) // 这些表示数据可能性
我得到的结果是这样的:
Results
还是[错了请指正]
我在 R 帮助中阅读了有关 Prior 的内容,我发现了这些陈述 [如果模型不包含回归变量,那么这只是残差标准差的先验,表示为 SdPrior 创建的对象。] 但 SdPrior 只是数字对象,
和sisifospage.tech确实详细解释了如何使用SdPrior来制作趋势组件,然后我知道这些SdPrior及其兄弟姐妹是为了创建先验作为趋势组件的参数,以及最终结果作为分析残差包含在one.step.prediction.error的bsts模型中。
我仍在学习更多关于 bsts 包的知识,所以我正在使用 R AirPassengers 数据集并学习根据预测创建 BSTS 模型,
###library(lubridate)
###library(bsts)
###library(dplyr)
###library(ggplot2)
###Load the data
data("AirPassengers")
Y <- window(AirPassengers, start=c(1949, 1), end=c(1959,12))
ss <- AddLocalLinearTrend(list(), Y)
ss <- AddSeasonal(ss, Y, nseasons = 12)
bsts.model <- bsts(Y, state.specification = ss, niter = 500, ping=0, seed=2016)
burn <- SuggestBurn(0.1, bsts.model)
p <- predict.bsts(bsts.model, horizon = 12, burn = burn, quantiles = c(.025, .975))
我发现当我进一步查看 bsts.model 时,bsts.model$prior return 我是这样的
Prior returning only 1 value
然后 bsts.model$log.likelihood
BSTS Model Log.Likelihood with 500 MCMC draws
我知道的最后一个 p$ 分布是后验分布
Posterior distribution with 473 MCMC after burn each for month
以及我想知道的:
为什么先验只给出这一个值而不给出分布?是否可以将它们合二为一 picture/plot?
我使用 EasyFit 软件检查了 AirPassengers 数据集,然后使用这些参数 ibb 将结果拟合到 Beta 分布。co/dxwrvm 但我想知道更多,如果我可以使用 R..
提前致谢
[编辑--2017 年 11 月 18 日]-------------------------------- ----------------------
下面我只能在似然和后验之间作图,因为我仍然不知道先验从何而来:
绘图(密度(p$分布))
线路(密度(AirPassengers),类型="l")
Result Plotting
如果我定义自己的先验,我将使用 rt(1000,12,650) 的随机 t 分布 它生成 1000 次迭代,df=12,中心线=650,它将像这样匹配整个绘图图:
drawt = rt(1000,12,650)
线(密度(绘图))
with own prior definition
所以它清楚地看到这个先验(右侧)x 可能性(左侧)曾经创建过这些后验分布,但是 bsts 包可以生成后验而不需要我定义任何先验..有人可以帮我解释一下吗?
(我已经搜索了 Steve 提到的 state.specification 但它只是给了我一些趋势和季节性的 prior.guess 列表,我仍然很难理解先验分布在哪里来自,如果有办法,请给我更多真实的代码示例)
先验是观察方差的先验。它是一个逆伽马分布,prior.guess 作为标准差的猜测值,prior.df 作为先验样本大小。请参阅 SdPrior 的帮助页面。
我不确定 "beta distribution" 是什么意思。 beta 分布是 [0, 1] 上的分布(即它的支持)。您的意思可能是 "distribution on the 'beta's"(即回归系数),但在本例中这没有意义,因为您拟合的模型没有回归系数。
另请注意,状态模型的参数存在(独立的)先验分布。由于您使用的两个状态模型都是随机游走的组合,因此这些模型的唯一参数是随机游走中各个误差项的方差,因此这些也将是伽马分布。您可以通过检查 bsts.model$state.specification 找到这些先验分布。它是您在 bsts 调用中传递的 state.specification 参数的副本。在您的情况下,它是一个包含两个元素的列表,一个用于状态的每个组成部分(趋势和季节性)。
所以我最近通过反复试验和谷歌搜索进行了大量研究, 我发现这项使用贝叶斯的研究比我见过的其他研究更有用
http://sisifospage.tech/2017-10-30-forecasting-bsts.html
我自己得出结论,将这些(先验、数据似然、后验)预测成这样的一个图:
plot(密度(bsts.model$one.step.prediction.error),xlim=c(-100,1000),ylim=c(0,0.035)) // 这些表示我假设的先验
lines(density(p$distribution)) // 这些表示后验分布
lines(density(AirPassengers)) // 这些表示数据可能性
我得到的结果是这样的:
Results
还是[错了请指正]
我在 R 帮助中阅读了有关 Prior 的内容,我发现了这些陈述 [如果模型不包含回归变量,那么这只是残差标准差的先验,表示为 SdPrior 创建的对象。] 但 SdPrior 只是数字对象,
和sisifospage.tech确实详细解释了如何使用SdPrior来制作趋势组件,然后我知道这些SdPrior及其兄弟姐妹是为了创建先验作为趋势组件的参数,以及最终结果作为分析残差包含在one.step.prediction.error的bsts模型中。