【发布时间】: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函数中使用的s1和time系列的长度,它返回了869和868,因此出现了长度问题。
有谁知道如何解决这个问题?
提前谢谢你,这是我使用的文档。
【问题讨论】:
-
欢迎堆栈溢出。如果您使您的问题可重现,则更容易提供帮助:以对象的形式包含一个最小数据集,例如,如果数据框为 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