Yoshi Nishikawa Blog

医学となにかのインタラクティブ

Rを使って時系列データの変化点をみつける: changepoint

時系列データを扱う時に、変化点を見つけたいことがある。

Rにchangepointというパッケージがあるので、実装してみる。

  • 1つのchangepointはdefaultのmethod = AMOCで良い。

  • 複数のchangepointであれば、methodでPELT, SegNeighやBinSegを指定すれば良い。

#install.packages("changepoint")
library(changepoint)

# change in variance
x=c(rnorm(100,0,3),rnorm(100,0,10))
res1=cpt.var(x, )
plot(res1)
print(res1) 

# change in mean
y=c(rnorm(100,0,1),rnorm(100,7,1))
res2=cpt.mean(y)
plot(res2,cpt.col='blue')
print(res2)

# change in mean and variance
z=c(rnorm(100,0,1),rnorm(100,3,7))
res3=cpt.meanvar(z)
plot(res3,cpt.width=3)
print(res3)

# change in mean and variance, multiple changepoints
w=c(rnorm(100,0,1),rnorm(100,3,7), rnorm(100,-5,1))
res4=cpt.meanvar(w, Q=2, method = "PELT")
plot(res4)
print(res4)

f:id:yoshi_nishikawa:20171015153141p:plain

f:id:yoshi_nishikawa:20171015153200p:plain

f:id:yoshi_nishikawa:20171015153216p:plain

f:id:yoshi_nishikawa:20171015154151p:plain