Structural Equation Modeling(SEM)#
Structural Equation Modeling(SEM)はデータの共分散に着目した統計モデリングの手法である。日本語訳としては共分散構造分析や構造方程式モデリングと呼ばれる。
SEMは正規分布に従う誤差項を仮定する線形モデルを推定することができ、重回帰分析や因子分析などのモデルを構築可能である。
SEMで扱えるモデル#
1. 重回帰分析
いずれも観測変数。目的変数が1つ
2. パス解析
いずれも観測変数。目的変数が複数
3. 因子分析
潜在変数を推定する
4. 共分散構造分析
潜在変数間の回帰も行える
例#
回帰分析#
import semopy
import numpy as np
import pandas as pd
# 適当なデータを生成
n = 1000
np.random.seed(0)
x1 = np.random.uniform(size=n)
x2 = np.random.uniform(size=n)
e = np.random.normal(size=n)
y = 10 + 3 * x1 + 5 * x2 + e
data = pd.DataFrame(dict(y=y, x1=x1, x2=x2))
# モデルを構築
desc = "y ~ x1 + x2"
model = semopy.Model(desc)
model.fit(data)
model.inspect()
lval | op | rval | Estimate | Std. Err | z-value | p-value | |
---|---|---|---|---|---|---|---|
0 | y | ~ | x1 | 2.925376 | 0.105805 | 27.648636 | 0.0 |
1 | y | ~ | x2 | 4.870594 | 0.102847 | 47.357702 | 0.0 |
2 | y | ~~ | y | 0.945340 | 0.042277 | 22.360680 | 0.0 |
# パス図
semopy.semplot(model, filename="/tmp/path_diagram.png")
モデリングで用いる変数の分類#
3つの軸がある
観測変数と潜在変数#
観測変数(observed variable):直接観測することが可能な変数(例:年収、身長など)
潜在変数(latent variable):直接観測することができず、モデルから推定される変数(例:学力、プライドの高さなど)
構造変数と誤差変数#
構造変数:分析の対象となっている構成概念の変動を含んでいる変数
誤差変数:モデルで説明しきれない要因による変動を含む変数
外生変数と内生変数#
外生変数:モデル内で1度も他の変数の結果にならない変数(推定の方程式の左辺に置かれない変数)
内生変数:少なくとも1回は他の変数の結果となる変数
モデリングに用いる方程式#
構造方程式#
構造変数同士の関係性の推定のために用いる。
例えば方程式の両辺が観測変数の場合は回帰分析に相当する。 (潜在変数同士で構造方程式を組むこともできる)
Rの{lavaan}パッケージやPythonのsemopyパッケージでは~
の演算子を用いる。例えば
y ~ x1 + x2
のように表現される
測定方程式#
潜在変数の推定のために用いる
Rの{lavaan}パッケージやPythonのsemopyパッケージでは~~
の演算子を用いる。例えば
f =~ x1 + x2
のように表現される
パス図#
SEMのモデルを視覚的にわかりやすく表現したものがパス図。
記法のルールとしては
観測変数は四角形で囲む
潜在変数は円で囲む
誤差変数は囲まない
影響を与える変数から、与えられる変数に単方向の矢印を書き、矢印に因果の影響力を示す数値を付与する
共変動を示す2つの外生変数に因果関係を仮定しないとき、双方向の矢印を書き、矢印に共分散あるいは相関を示す数値を付与する