有没有针对某些函数计算周期的 R 包? 我正在寻找像这样的 R 函数:
x <- seq(0, 50, by = 0.05)
y <- sin(x)
p <- calcPeriod(x, y) # result = 2pi
我认为你正在寻找类似于快速傅里叶变换的东西。虽然我不是专家,但我认为你可以按照以下方式进行操作:
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
函数实际上仅仅识别最大周期性。对于不均匀采样的序列,最小二乘谱分析也可以确定主导周期性(示例链接)。
Paul H.的回答提醒我,如果您不想处理傅里叶分析,您可以运行nls(y~sin(k*x))
或其增强版本。这假设您事先知道数据中只有一个频率。
我会在这里推荐Eureqa
,您可以通过谷歌轻松找到它在Cornell.edu上的页面。
我个人不知道有这样的函数,但是你可以使用optim
来优化一个以周期为参数的成本函数。 optim
会调整周期直到获得最佳拟合。这并不难做,而且你可以自己将其封装成一个名为calcPeriod
的函数。