Rで時系列分析:移動平均モデル MA(q)

Rでデータサイエンス

MA(q)

移動平均モデル

\[y_t=\epsilon_t+\theta_1\epsilon_{t-1}+\theta_2\epsilon_{t-2}+\cdots+\theta_q\epsilon_{t-q}\]

参考引用資料

  • 加藤久和(2012),『gretlで計量経済分析』,日本評論社,pp.134-136

MAモデルのシミュレーション

library(dplyr)
library(ggplot2)
func_sim_ma <- function(p,n,b_min,b_max,method = 'convolution'){
  # convolution:畳み込み
  # 係数
  b <- seq(b_min,b_max,0.001) %>% sample(size = p);b
  # 撹乱項
  epsilon <- rnorm(n);epsilon
  # MA
  # 『もし sides=1 ならフィルタ係数は過去の値にだけ使われる.もし sides=2 なら係数はラグ 0 の周りに中心化される.』(引用参考資料より)
  x <- stats::filter(x = epsilon,filter = c(1,b),method = method,sides = 1)
  x[1:p] <- epsilon[1:p]
  return(list(b = b,epsilon = epsilon,x = x))
}
# ラグ次数
p <- 2
# サンプルサイズ
n <- 100
# 係数の下限
b_min <- -0.5
# 係数の上限
b_max <- 0.5
result <- func_sim_ma(p = p,n = n,b_min = b_min,b_max = b_max)
b <- result$b;b
ep <- result$epsilon
x <- result$x %>% as.vector();head(x)
df <- data.frame(n = seq(length(x)),x = x)
colnames(df)[2] <- paste0('b = ',paste0(b,collapse = ',') )#;head(df)
ggplot(mapping = aes(x = df[,1],y = df[,2])) + geom_line(size = 0.1) + geom_point(size = 1) + 
  theme(axis.title = element_blank()) + labs(title = colnames(df)[2])
[1] -0.059  0.204
[1] -0.98030501 -1.28402116 -0.27837554  0.35084818  1.38747128  0.07706962
Figure 1
# 確認
b %*% ep[3-1:2] + ep[3]
x[3]
           [,1]
[1,] -0.2783755
[1] -0.2783755
# 確認
b %*% ep[100-1:2] + ep[100]
x[100]
         [,1]
[1,] 0.181366
[1] 0.181366

参考引用資料

最終更新

Sys.time()
[1] "2024-04-26 08:28:31 JST"

R、Quarto、Package

R.Version()$version.string
[1] "R version 4.3.3 (2024-02-29 ucrt)"
quarto::quarto_version()
[1] '1.4.553'
packageVersion(pkg = "tidyverse")
[1] '2.0.0'

著者