#r #time-series #bayesian #predict #mcmc
#r #временные ряды #байесовский #прогнозировать #mcmc
Вопрос:
Проблема:
У меня есть фрейм данных с именем FID (см. Ниже), который содержит два столбца для Year amp; Month и Sighting_Frequency.
Фрейм данных содержит 3 года наблюдений за период 2015-2017 годов, что указывает на то, что у меня есть данные за 36 месяцев. Я хочу запустить байесовский анализ временных рядов с помощью MCMC с использованием функции bsts () в пакете bsts (см. 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 и прочитал руководство пользователя автора.
Если кто-нибудь может помочь, я был бы глубоко признателен.
Заранее большое спасибо.
Учебник
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
))
Комментарии:
1. Код работает, если вы переключите свой пример на
family = "logit"
. Ошибка возникает из ‘bsts:::.FormatBstsDataAndOptions’. Обязательно ли вам соответствовать модели Пуассона?2. Спасибо, что ответили мне, я действительно оценил это, поскольку я действительно испытываю здесь трудности. Это количество птиц в месяц, поэтому я подумал, что это будет модель Пуассона.
3. Я просто изменил пример на family = «logit’, и я получил то же сообщение об ошибке:
4. Ошибка в . FormatBstsDataAndOptions(family, response, predictors, model.options, : all(abs(response — as.integer(response)) < 1e-08, na.rm = TRUE) неверно
5. У вас есть какие-либо предложения? Я был бы очень благодарен, если вы сможете помочь!
Ответ №1:
Я также получаю сообщение об ошибке, если использую 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)