3

某些函数的计算周期是否有任何 R 包?我正在寻找这样的 r 函数:

x <- seq(0, 50, by = 0.05)
y <- sin(x)
p <- calcPeriod(x, y) # result = 2pi
4

3 回答 3

5

我认为您正在寻找类似于快速傅立叶变换的东西。我不是专家,但我认为您可以按照以下方式做一些事情:

x <- seq(0, 50, by = 0.05)
y <- sin(x)

calcPeriod <- function(x, y){
    incr <- x[2] - x[1]
    tmp <- spectrum(y, plot=FALSE)
    p <- (1/tmp$freq*incr)[which.max(tmp$spec)] # max of spectrum
    p
}

calcPeriod(x,y) # equals 6.4

该函数spectrum实际上是spec.pgram和的包装函数spec.ar。请谨慎使用,因为该calcPeriod功能实际上仅识别最大周期。对于不均匀采样的系列,最小二乘谱分析也可以识别主要的周期性(示例链接)。

于 2013-01-17T10:20:53.427 回答
1

Paul H. 的回答提醒我,如果您不想处理傅立叶分析,您可以随时运行nls(y~sin(k*x)) 或其增强版本。这确实假设您事先知道数据中只有一个频率。

我会把我常用的插件放在这里Eureqa,很容易通过谷歌在 Cornell.edu 上找到。

于 2013-01-17T12:39:56.160 回答
0

我自己不知道这样的函数,但您可以使用它optim来优化以周期为参数的成本函数。optim然后会调整周期,直到获得最佳拟合。这不是很难做到,你可以calcPeriod自己把它包装成一个函数。

于 2013-01-17T10:03:54.133 回答