共分散構造分析

共分散構造分析(SEM)の概要

タグ polars 共分散構造分析 構造方程式モデリング


概要

  • 昔からある分析手法の一つ
  • pythonで実行できるライブラリとしてsemopyがある
  • 複雑な変数同士の有方向グラフでの相関を見ることができる
    • Marketing Mix Modelingの使い方に少し近い
  • 測定モデル
    • 複数の特徴量を束ねて一つの潜在変数を表す
  • 構造モデル
    • 潜在変数間の因果関係を示す
  • 作成したモデルは当てはまりの良さを評価することができる
    • χ2, RMSEA, CFI, TLI, NFI, GFIなどの指標がある

測定モデルの式

"""
LatentVar1 =~ ObsVar1 + ObsVar2 + ObsVar3
LatentVar2 =~ ObsVar4 + ObsVar5 + ObsVar6
"""
  • ObsVar; 特徴量
  • LatentVar; 潜在変数

構造モデル

"""
LatentVar3 ~ LatentVar1 + LatentVar2
"""
  • Var1Var2Var3の因果になっているというモデル

pythonライブラリ, semopyインストール

$ python3 -m pip install somopy

semopyの使い方

  • データをpandasのデータフレームで用意する
  • カラム名を変数名としてネットワークを定義する
  • ネットワークに対してフィットして結果を確認

具体例

import semopy

data = semopy.examples.political_democracy.get_data()
desc = semopy.examples.political_democracy.get_model()
model = semopy.Model(desc)
res = model.fit(data)

# 非標準化係数のパス図可視化
g = semopy.semplot(model, "tmp.png", plot_covs=False)
display(g)

# 標準化係数のパス図可視化
g = semopy.semplot(model, "tmp.png", plot_covs=False, std_ests=True)
display(g)

# モデルの当てはまりを評価
stats = semopy.calc_stats(model)
display(stats)

# モデルの係数・標準誤差・p値を確認
display(model.inspect())

# 標準化係数の係数・標準誤差・p値を確認
display(model.inspect(std_ests=True))

Google Colab

参考