一部の関数の計算期間用の 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))
か、その拡張バージョンを実行できることを思い出させてくれました。これは、データに周波数が 1 つしかないことを事前に知っていることを前提としています。
いつも使っている のプラグをここに置きEureqa
ます。これは、Google 経由で Cornell.edu で簡単に見つけることができます。
私自身はそのような関数を認識していませんoptim
が、期間をパラメーターとして取るコスト関数を最適化するために使用できます。optim
次に、最適な適合が得られるまで期間を微調整します。これはそれほど難しいことではなく、calcPeriod
自分で関数にラップすることができます。