首页 > 解决方案 > 有间隙的日期 - 使用 Biwavelet 包在 R 中进行小波分析

问题描述

我正在使用biwaveletR 中的包执行小波分析。日期变量没有连续的日期,但有间隙。当我尝试创建图表时,出现以下错误。

Error in check.datum(d) : The step size must be constant (see approx function to interpolate)

MWE如下所示:

   library(foreign)
   library(biwavelet)
   library(xts)
   library(labelled)
   library(zoo)

   date =c("2020-02-13", "2020-02-14", "2020-02-17", "2020-02-18", "2020-02-19", "2020-02-20", "2020-02-21", "2020-02-24", "2020-02-25", "2020-02-26", "2020-02-27", "2020-02-28", "2020-03-02", "2020-03-03", "2020-03-04", "2020-03-05", "2020-03-06", "2020-03-09", "2020-03-10", "2020-03-11", "2020-03-12", "2020-03-13")
   rdate = as.Date(date)
   date <- as.Date(date, format = "%Y-%m-%d")
   date
   class(date)
   var = c(-0.077423148, -0.083293147, -0.089214072, -0.095185943, -0.101208754, -0.107282504, -0.113407195, -0.119582824, -0.125809386, -0.125806898, -0.132149309, -0.138584509,  -0.145112529, -0.151733354, -0.158446968, -0.165253401, -0.172152638, -0.179144681, -0.186229542, -0.193407193, -0.200677648, -0.208040923)
   data = data.frame(date, var)
   View(data)
   X <- as.xts(data[,-1], order.by = date)
   ABC <- data.frame(date, var)
   wt.t1=plot(wt(ABC), form = "%b-%d")

我该如何解决这个问题?

标签: time-seriesbiwavelet

解决方案


您可以按照错误消息中的说明插入缺失的天数:

alldates <- seq(min(date), max(date), by = 1)
interpdata <- approx(date, var, xout = alldates)
ABC <- data.frame(date = alldates, var = interpdata$y)
wt.t1 <- plot(wt(ABC, form = "%b-%d")

但是,我认为您错过某些日子的原因是它们是星期六或星期日;我只在数据集中看到工作日。

对于许多数据集(例如股票市场交易等),插入“周六的价格会是多少?”是没有意义的,因为交易永远不会发生在周六或周日。在这种情况下,我建议用一个简单的增量替换“日期”变量,例如

date <- 1:length(date)
ABC <- data.frame(date, var)
wt.t1=plot(wt(ABC), form = "%b-%d")

推荐阅读