meineko’s blog

元つくばの某独立行政法人勤務の植物屋です。最近は、ほぼ、突発天体の話題です。

Rで周期解析(修正版)

上記のは、計算式が違ってました。
Mhhさんのアドヴァイスに従って修正しました。
#自乗して、マイナスで大きいのをプラスに変えるのか。

データ読み込む部分は同じです。

>d <- read.csv("cygchi.csv", header=F)


正しい、pergrmです。

pergrm <- function(d,start,end,div) {
    d$V2 <- d$V2 - mean(d$V2)
    p <- seq(start,end,length=div+1)
    pw <- numeric(div+1)
    for (i in 1:(div+1)) {
        tp <- p[i]
        ph <- ((d$V1/tp) %% 1)*pi*2
        ss <- sin(ph)
        cc <- cos(ph)
        s <- sum(d$V2*ss)^2 + sum(d$V2*cc)^2
        pw[i] <- s
    }
    return(data.frame(period=p,power=pw))
}

> pgm <- pergrm(d,300,800,2000)
> plot(pgm,type="l")

> pgm$period[which.max(pgm$power)]
[1] 408.5

おぉ、今度は、408日になった。
疑ってごめんね>GCVS

もうちょっと、細かく。

> pgm <- pergrm(d,400,420,2000)
> plot(pgm,type="l")

> pgm$period[which.max(pgm$power)]
[1] 408.62


(追記)
離散フーリエ変換(DFT)って、言うらしいです。