library(dplyr)
library(ggplot2)
<- function(p,n,b_min,b_max,method = 'convolution'){
func_sim_ma # convolution:畳み込み
# 係数
<- seq(b_min,b_max,0.001) %>% sample(size = p);b
b # 撹乱項
<- rnorm(n);epsilon
epsilon # MA
# 『もし sides=1 ならフィルタ係数は過去の値にだけ使われる.もし sides=2 なら係数はラグ 0 の周りに中心化される.』(引用参考資料より)
<- stats::filter(x = epsilon,filter = c(1,b),method = method,sides = 1)
x 1:p] <- epsilon[1:p]
x[return(list(b = b,epsilon = epsilon,x = x))
}
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モデルのシミュレーション
# ラグ次数
<- 2
p # サンプルサイズ
<- 100
n # 係数の下限
<- -0.5
b_min # 係数の上限
<- 0.5
b_max <- func_sim_ma(p = p,n = n,b_min = b_min,b_max = b_max)
result <- result$b;b
b <- result$epsilon
ep <- result$x %>% as.vector();head(x)
x <- data.frame(n = seq(length(x)),x = x)
df 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
# 確認
%*% ep[3-1:2] + ep[3]
b 3] x[
[,1]
[1,] -0.2783755
[1] -0.2783755
# 確認
%*% ep[100-1:2] + ep[100]
b 100] x[
[,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_version() quarto
[1] '1.4.553'
packageVersion(pkg = "tidyverse")
[1] '2.0.0'