【问题标题】:Weekly and Yearly Seasonality in RR中的每周和每年的季节性
【发布时间】:2018-12-25 13:46:18
【问题描述】:

我有从 2007 年 1 月 1 日到 2016 年 12 月 31 日的每日电力负荷数据。我使用 ts() 函数像这样加载数据

ts_load <- ts(data, start = c(2007,1), end = c(2016,12),frequency = 365)

我想从我的数据中删除每年和每周的季节性,分解数据并删除季节性,我使用以下代码

decompose_load = decompose(ts_load, "additive")
deseasonalized = ts_load - decompose_load$seasonal

我的问题是,我做得对吗?这是消除年度季节性的正确方法吗?什么是消除每周季节性的正确方法?

【问题讨论】:

  • 请提供实际数据(使用dput(head(data)),以便我们为您提供帮助
  • @RAB > dput(head(ts_load)) c(94275, 97269, 98686, 98262, 96839, 97398)
  • 请将数据添加到您的原始评论中。见:How to make a great R reproducible example

标签: r time-series


【解决方案1】:

几点:

  • ts 系列在每个循环中必须具有规则间隔的点和相同数量的点。在问题中指定了 365 的频率,但有些年份,即闰年,会有 366 分。特别是,如果您希望频率为一年,那么您不能在不调整的情况下使用每日或每周数据,因为不同年份有不同的天数,并且一年中的周数不是整数。

    李>
  • decompose 不处理多个季节性。如果按周表示消除周一、周二等的影响,如果按年表示消除作为一年中的第 1 次、第 2 次等的影响,那么您要求的是多个季节性。

  • end = c(2017, 12) 表示 2017 年的第 12 天,因为频率为 365。

预测包中的msts 函数可以处理多个非整数季节性。

使用基数 R,另一种方法是通过线性模型对其进行近似,避免上述所有问题(但忽略相关性),我们将对此进行讨论。

假设最后的注释中显示的数据可重复显示,我们定义星期几,dow,和一年中的一天,doy,变量和回归那些具有截距和趋势的变量,然后只构建截距加上最后一行代码中的趋势加上残差来去季节化。这不是绝对必要的,但我们使用scale 来删除trend 的平均值,以便定义data.ds 的三个项相互正交——无论我们是否这样做,第三项都将与其他 2 由线性模型的属性决定。

trend <- scale(seq_along(d), TRUE, FALSE)
dow <- format(d, "%a")
doy <- format(d, "%j")
fm <- lm(data ~ trend + dow + doy)
data.ds <- coef(fm)[1] + coef(fm)[2] * trend + resid(fm)

注意

以可重现形式使用的测试数据:

set.seed(123)
d <- seq(as.Date("2007-01-01"), as.Date("2016-12-31"), "day")
n <- length(d)
trend <- 1:n
seas_week <- rep(1:7, length = n)
seas_year <- rep(1:365, length = n)
noise <- rnorm(n)
data <- trend + seas_week + seas_year + noise

【讨论】:

    【解决方案2】:

    您可以使用 dsa 包中的 dsa 函数来调整每日时间序列。相对于回归解决方案的优势在于,它考虑到了季节的影响会随着时间的推移而发生变化,这通常是这种情况。 为了使用该功能,您的数据应采用 xts 格式(来自 xts 包)。因为在这种情况下闰年不会被忽略。 然后代码将如下所示:

    install.packages(c("xts", "dsa"))
    
    data = rnorm(365.25*10, 100, 1)
    data_xts <- xts::xts(data, seq.Date(as.Date("2007-01-01"), by="days", length.out = length(data)))
    
    sa = dsa::dsa(data_xts, fourier_number = 24) 
    # the fourier_number is used to model monthly recurring seasonal patterns in the regARIMA part
    
    data_adjusted <- sa$output[,1]
    

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多