【问题标题】:R : DSA package (Daily seasonal adjustment) for time series, problem with dsa function and February 29thR:时间序列的 DSA 包(每日季节性调整),dsa 函数和 2 月 29 日的问题
【发布时间】:2022-03-22 14:00:11
【问题描述】:

我有一个从 2018 年 1 月 30 日开始到 2020 年 6 月 14 日结束的时间序列,我想根据印度假期进行季节性调整。为此,我想使用 DSA 包和 dsa 函数,基于我所做的研究(例如,它是一个可以处理与 X-13 不同的每日时间序列的模型)。

首先,我导入包含 2 列和 867 行的 csv 文件,并将其转换为 xts 对象(使用 dsa 函数的必要形式)。

library(dsa)
library(xts)
daily_demand_df = read.table(file = file.path(file_path,"Demand data - daily.csv"),
                             sep = ";", row.names = NULL, header = FALSE,
                             encoding = 'utf-8', skip = 1, 
                             colClasses = c("character", "character"),
                             col.names = c("Date","Demand_Value"))

daily_demand_df$Demand_Value <- as.numeric(gsub(',', '.', daily_demand_df$Demand_Value))
daily_demand_df$Date<-as.Date(daily_demand_df$Date, format = "%d/%m/%Y")

daily_demand_df <- daily_demand_df[order(daily_demand_df$Date),]
rownames(daily_demand_df) <- 1:nrow(daily_demand_df)
head(x = daily_demand_df)
    Date Demand_Value
1 2018-01-29       3242.5
2 2018-01-30       3269.5
3 2018-01-31       3276.9
4 2018-02-01       3274.1
5 2018-02-02       3291.3
6 2018-02-03       3286.1

daily_demand_timeserie <- xts(x = daily_demand_df$Demand_Value,
                          order.by = daily_demand_df$Date,
                          frequency=365.2425)

然后我尝试在时间序列上应用 dsa 函数(暂时没有假期效果),但出现以下错误:

adjusted <- dsa(series = daily_demand_timeserie)
Error in xts::xts(s1, order.by = xts::last(times, n = length(s1))) : NROW(x) must match length(order.by)

我试图探索 DSA 函数源代码以了解问题可能出在哪里,我发现在函数中,在某个时间点,从时间序列中删除了 2 月 29 日。然后我修改了dsa函数的源代码,打印了dsa函数中使用的s1time系列的长度,它返回了869和868,因此出现了长度问题。

有谁知道如何解决这个问题?

提前谢谢你,这是我使用的文档。

Link for the theoretical paper on DSA

DSA reference manual

DSA function source code

【问题讨论】:

  • 欢迎堆栈溢出。如果您使您的问题可重现,则更容易提供帮助:以对象的形式包含一个最小数据集,例如,如果数据框为 df minimal reproducible example
  • 抱歉,我不知道执行此操作的正确方法。首先,我导入了两个库:library(dsa) library(xts) head(x = daily_demand_df) Date Demand_Value 1 29/01/2018 3242,5 2 30/01/2018 3269,5 3 31/01/2018 3276,9 4 01/02/2018 3274,1 5 02/02/2018 3291,3 6 03/02/2018 3286,1 顺便说一句,在原帖中,我写道我使用了“dsa_bis”,但我的意思是“dsa”(除了我在源代码中添加了一行返回两个系列的长度)
  • 完全没问题。也许这些信息在问题中比作为评论更好。
  • 帖子正在编辑中。

标签: r time-series xts adjustment


【解决方案1】:

首先,您不需要在 xts() 定义中指定频率变量。但我不认为这会导致问题。

我在包里改了一些东西,希望不要再出现问题了。

一般来说,检查序列的开头和结尾是否有缺失值,因为这会导致 dsa 处理和插入缺失数据的方式出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 2012-10-25
    • 2023-02-15
    • 2021-10-30
    • 2014-03-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多