私が使用している言語はRですが、質問に答えるために必ずしもRについて知っている必要はありません。
質問: グラウンドトゥルースと見なすことができるシーケンスと、最初のシーケンスのシフトバージョンであり、いくつかの値が欠落している別のシーケンスがあります。2つを揃える方法を知りたいのですが。
設定
ground.truth
基本的に一連の時間であるシーケンスがあります。
ground.truth <- rep( seq(1,by=4,length.out=10), 5 ) +
rep( seq(0,length.out=5,by=4*10+30), each=10 )
ground.truth
私が次のことをしているときと考えてください。
{take a sample every 4 seconds for 10 times, then wait 30 seconds} x 5
2番目のシーケンスobservations
があります。これは値の20%が欠落している状態でground.truth
シフトされています。
nSamples <- length(ground.truth)
idx_to_keep <- sort(sample( 1:nSamples, .8*nSamples ))
theLag <- runif(1)*100
observations <- ground.truth[idx_to_keep] + theLag
nObs <- length(observations)
これらのベクトルをプロットすると、次のようになります(覚えておいてください、これらを時間と考えてください)。
私が試したこと。私がしたい:
- シフトを計算します(
theLag
上記の私の例では) idx
次のようなベクトルを計算しますground.truth[idx] == observations - theLag
まず、私たちが知っていると仮定しtheLag
ます。ground.truth[1]
必ずしもそうではないことに注意してくださいobservations[1]-theLag
。実際、私たちground.truth[1] == observations[1+lagI]-theLag
はいくつかのために持っていlagI
ます。
ccf
これを計算するには、相互相関(関数)を使用すると思いました。
ただし、これを行うと、最大でラグが発生します。0の相互相関、つまりground.truth[1] == observations[1] - theLag
。しかし、これを明示的に確認してobservations[1] - theLag
いない 例でこれを試しましたground.truth[1]
(つまり、idx_to_keep
1が含まれていないことを確認するために変更します)。
シフトtheLag
は相互相関に影響を与えないはずなので(そうではありませんccf(x,y) == ccf(x,y-constant)
か?)、後で解決するつもりでした。
おそらく私は誤解しています。なぜなら、その中にobservations
はそれほど多くの値がないからground.truth
ですか?を設定したより単純なケースでもtheLag==0
、相互相関関数は正しいラグを識別できないため、これは間違っていると考えています。
誰かが私がこれについて取り組むための一般的な方法論を持っていますか、または役立つかもしれないいくつかのR関数/パッケージを知っていますか?
どうもありがとう。