回帰分析#

単回帰モデル#

ある変数x2を別の変数x1から予測する問題を考える。

x2=αx1+β+e

x1予測変数(predictor variable)、x2基準変数(criterion variable)と呼ばれる確率変数である。

eは予測誤差を表現する確率変数であり誤差変数といい、以下の性質を仮定する。

  • E[e]=0(誤差は正負バランスよく出現する)

  • E[ex1]=0(予測変数の値が大きくても小さくても誤差は大きくなったり小さくなったりする傾向はない)

パラメータの推定には最尤法や最小二乗法やモーメント法などが使われる

モーメント法による単回帰モデルの推定#

単回帰モデルの両辺の期待値をとると

E[x2]=αE[x1]+E[β]+E[e]=0β=E[x2]αE[x1]

となる。

次に、単回帰モデルの両辺にx1をかけてから期待値をとると

E[x2x1]=αE[x1x1]+βE[x1]+E[ex1]=0

β=E[x2]αE[x1]を代入すると

E[x2x1]=αE[x1x1]+E[x1](E[x2]αE[x1])=αE[x12]+E[x1]E[x2]αE[x1]2=E[x1]E[x2]+α(E[x12]E[x1]2)=E[x1]E[x2]+αV[x1]E[x2x1]E[x1]E[x2]=αV[x1]

分散は

V[x]=E[x2]E[x]2E[x2]=V[x]E[x]2

であり、

Σ=E[(xμ)(xμ)]=E[xx]E[x]μμE[x]+μμ=E[xx]2μμ+μμ=E[xx]μμ

であり、2変数だと

Σ=E[(x1x2)(x1x2)](E[x1]E[x2])(E[x1]E[x2])=(E[x12]E[x1x2]E[x2x1]E[x22])(E[x1]2E[x1]E[x2]E[x2]E[x1]E[x2]2)

であることを利用すると

E[x2x1]E[x1]E[x2]=αV[x1]V[x1x2]=αV[x1]α=V[x1x2]V[x1]

推定では標本の統計量を用いて

α^=s21s12β^=x¯2α^x¯1

とする。

import semopy
import numpy as np
import pandas as pd

# 適当なデータを生成
n = 1000
np.random.seed(0)
x = np.random.uniform(size=n)
e = np.random.normal(size=n)
y = 10 + 3 * x + e
data = pd.DataFrame(dict(y=y, x=x))

# モデルを構築
desc = "y ~ x"
model = semopy.Model(desc)
model.fit(data)
model.inspect()
lval op rval Estimate Std. Err z-value p-value
0 y ~ x 2.903337 0.105092 27.626547 0.0
1 y ~~ y 0.932673 0.041710 22.360680 0.0
# パス図
semopy.semplot(model, filename="/tmp/path_diagram.png")
../../_images/e99bc1fe1f14cea67fe7387c946f2e77ada8a679b16cdd5681c3f610d3e2665c.svg