私が使用している言語は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_keep1が含まれていないことを確認するために変更します)。
シフトtheLagは相互相関に影響を与えないはずなので(そうではありませんccf(x,y) == ccf(x,y-constant)か?)、後で解決するつもりでした。
おそらく私は誤解しています。なぜなら、その中にobservationsはそれほど多くの値がないからground.truthですか?を設定したより単純なケースでもtheLag==0、相互相関関数は正しいラグを識別できないため、これは間違っていると考えています。
誰かが私がこれについて取り組むための一般的な方法論を持っていますか、または役立つかもしれないいくつかのR関数/パッケージを知っていますか?
どうもありがとう。