使用 bsts 包中的函数 bsts() 使用 MCMC 进行贝叶斯时间序列分析

Bayesian Time Series Analysis with MCMC using the Function bsts() in the bsts Package

问题:

我有一个名为 FID 的数据框(见下文),其中包含年份和月份的两列,以及 Sighting_Frequency。

数据框包含 2015-2017 之间 3 年的观察结果,表明我有 36 个月的数据。我想 运行 使用 bsts() 函数 bsts 包 中使用 MCMC 进行贝叶斯时间序列分析(参见 R-下面的代码)按照下面的教程。但是,我在模型 运行 中遇到问题,因为我不断收到此错误消息:-

    Error in .FormatBstsDataAndOptions(family, response, predictors, model.options,  : 
  all(abs(response - as.integer(response)) < 1e-08, na.rm = TRUE) is not TRUE

如果这是可能的,我想知道是否有人可以提供建议,因为我正在努力寻找解决方案并且我不是高级 R 编码器。我研究了很多教程,将我的问题放在 R Studio Facebook 页面上,并且我阅读了作者的用户指南。

如果有人能提供帮助,我将不胜感激。

非常感谢。

教程

https://multithreaded.stitchfix.com/blog/2016/04/21/forget-arima/?fbclid=IwAR1q6QD5j6AW21FY2_gqDEq-bwBKDJNtg9alKm3bDytzS51w-dVkDZMdbT4

R-code

##Open packages for the time series analysis

library(lubridate)
library(bsts)
library(dplyr)
library(ggplot2)

* 500 MCMC draws.
* Use 2015 as the holdout period.
* Trend and seasonality.
* Forecast created by averaging across the MCMC draws. 
* Credible interval generated from the distribution of the MCMC draws.
* Discarding the first MCMC iterations (burn-in).
* Using a log transformation to make the model multiplicative

##Produce a time series analysis
myts <- ts(BSTS_Dataframe, start=c(2015, 1), end=c(2017, 12), frequency=12)

# subset the time series (Jan 2015 to December 2017)
x <- window(myts, start=c(2015, 01), end=c(2017, 12))
y <- log(x)

### Run the bsts model
ss <- AddLocalLinearTrend(list(), y)
ss <- AddSeasonal(ss, y, nseasons = 15)
bsts.model <- bsts(y, state.specification = ss, family = "poisson", niter = 500, ping=0, seed=2015)

##Error message

Error in .FormatBstsDataAndOptions(family, response, predictors, model.options,  : 
  all(abs(response - as.integer(response)) < 1e-08, na.rm = TRUE) is not TRUE

FID 数据帧

   structure(list(Year = structure(1:32, .Label = c("2015-01", "2015-02", 
"2015-03", "2015-04", "2015-05", "2015-08", "2015-09", "2015-10", 
"2015-11", "2015-12", "2016-01", "2016-02", "2016-03", "2016-04", 
"2016-05", "2016-07", "2016-08", "2016-09", "2016-10", "2016-11", 
"2016-12", "2017-01", "2017-02", "2017-03", "2017-04", "2017-05", 
"2017-07", "2017-08", "2017-09", "2017-10", "2017-11", "2017-12"
), class = "factor"), Sightings_Frequency = c(36L, 28L, 39L, 
46L, 5L, 22L, 10L, 15L, 8L, 33L, 33L, 29L, 31L, 23L, 8L, 9L, 
40L, 41L, 40L, 30L, 30L, 44L, 37L, 41L, 42L, 20L, 7L, 27L, 35L, 
27L, 43L, 38L)), class = "data.frame", row.names = c(NA, -32L
))

如果我对您的数据使用 poisson,我也会收到错误消息。

myts2 <- ts(BSTS_Dataframe$Sightings_Frequency, start=c(2015, 1), end=c(2017, 12), frequency=12)

x <- window(myts2, start=c(2015, 01), end=c(2017, 12))
y <- log(x)

### Run the bsts model
ss <- AddLocalLinearTrend(list(), y)
ss <- AddSeasonal(ss, y, nseasons = 3)
# bsts.model <- bsts(y, state.specification = ss, family = "poisson", niter = 2, ping=0, seed=1234)
bsts.model <- bsts(y, state.specification = ss, family = "logit",  niter = 100, ping = 0, seed = 123)
plot(bsts.model)
plot(bsts.model)