r语言 - 用趋势包拟合时间序列回归的问题



我正在尝试使用趋势包将负二项回归拟合到时间序列。当我尝试计算置信区间和预测区间时,我得到错误消息:

cbind()错误:! table不支持。请用dplyr::bind_cols()代替。

有人能帮帮我吗?

感谢
library(surveillance)
library(tidyverse)
library(tsibble)
library(forecast)
library(trending)
data(campyDE)
countsdf <- campyDE%>%
select(date, case)
countsdf$date <- as.Date(countsdf$date)
countsdf <- countsdf %>% 
mutate(epiweek = yearweek(date, week_start = 1))
countsdf <- tsibble(countsdf, index = epiweek) 
countsdf$fourier <- select(countsdf, epiweek, case) %>% 
fourier(K = 1)
head(countsdf)
model <- glm_nb_model(
case ~
epiweek +
fourier)
fitted_model <- trending::fit(model, countsdf)
observed <- predict(fitted_model, simulate_pi = FALSE)

问题是您正在混合多个不是设计为一起工作的包,最终会导致冲突。特别地,tsibble包被设计为使用fable进行建模,而不是使用trendingforecast

代码中唯一依赖于tsibble的部分是使用yearweek()创建epiweek,以及获取fourier()内部数据的每周频率。唯一依赖于forecast的部分是在傅立叶项的创建中。

下面是对代码的修改,通过不创建表对象,直接计算两个傅立叶列,而不是通过forecast::fourier()函数,从而避免了这个问题。

library(surveillance)
#> Loading required package: sp
#> Loading required package: xtable
#> This is surveillance 1.20.0. For overview type 'help(surveillance)'.
library(tidyverse)
library(trending)
data(campyDE)
countsdf <- campyDE%>%
select(date, case) %>% 
mutate(
epiweek = tsibble::yearweek(date, week_start = 1),
fourier1 = sin(2*pi*seq(NROW(campyDE))/52.18),
fourier2 = cos(2*pi*seq(NROW(campyDE))/52.18)
)
model <- glm_nb_model(case ~ epiweek + fourier1 + fourier2)
fitted_model <- trending::fit(model, countsdf)
observed <- predict(fitted_model, simulate_pi = FALSE)

由reprex包(v2.0.1)于2022-04-27创建

最新更新