运行R语言Biwavelet包WTC代码报步长需为常量错误如何解决
R中biwavelet包小波相干计算步长报错解决方案
报错原因
你收到的报错是biwavelet包的内置校验触发的:
Error in check.datum(y) : The step size must be constant (see approx function to interpolate)
wtc()函数要求输入的时间序列必须为等时间步长,你使用的大宗商品数据集为交易日数据,自动跳过了周末、法定节假日,导致日期间隔不固定,无法通过校验。
修复方法
按照报错提示使用approx()函数对原始序列做线性插值,生成等步长的时间序列后再计算小波相干即可,完整可运行代码如下:
# 加载依赖包 library(biwavelet) # 导入数据 Data <- read.csv("https://dl.dropboxusercontent.com/u/18255955/Tutorials/Commodities.csv") # 转换日期列为标准日期格式 Data$DATE <- as.Date(Data$DATE) # 生成等间隔时间序列,长度与原始数据一致 uniform_time <- seq(min(Data$DATE), max(Data$DATE), length.out = nrow(Data)) # 对两个指标做线性插值,匹配等间隔时间 interp_ISLX <- approx(Data$DATE, Data$ISLX, xout = uniform_time) interp_GOLD <- approx(Data$DATE, Data$GOLD, xout = uniform_time) # 构造符合wtc要求的输入矩阵,第一列为数值型时间,第二列为指标值 t1 <- cbind(as.numeric(uniform_time), interp_ISLX$y) t2 <- cbind(as.numeric(uniform_time), interp_GOLD$y) # 设置迭代次数,示例用10,正式分析建议设为1000以上 nrands = 10 wtc.AB = wtc(t1, t2, nrands = nrands) # 绘图 par(oma = c(0, 0, 0, 1), mar = c(5, 4, 5, 5) + 0.1) plot(wtc.AB, plot.phase = TRUE, lty.coi = 1, col.coi = "grey", lwd.coi = 2, lwd.sig = 2, arrow.lwd = 0.03, arrow.len = 0.12, ylab = "Scale", xlab = "Period", plot.cb = TRUE, main = "Wavelet Coherence: ISLX vs GOLD")
注意事项
- 若对插值精度要求更高,可将
approx()替换为spline()等非线性插值方法 - 正式研究场景下请将
nrands参数调整至1000及以上,提升显著性检验的可靠性 - 不建议使用
attach()加载数据,容易出现同名变量覆盖冲突,优先通过数据框$列名的方式调用变量
内容的提问来源于stack exchange,提问作者ناصر رحمان
相关产品推荐
相关产品推荐

