在 R 中的谱密度周期图中计算的置信区间是多少?

机器算法验证 r 时间序列 置信区间
2022-04-10 21:56:17

这个问题类似于这里提出的问题: Testingsignificance of peaks in spectrum density

在那篇文章中,Pantera 询问如何测试周期图中的峰值是否具有与噪声产生的峰值显着不同的峰值。

我的问题是,当在 R 中使用 spec.pgram() 函数时,会计算置信区间并将其绘制为蓝线——这个区间的正确解释是什么,我们如何提取它的数值?

我看到它建议要找到这个问题的答案,我们应该检查 plot.spec() 函数的代码,然后观察 spec.ci() 函数代码,并从那里弄清楚。

spec.ci <- function(spec.obj, coverage = 0.95) {
      if (coverage < 0 || coverage >= 1) 
          stop("coverage probability out of range [0,1)")
      tail <- (1 - coverage)
      df <- spec.obj$df
      upper.quantile <- 1 - tail * pchisq(df, df, lower.tail = FALSE)
      lower.quantile <- tail * pchisq(df, df)
      1/(qchisq(c(upper.quantile, lower.quantile), df)/df)
  }

由 specpgram 生成的图

我怀疑 CI 的高度是 95% 数据小于的幅度的某种指示。但那的“基线”是什么?是否可以计算并在图中添加水平线以指示哪些峰是显着的?任何帮助将不胜感激。就上下文而言,我是一名生物学家,这些数据来自昆虫节律行为的成像。

1个回答

通过检查源代码,您走在了正确的轨道上。除了spec.ci您找到的函数之外,CI 的绘图块由下式给出

ci.text <- ""
conf.y <- max(x$spec)/conf.lim[2L]
conf.x <- max(x$freq) - x$bandwidth
lines(rep(conf.x, 2), conf.y * conf.lim, col = ci.col)
lines(conf.x + c(-0.5, 0.5) * x$bandwidth, rep(conf.y, 2), col = ci.col)

因此,置信区间大约是单个参数,其中被认为是固定频率给定频率的置信区间公式是(参见 Brockwell & Davis Time Series: Theory and Methods的公式 (10.5.2) ): 其中估计器的等效自由度,对应于您粘贴在问题中的代码。f(ω)ωconf.xω

(νf^(ω)χ1α/22(ν),νf^(ω)χα/22(ν)),0<ω<π,
νf^df