我使用的语言是 R,但您不一定需要了解 R 来回答问题。
问题: 我有一个序列可以被认为是基本事实,另一个序列是第一个序列的移位版本,有一些缺失值。我想知道如何对齐两者。
设置
我有一个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
我有第二个序列observations
,它ground.truth
移动了 20% 的值缺失:
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
不是(即修改以确保它没有 1)。 ground.truth[1]
idx_to_keep
这种转变theLag
不应该影响互相关(不是ccf(x,y) == ccf(x,y-constant)
吗?)所以我打算稍后再解决。
不过,也许我误解了,因为observations
它的价值不如ground.truth
? 即使在我设置的更简单的情况下theLag==0
,互相关函数仍然无法识别正确的滞后,这让我相信我正在考虑这个错误。
有没有人有一个通用的方法来解决这个问题,或者知道一些可以提供帮助的 R 函数/包?
非常感谢。