在RStudio代码中获取“使用Forecast函数时ets()出错”

velaa5lx  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(249)
# ---
setwd("F:/Business Analytics/PowerBi/Data")
library(forecast)
SF <- read.csv("test.csv",stringsAsFactors = F,header=T)
ds1 = data.frame(SF$Year, SF$Jan, SF$Feb, SF$Mar, SF$Apr, SF$May, SF$Jun, SF$Jul, SF$Aug, SF$Sep, SF$Oct, SF$Nov, SF$Dec)

forecast(ds1)
# ---

当我在RStudio中运行上述代码,使用CSV数据生成预测线图时,我得到以下错误:ets(对象,lambda = lambda,biasadj = biasadj,允许.乘法.趋势=允许.乘法.趋势,)中的错误:y应为一元时间序列
有人能告诉我密码里漏了什么吗?

hsgswve4

hsgswve41#

问题是,虽然你的数据看起来像一个时间序列对象,但从csv阅读后,它实际上只是一个data.frame。2因此,forecast::ets()认为你提供的是一个多变量时间序列,它读取多个data.frame列。
可能有一个更好的读取功能,我不知道...我的方法将是如下:

# sample data
SF <- data.table::fread("Year   Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2021    1   2   3   4   5   3   1   2   3   4   5   3
2022    1   2   3   4   5   3   1   2   3   4   5   3")

library(tidyverse) # you could just call dplyr
# make columns to rows
myDf <- tidyr::pivot_longer(SF, -Year, names_to = "Month", values_to = "Vals") %>%
    # get sequential month number to be able guarantee order 
    dplyr::mutate(Month = match(Month, base::month.abb)) %>%
    # arrange data (just to be sure)
    dplyr::arrange(Year, Month)

# build time series with frequency and starting point (we can do this as we guaranteed the correct order in the prior dplyr pipe
ts(myDf$Vals, frequency = 12, start = c(2021, 1)) %>% 
    forecast::ets()

如果你想在R中更深入地预测时间序列,有一本优秀的openbook,作者是你正在使用的forecast包的作者:https://otexts.com/fpp2/

相关问题