-1

我正在使用biwavelet包进行小波相干分析。我在正确设置 lag1 值(应该是包含每个时间序列的 AR(1) 系数的向量)时遇到问题。下面给出了一个可重现的例子。非常感谢。

t1 <- cbind(1:100, rnorm(100))
t2 <- cbind(1:100, rnorm(100))
lag.t1=acf(t1,plot=F)$acf[2]
lag.t2=acf(t2,plot=F)$acf[2]
wtc.t1t2 <- wtc(t1, t2, max.scale = 32,lag1=c(lag.t1,lag.t2))

当我这样做时,会发生如下错误:

Warning messages:
1: In 2 * lag1 * cos(freq * 2 * pi) :
   longer object length is not a multiple of shorter object length
2: In 1 - 2 * lag1 * cos(freq * 2 * pi) + lag1^2 :
   longer object length is not a multiple of shorter object length
3: In (1 - lag1^2)/(1 - 2 * lag1 * cos(freq * 2 * pi) + lag1^2) :
   longer object length is not a multiple of shorter object length
4

2 回答 2

1

中似乎有一个错误wtc。它传递lag1wt函数以分别计算每个系列的小波变换,但这样做没有子集lag1,这是警告的来源 - 基本上在第二个系列中使用了错误的延迟,因为代码需要长度为 1 的向量为lag1.

奇怪的是,代码在内部计算每个系列的 AR(1) 系数,但如果您想测试显着性,这些系数只会在代码的后面使用。这些永远不会被传递;wtc如果维护者只是从顶层传递这些系数,如果用户没有提供它们,它将为每个系列节省两次计算 AR 模型,如果用户提供它们,则子集lag1向量。

我建议您联系维护人员以提及问题。

同时,一开始就不要打扰计算lag1;inside wt.sig,由wtc->调用wt,如果lag1NULL,它通过 估计 AR(1) 系数,这与在该函数中为显着性检验计算它的arima()方式相同。如果您只是忽略并让它在内部为您计算系数,wtc该代码将执行您想要的操作。lag1

于 2016-07-11T17:01:23.723 回答
0

您不必在调用wtc函数之前估计 AR(1) 系数,因为这是在内部完成的。但是,如果您坚持计算系数并将它们提供给wtc,GitHub 上可用的最新版本的 biwavelet (0.20.9) 修复了警告问题并实现了 Gavin 的提高效率的建议(即,如果它们已经由用户提供)。谢谢两位指出问题...

于 2016-07-12T13:55:46.030 回答