「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

時系列解析の基礎(28/XX)

 以下の書籍

を中心に時系列解析を勉強していきます。

14. 線形・Gauss型状態空間モデルにおける代表的な成分モデル

 状態空間モデルでは、個別の基本的なモデルを部品のように組み合わせて利用することが容易である。

14.6 回帰モデル

 ここでは回帰モデル


\begin{aligned}
y_t=\alpha_t+\beta_{t}^{(1)}x_{t}^{(1)}+\cdots+\beta_{t}^{(n)}x_{t}^{(n)}+\varepsilon_t
\end{aligned}

を考える。
 これは状態空間モデルとしてベクトル・行列表記すると、


\begin{aligned}
\boldsymbol{x}_t&=\begin{bmatrix}\alpha_t\\\beta_t^{(1)}\\\vdots\\\beta_t^{(n)}\end{bmatrix},\\
\mathit{\boldsymbol{G}}_t&=\mathit{\boldsymbol{I}},\\
\mathit{\boldsymbol{W}}_t&=\begin{bmatrix}
W^{(\alpha)}&          &           &           \\
                    &W^{1}&           &            \\
                    &          &\ddots&            \\
                    &          &           &W^{(n)}
\end{bmatrix},\\
\mathit{\boldsymbol{F}}_t&=\begin{bmatrix}1,x_{t}^{(1)},\cdots,x_{t}^{(n)}\end{bmatrix},\\
V_t&=V
\end{aligned}

である。ここで\alpha_t,\beta_{t}^{(i)},i=1,2,\cdots,nはそれぞれ関連が無く独立なランダムウォークに従うと仮定している。

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)

参考文献

  • 沖本竜義(2010)「経済・ファイナンスデータの 計量時系列分析」(朝倉書店)
  • 北川源四郎(2020)「Rによる時系列モデリング入門」(岩波書店
  • 柴田里程(2017)「時系列解析」(共立出版)
  • 白石博(2022)「時系列データ解析」(森北出版)
  • 萩原淳一郎,瓜生真也,牧山幸史[著],石田基広[監修](2018)「基礎からわかる時系列分析 Rで実践するカルマンフィルタ・MCMC・粒子フィルタ」(技術評論社)
プライバシーポリシー お問い合わせ