-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

にバグがあるようですwtclag1各シリーズのウェーブレット変換を個別に計算する関数に渡されますwtが、サブセット化せずに実行lag1されます。これは、警告が発生する場所です。基本的に、コードは長さ 1 のベクトルを想定しているため、2 番目のシリーズで間違ったラグが使用されています。のためにlag1

奇妙なのは、コードが各シリ​​ーズの AR(1) 係数を内部的に計算することですが、これらはコードの後半で有意性をテストする場合にのみ使用されます。これらは決して受け継がれません。wtcユーザーがそれらを提供しなかった場合、メンテナーがトップレベルからこれらの係数を渡し、ユーザーがそれらをlag1提供した場合はベクトルをサブセット化した場合、シリーズごとに AR モデルを 2 回計算する必要がなくなります。

メンテナに連絡して問題について言及することをお勧めします。

lag1それまでの間、最初は計算を気にしないでください。insideは->wt.sigによって呼び出されます。 isの場合、 を介して AR(1) 係数を推定します。これは、がその関数の有意性検定で計算するのと同じ方法です。無視して内部的に係数を計算させれば、コードはあなたが望むことをします。wtcwtlag1NULLarima()wtclag1

于 2016-07-11T17:01:23.723 に答える
0

wtcこれは内部的に行われるため、関数を呼び出す前に AR(1) 係数を推定する必要はありません。ただし、係数を計算して に提供することを主張する場合、wtcGitHub で入手可能な biwavelet の最新バージョン (0.20.9) は、警告の問題を修正し、効率を改善するために Gavin の提案も実装します (つまり、次の場合は係数を計算しません)。それらはすでにユーザーによって提供されています)。問題を指摘してくれたお二方に感謝します...

于 2016-07-12T13:55:46.030 に答える