5.2.6 時系列データでの指数平滑法モデルの構築

ore.esm関数は、順序付けられたore.vectorオブジェクトで、インデータベース時系列観測のための単純または二重の指数平滑化モデルを構築します。

この関数は、時系列データ(観測が固定された均等な間隔)、またはトランザクション・データ(観測が均等な間隔ではない)で動作します。この関数は、トランザクション・データを指定された時間間隔で集計でき、モデル化フェーズに移る前に指定された方法で欠損値を処理することもできます。

ore.esm関数は、データベース・サーバーで動作している1つ以上のRエンジンのデータを処理します。この関数は、クラスore.esmのオブジェクトを返します。

predictメソッドを使用して、ore.esmによって構築される指数平滑法モデルの時系列を予測します。forecastパッケージをロード済の場合は、forecastメソッドをore.esmオブジェクトで使用できます。適合メソッドを使用して、トレーニングの時系列データセットの適合値を生成できます。

ore.esm関数の引数の詳細は、help(ore.esm)をコールしてください。

例5-42 二重指数平滑法モデルの構築

この例では、統合時系列データセットに基づいて二重指数平滑法モデルを構築します。予測および適合値を生成するために、predict関数およびfitted関数がそれぞれ呼び出されます。次の図に、観測、適合値および予測を示します。

N <- 5000
ts0 <- ore.push(data.frame(ID=1:N,
                           VAL=seq(1,5,length.out=N)^2+rnorm(N,sd=0.5)))
rownames(ts0) <- ts0$ID
x <- ts0$VAL
esm.mod <- ore.esm(x, model = "double")
esm.predict <- predict(esm.mod, 30)
esm.fitted <- fitted(esm.mod, start=4000, end=5000)
plot(ts0[4000:5000,], pch='.')
lines(ts0[4000:5000, 1], esm.fitted, col="blue")
lines(esm.predict, col="red", lwd=2)

図5-1 esm.modモデルに基づいた適合値および予測値

図5-1の説明が続きます
「図5-1 esm.modモデルに基づいた適合値および予測値」の説明

例5-43 トランザクション・データを使用した時系列モデルの構築

この例では、トランザクション・データセットに基づいて単純平滑法モデルを構築します。事前処理として、平均を取ることで値を日レベルで集計し、欠損値に以前の集計値を設定して埋めます。このモデルは次に、集計された日次時系列に構築されます。関数predictは、日毎に予測値を生成するためにコールされます。

ts01 <- data.frame(ID=seq(as.POSIXct("2008/6/13"), as.POSIXct("2011/6/16"), 

                   length.out=4000), VAL=rnorm(4000, 10))

ts02 <- data.frame(ID=seq(as.POSIXct("2011/7/19"), as.POSIXct("2012/11/20"),

                   length.out=1500), VAL=rnorm(1500, 10))

ts03 <- data.frame(ID=seq(as.POSIXct("2012/12/09"), as.POSIXct("2013/9/25"),

                   length.out=1000), VAL=rnorm(1000, 10))

ts1 = ore.push(rbind(ts01, ts02, ts03))

rownames(ts1) <- ts1$ID

esm.mod <- ore.odmESM(VAL~., ts1, odm.settings = list(case_id_column_name = "ID", exsm_interval = "EXSM_INTERVAL_DAY",  EXSM_ACCUMULATE = "EXSM_ACCU_AVG", EXSM_MODEL="EXSM_SIMPLE", EXSM_SETMISSING = "EXSM_MISS_PREV"))

esm.predict <- esm.mod$prediction

esm.predict

この例のリスト

R> ts01 <- data.frame(ID=seq(as.POSIXct("2008/6/13"), as.POSIXct("2011/6/16"), 

                   length.out=4000), VAL=rnorm(4000, 10))

R> ts02 <- data.frame(ID=seq(as.POSIXct("2011/7/19"), as.POSIXct("2012/11/20"),

                   length.out=1500), VAL=rnorm(1500, 10))

R> ts03 <- data.frame(ID=seq(as.POSIXct("2012/12/09"), as.POSIXct("2013/9/25"),

                   length.out=1000), VAL=rnorm(1000, 10))

R> ts1 = ore.push(rbind(ts01, ts02, ts03))

R> rownames(ts1) <- ts1$ID

R> esm.mod <- ore.odmESM(VAL~., ts1, odm.settings = list(case_id_column_name = "ID", exsm_interval = "EXSM_INTERVAL_DAY",  EXSM_ACCUMULATE = "EXSM_ACCU_AVG", EXSM_MODEL="EXSM_SIMPLE", EXSM_SETMISSING = "EXSM_MISS_PREV"))

R> esm.predict <- esm.mod$prediction

R> esm.predict
           ID      VAL
1  2013-09-26 9.962478
2  2013-09-27 9.962478
3  2013-09-28 9.962478
4  2013-09-29 9.962478
5  2013-09-30 9.962478
6  2013-10-01 9.962478
7  2013-10-02 9.962478
8  2013-10-03 9.962478
9  2013-10-04 9.962478
10 2013-10-05 9.962478
11 2013-10-06 9.962478
12 2013-10-07 9.962478

例5-44 間隔を指定した二重指数平滑法モデルの構築

この例では、TTRパッケージの株のデータを使用します。これは、日ごとの株の終値に基づいて二重指数平滑法モデルを構築します。30日間の予測株価および元の観測を次の図に示します。

library(TTR)
stock_list <- c("ORCL") 
start_date <- Sys.Date()-365
end_date <- Sys.Date()
getSymbols(stock_list, verbose = TRUE, src = "yahoo",from=start_date,to=end_date)
xts.data <- get(stock_list)
df.data <- data.frame(xts.data)
df.data$date <- index(xts.data)
of.data <- ore.push(df.data[, c("date", "ORCL.Close")])
rownames(of.data) <- of.data$date
esm.mod <- ore.odmESM(ORCL.Close~., of.data, odm.settings = list(case_id_column_name = "date", exsm_interval = "EXSM_INTERVAL_DAY",EXSM_MODEL="EXSM_SIMPLE"))
value <- ore.pull(summary(esm.mod)$prediction$"PREDICTION")
esm.fitted=value[1:251]
esm.predict <- value[251:252]
plot(esm.fitted,type="l")
lines(251:252,esm.predict,col="red",lwd=4)