以下の書籍
を中心に時系列解析を勉強していきます。
14. 線形・Gauss型状態空間モデルにおける代表的な成分モデル
状態空間モデルでは、個別の基本的なモデルを部品のように組み合わせて利用することが容易である。
14.6 回帰モデル
ここでは回帰モデル
を考える。
これは状態空間モデルとしてベクトル・行列表記すると、
である。ここではそれぞれ関連が無く独立なランダムウォークに従うと仮定している。
14.6.1 実装例
library("ggplot2") library("dlm") dir <- "C:/Users/Julie/Desktop/7974_N225.csv" df_data_org <- read.csv(file = dir,header = T, stringsAsFactors = F, colClasses = c("Date","numeric","numeric")) colnames(df_data_org) <- c("Date","y","x") # 回帰モデルの設定 build_dlm_REG <- function(par){ dlmModReg(X = df_data_org$x, dW = exp(par[1:2]), dV = exp(par[3])) } # 母数の最尤推定とその結果の確認 fit_dlm_REG <- dlmMLE(y = df_data_org$y, parm = rep(0,3), build = build_dlm_REG) fit_dlm_REG mod <- build_dlm_REG(fit_dlm_REG$par) str(mod) # Karman平滑化 dlmSmoothed_obj <- dlmSmooth(y = df_data_org$y, mod = mod) # 参考:通常の回帰をローリング(直近25営業日) params <- rep(NA,24) for (i in 25:nrow(df_data_org)){ sample <- df_data_org[(i-24):i,c(2,3)] ls_fit <- lm(formula = formula("y~x"),data = sample) params <- c(params,summary(ls_fit)$coef["x","Estimate"]) rm(sample) } year_month <- df_data_org$Date # df_beta <- data.frame(date = year_month, est = "回帰(Karman平滑化)" , val = params) df_beta <- rbind(df_beta,data.frame(date = year_month, est = "回帰(25営業日ローリング)" , val = dlmSmoothed_obj$s[-1,2])) # g <- ggplot(data = df_beta,mapping = aes(x = date, y = val, color = est)) g <- g + geom_line() + theme_bw() g <- g + labs(title = "任天堂の対日経平均ベータ(2013年10月~2016年11月)", x = "時点",y = "ベータ値") g <- g + theme(axis.text= element_text(size = 12), axis.text.x=element_text(size = 12), legend.title = element_blank(), legend.text = element_text(size = 12), legend.position = "top", axis.title = element_text(size = 12), axis.title.y = element_text(angle = 90,size = 12), plot.title= element_text(size = 16,hjust = 0.5)) g <- g + geom_hline(yintercept = 0, linetype = 1) g <- g + geom_hline(yintercept = c(-1,1,2,3), linetype = 3) g <- g + scale_x_date(date_breaks = "6 month", date_labels = "%Y/%m") plot(g)