MIMICモデル & PLSモデル#
多重指標モデル#
複数の観測変数によって測定される構成概念(潜在変数)同士の関係性を回帰分析にかけるようなモデル
正準相関分析モデル#
複数の潜在変数同士の相関関係を分析するモデルを 正準相関分析(Canonical Correlation Analysis: CCA) モデルという(豊田 (1991))。
MIMICモデル#
MIMIC (Multiple Indicator Multiple Cause) モデルは、観測変数\(x4,x5,x6\)をまとめた合成変数\(f1\)(共通因子)を別の観測変数\(x1,x2,x3\)に回帰するという、因子分析と回帰分析を組み合わせたようなモデル。
歴史#
経済学者のArthur Goldbergerが統計学者との共著で1975年に提案
関連文献#
ManskiによるGoldbergerの業績についての記述
GoldbergerはMIMICモデルだけでなく、”mean independence”の提案やSelection Biasに関する研究など因果推論への貢献も多いとのこと
PLSモデル (Partial Least Square Model)#
MIMICモデルにおける合成変数を別の因子の説明に使ったもの。
観測変数の線形和による合成変数(作成した指標)が別の共通因子にどのくらい影響しているかを測る。
観測変数をまとめた合成変数から、別の複数の観測変数の潜在変数に与える影響の強さを検討するモデル
多重指標モデルでは「潜在変数→観測変数」というパス(観測変数に共通する潜在的な因子)を引いて測定するのみだった。 PLSでは「潜在変数→観測変数」という方向のパスだけでなく「観測変数→潜在変数」の方向のパスも両方含まれる
semopyによる実行例#
import numpy as np
import pandas as pd
# データ生成
n = 1000
np.random.seed(0)
r_12 = 0.1 # x1とx2の関連性(f1)
x1 = np.random.normal(size=n)
x2 = r_12 * x1 + np.random.uniform(size=n)
r_f1f2 = 0.5 # f1とf2の関連性
r_34 = 0.5 * r_f1f2
x3 = np.random.normal(size=n)
x4 = r_34 * x3 + np.random.uniform(size=n)
data = pd.DataFrame(dict(x1=x1, x2=x2, x3=x3, x4=x4))
f1の分散は0に固定する(誤差項を想定せず、単なる重み付き和による合成変数ということ)
※このような定数に固定した母数は**固定母数(fixed parameter)**という
import semopy
desc = """
f1 ~ x1 + x2
f2 =~ x3 + x4
f1 =~ f2
f1 ~~ 0*f1
f2 ~~ f2
x1 ~~ x1
x2 ~~ x2
x3 ~~ x3
x4 ~~ x4
x1 ~~ x2
x3 ~~ x4
"""
model = semopy.Model(desc)
model.fit(data)
model.inspect(std_est=True).round(2)
lval | op | rval | Estimate | Est. Std | Std. Err | z-value | p-value | |
---|---|---|---|---|---|---|---|---|
0 | f1 | ~ | x1 | -0.03 | -0.71 | 0.023718 | -1.1484 | 0.250803 |
1 | f1 | ~ | x2 | -0.06 | -0.48 | 0.057586 | -1.001833 | 0.316424 |
2 | f2 | ~ | f1 | 1.00 | 0.12 | - | - | - |
3 | x3 | ~ | f2 | 1.00 | 0.33 | - | - | - |
4 | x4 | ~ | f2 | -0.50 | -0.44 | 0.638508 | -0.783489 | 0.43334 |
5 | f1 | ~~ | f1 | 0.00 | 0.00 | - | - | - |
6 | f2 | ~~ | f2 | 0.10 | 0.99 | 468442.904933 | 0.0 | 1.0 |
7 | x1 | ~~ | x1 | 0.97 | 1.00 | 0.043569 | 22.36068 | 0.0 |
8 | x1 | ~~ | x2 | 0.12 | 0.38 | 0.010516 | 11.231212 | 0.0 |
9 | x2 | ~~ | x2 | 0.10 | 1.00 | 0.004436 | 22.36068 | 0.0 |
10 | x3 | ~~ | x3 | 0.82 | 0.89 | 468442.904933 | 0.000002 | 0.999999 |
11 | x3 | ~~ | x4 | 0.27 | 0.77 | 234345.054399 | 0.000001 | 0.999999 |
12 | x4 | ~~ | x4 | 0.11 | 0.81 | 117234.360779 | 0.000001 | 0.999999 |
PLS RegressionとSEMにおける「PLS Model」は違うもの
PLS, CCAはscikit-learnにも実装があり、一見同様のものに見える
sklearn.cross_decomposition.PLSRegression — scikit-learn 1.3.2 documentation
しかし、これは違うもの。
モデル構造の違い:
SEMにおけるPLSモデル:合成変数で別の潜在変数を説明する
PLS回帰:合成変数で観測変数を説明する(次元削減してからOLSにかける「主成分回帰」に近い)
アルゴリズムの違い:
PLSモデル:SEMなので最尤推定などを使う
PLS回帰:非線形反復部分最小二乗法(Nonlinear Iterative Partial Least Squares: NIPALS)
参考:
An Introduction to Structural Equation Modeling | SpringerLink
1.3節の最後にATTENTIONという項目があり、両者が違うことを述べている
藤原幸一(2022)『スモールデータ解析と機械学習』オーム社
PLS回帰のアルゴリズムが詳しく載っている
推定結果も違う:
from sklearn.cross_decomposition import PLSRegression
X = data[["x1", "x2"]]
Y = data[["x3", "x4"]]
pls = PLSRegression(n_components=1)
pls.fit(X, Y)
>>> pls.coef_
array([[-0.02380083, -0.02041537],
[ 0.01237008, 0.01061055]])
関連文献#
Lohmöller, J. B. (1989). The Basic and the Extended PLS Method. Latent Variable Path Modeling with Partial Least Squares, 27-61.
PLSを主軸にした教科書。豊田(2003)(疑問編)で紹介されていた