我正在尝试使用趋势包将负二项回归拟合到时间序列。当我尝试计算置信区间和预测区间时,我得到错误消息:
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
进行建模,而不是使用trending
或forecast
。
代码中唯一依赖于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创建