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-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)
親トピック: データの探索