【问题标题】:Error with large frequency from stl - Time Series analysis来自 stl 的大频率错误 - 时间序列分析
【发布时间】:2020-06-06 08:02:49
【问题描述】:

我正在用 R 学习时间序列。 使用stl() 命令我得到错误

stl(avatar_ts, s.window = "periodic") 中的错误:系列不是 周期性或少于两个周期

下面是我的代码。

avatar_ts = ts(avatar_data$Gross, start = c(2009,12), frequency=365)
st_decompose_method = stl(avatar_ts, s.window="periodic")

如果我将频率更改为 12 或 50,stl() 函数就会运行。 但是,我的数据集从 2009 年 12 月 18 日到 2010 年 11 月 18 日有每日观察;共 318 次观察。

(基本上是每日数据,但由于是每日电影利润数据集,所以检测到缺少几周)

如何使用频率为 365 的 stl() 函数来处理时序数据?

【问题讨论】:

    标签: r time stl series


    【解决方案1】:

    这里没有帮助的答案是,如果您有至少两年的观察,您可以在每日数据上使用stl()。 您将s.window 定义为"periodic",但由于您拥有不到一年的数据,即insufficient

    请参阅下面的模拟数据示例。

    首先,根据您的观察次数:

    x <-rnorm(318)
    d <- ts(x, start = c(2009,12), frequency = 365)
    st_decompose_method = stl(d, s.window="periodic")
    

    这会报错:

    Error in stl(d, s.window = "periodic") : 
      series is not periodic or has less than two periods
    

    现在至少有两年的数据,所以至少有两个时期:

    x <-rnorm(731)
    d <- ts(x, start = c(2009,12), frequency = 365)
    st_decompose_method = stl(d, s.window="periodic")
    

    哪个会起作用。

    请注意,您的ts 规范不正确,因为您没有提供开始日期。 为此,您可以使用following:

    days <- seq(as.Date("2009-12-18"), as.Date("2010-11-18"), by = "day")
    avatar_ts = ts(avatar_data$Gross, 
                   start = c(2009, as.numeric(format(days[1], "%j"))), 
                   frequency=365)
    

    【讨论】:

    • 非常感谢您的帮助。由于少于 2 个时期(两年)的数据,我决定使用另一种方法。但是非常感谢真诚地分享知识。顺便说一句,谢谢你的帮助,我也可以设置开始日期。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2017-07-05
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多