首页 > 解决方案 > 使用 bsts 包中的函数 bsts() 使用 MCMC 进行贝叶斯时间序列分析

问题描述

问题:

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

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

    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代码

##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
))

标签: rtime-seriesbayesianpredictmcmc

解决方案


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)

推荐阅读