我最初将其发布在 stackoverflow.com 上,然后将其删除并移至此处
我的问题类似于 两个离散傅立叶变换的相似性(特别是选定的答案)。我还从这个 R 帮助线程中收集了一些有用的信息。
然而,我坚持这个过程的实际实施。
我有两个傅立叶级数;我的最终目标是计算加权相干性的总和。(实际上我有数百万个与像素对应的系列,但是,我们现在只称它为两个)。
TS1 <- c(5051.29, 5355.31, 5602.18, 5784.4, 5896.45, 5934.9, 5898.6,
5788.64, 5608.37, 5363.27, 5060.78, 4710.09, 4321.86, 3907.89,
3480.75, 3053.42, 2638.89, 2249.75, 1897.82, 1593.81, 1346.93,
1164.71, 1052.67, 1014.21, 1050.52, 1160.47, 1340.74, 1585.84,
1888.33, 2239.02, 2627.25, 3041.22, 3468.36, 3895.69, 4310.22,
4699.36, 5051.29)
TS2 <- c(4192.83, 4532.62, 4836.41, 5094.96, 5300.41, 5446.53, 5528.88,
5544.95, 5494.25, 5378.33, 5200.71, 4966.78, 4683.65, 4359.93,
4005.45, 3630.98, 3247.9, 2867.85, 2502.38, 2162.59, 1858.8,
1600.25, 1394.8, 1248.67, 1166.33, 1150.26, 1200.95, 1316.87,
1494.5, 1728.43, 2011.55, 2335.28, 2689.76, 3064.23, 3447.31,
3827.36, 4192.83)
从上面的链接我看到我需要计算每个频率的交叉谱的相干性,并对具有更高功率谱密度的频率进行加权。
我知道我可以从
spectrum(data.frame(TS1, TS2))$spec
我知道我可以使用以下方法提取连贯性:
spectrum(data.frame(TS1, TS2))$coh
我可以看到提取的相干性值始终等于 1。似乎对此的“解决方案”是以某种方式滞后时间序列。
我不确定如何 1)计算最佳滞后,特别是因为我希望它在所有相干性计算中具有可比性,以及 2)如何在频谱()中指定滞后。spec.pgram 采用“跨度”,但这些似乎更多地与平滑而不是偏移有关。
我尝试了此处定义的最大 ccf 函数,但在许多情况下(不在我提供的示例集中,您必须相信我)返回的“最佳滞后”为 0,这是有道理的,因为 ccf 为 1,但实际上并不是我想要的。
我应该使用acf()还是ccf()手动计算相干性?我需要执行哪些步骤(R 函数会非常有用)才能从我所在的位置获得单个加权相干值?
