Skip to content

MA モデル

2026-07-02 ・ SAWADA時系列解析計量経済学

Moving Average (MA)の基本 ​

  • 過去のランダムな予測誤差の蓄積を用いて現在の値を予測する統計モデル
  • ホワイトノイズを拡張したもので、ホワイトノイズの線形和で表される

移動平均 ​

yt=yt+yt−1+⋯+yt−q+1q
  • MAは誤差項の(加重)移動平均を考えたもの

MA(1) ​

yt=μ+ϵt+θ1ϵt−1ϵt∼W.N.(σ2)
  • ytがMA(1)過程に従うことはyt∼MA(1)と表される
  • これは定常過程yt=μ+ϵt,ϵt∼W.N.(σ2)にθ1ϵt−1という項が追加されたもの

MA(q) ​

yt=μ+ϵt+θ1ϵt−1+⋯+θqϵt−qϵt∼W.N.(σ2)
  • 現在とq期間の過去のホワイトノイズ線形和に定数を加えたもの

ARとの比較 ​

AR(p):yt=v+ϕ1yt−1+⋯+ϕpyt−p+ϵt

  • MAは過去のショックϵt,ϵt−1,…が現在に影響
  • ARでは過去の観測値yt−1,yt−1,…が現在に影響
  • MA(q)ではショックの影響は最大q期で消えるが、ARではショックの影響がだんだん小さくなりながら残ることがある
  • ARモデルはMA(∞)で表現できる
    • yt=v+ϕyt−1+ϵtに一期前の式を代入していく
    yt=v+ϕ(v+ϕyt−2+ϵt−1)+ϵtyt=v+ϕv+ϵt+ϕϵt−1+ϕ2yt−2
    • 繰り返すと以下を得る:
    yt=v1−ϕ+ϵt+ϕϵt−1+ϕ2ϵt−2+ϕ3ϵt−3+…=μ+∑j=0∞ϕjϵt−j
    • ここでϕjはIRF
  • Wold分解:定常時系列なら、そのランダムな部分は一般にMA(∞)で表せる

MAの性質 ​

  1. E[yt]=μ
  2. γ0=Var(yt)=(1+θ12+⋯+θq2)σ2
  3. γk={(θk+θ1θk+1+⋯+θq−kθq)σ21≤k≤q0k≥q+1
  4. MA過程は常に定常である
  5. ρk={θk+θ1θk+1+⋯+θq−kθq1+θ12+⋯+θq21≤k≤q0k≥q+1

問題点 ​

  • 長期間にわたる自己相関をパラメータ化するには多くのパラメータが必要
  • 観測できないホワイトノイズの線形和で表されるため解釈が難しい
  • 同様の理由でモデルの推定や予測が複雑になる

Moving Average (MA)の2つの表現 ​

MA(2):yt=εt+θ1εt−2+θ2εt−2

1. y=B(θ)ε ​

  • 行列でまとめて計算

  • 4×4であれば:

    (y0y1y2y3)=(1000θ1100θ2θ1100θ2θ11)(ε0ε1ε2ε3)

    これを計算すると:

  y0=ε0,  y1=ε1+θ1ε0,  y2=ε2+θ1ε1+θ2ε0,y3=ε3+θ1ε2+θ2ε1.

となり、確かにMA(2)の式になっている

python
def simulate_ma2_convolution(theta1, theta2, n=300, sigma=1.0, seed=123):
    np.random.seed(seed)

    e = np.random.normal(0, sigma, n)

    b_theta = np.zeros((n, n))

    for t in range(n):
        b_theta[t, t] = 1.0

        if t - 1 >= 0:
            b_theta[t, t - 1] = theta1

        if t - 2 >= 0:
            b_theta[t, t - 2] = theta2

    y = b_theta @ e

    return y

2. yt=Hξt,ξt=Fξt−1+Gεt ​

  • 状態空間で表現
  • 観測方程式:
yt=(1θ1θ2)(εtεt−1εt−2)
  • 状態遷移方程式:
ξt=Fξt−1+Gεt=(000100010)(εt−1εt−2εt−3)+(100)(εt00)=(εtεt−1εt−2)
python
def simulate_ma2_state_space(theta1, theta2, n=300, sigma=1.0, seed=123):
    np.random.seed(seed)

    e = np.random.normal(0, sigma, n)
    y = np.zeros(n)
    xi = np.zeros(3)

    H = np.array([1.0, theta1, theta2])

    F = np.array(
        [
            [0.0, 0.0, 0.0],
            [1.0, 0.0, 0.0],
            [0.0, 1.0, 0.0],
        ]
    )

    G = np.array([1.0, 0.0, 0.0])

    for t in range(n):
        xi = F @ xi + G * e[t]
        y[t] = H @ xi

    return y
  • 前者は全期間を一括で計算しているのに対し、後者は1期ずつ逐次計算している
  • 得られる結果は同じ

MA(1), MA(2), MA(3)のシミュレーション ​

MA(1) ​

MA(2) ​

MA(3) ​

yt=εt+θ1εt−1+θ2εt−2+θ3εt−3εt∼N(0,σ2)

行列で表すと、

y=B(θ)ε

n=4なら、

(y0y1y2y3)=(1000θ1100θ2θ110θ3θ2θ11)(ε0ε1ε2ε3)

MAの由来 ​

  • Slutzky(1937)
    • 1927年にロシア語で発表、1937年Economerica
  • Wold(1938)p87-93
    • 式(176)が現在Wold分解と呼ばれるもの{ξ(t)}={ζ(t)}+{ψ(t)}

MAのAutocorrelation Function (ACF) ​

(再掲)

  • 定常時系列{y1,…,yN}が与えられたとき、平均、自己共分散関数、自己相関関数は以下のように推定できるμ^=1N∑n=1NynC^k=1N∑n=k+1N(yn−μ^)(yn−k−μ^)R^k=C^kC^0
  • コレログラムとは標本自己相関を図示したもの:横軸k、縦軸k次の標本自己相関

MA(1) ​

MA(2) ​

(θ1,θ2)=(0.0,0.0)

$(\theta_1,\theta_2)=(0.0,0.8)$ $(\theta_1,\theta_2)=(0.8,0.0)$ $(\theta_1,\theta_2)=(0.8,0.5)$

MA(3) ​

(θ1,θ2,θ3)=(0.0,0.0,0.0)

$(\theta_1,\theta_2,\theta_3)=(0.6,0.3,0.2)$ $(\theta_1,\theta_2,\theta_3)=(0.8,0.0,0.0)$ $(\theta_1,\theta_2,\theta_3)=(-0.8,0.6,-0.4)$
  • 理論上はq以内でコレログラムが切れるはず
  • q期間であれば誤差項の影響が最大qで終わるから
  • (標本自己相関を図示しているため、図では綺麗に切れていない)