因子分析モデル#
「プライドの高さ」「英語力」のような直接観測することができない便宜上の概念を構成概念(construct)という。
構成概念を分析するためのモデルの一つが因子分析モデル(測定方程式モデル)で、例えば次のように表される
ここで\(v\)は観測値の偏差\(v = x - E[x]\)、\(\alpha\)は因子負荷量(factor loading)、\(f\)は構成概念を表す変数で因子スコア(factor score)あるいは因子と呼ばれる。
\(f\)は構造的な潜在変数である。
また、モデルの仮定として
潜在変数は原則 \(E[f_i] = 0, V[f_i] = 1\)
誤差は平均ゼロ、均一分散 \(E[e_i]=0, V[e_i] = \sigma^2_{e_i}\)
誤差と因子スコアは無相関 \(E[f_i e_i] = 0\)
をおく
歴史#
まず、現在は探索的因子分析(exploratory factor analysis: EFA)と呼ばれる、事前に特定の仮説を置かずにデータの共分散に基づいて(主成分分析のように)因子スコアを推定する方法が提案された
その後、分析者が仮説(モデル構造)を仮定して推定する確認的因子分析(confirmatory factor analysis: CFA)が提案された。
SEMが提案された後はそれらの因子分析がSEMの下位モデルとして内包されるようになった
推定#
のモデルを例にとる。
共分散の構造化#
観測変数の分散共分散行列を計算していく。
\(v_1\)の分散\(\sigma^2_1\)は
となる。最後の行は仮定より\(E[f_1 e_1] = 0\)となること、それから仮定より\(E[e_1]=0\)ゆえに\(E[e^2_1]=V[e_1]=\sigma^2_{e_1}\)であり、同様に\(E[f_1]=0\)から\(E[f_1^2]=V[f_1]=1\)となることを利用している。
\(v_2\)と\(v_3\)の分散も同様なので、分散は最終的に
となる。
つづいて共分散は
となるため
となる。
観測変数の共分散行列は
と書き直すことができる。このように共分散を母数の関数で表現することを「構造化」という。上記の式のように共分散を方程式モデルの母数で表現したものを「共分散構造」とよぶ。
推定#
モデルの\(\alpha, f, e\)を推定していく。
共分散構造を用いて、
を\(\alpha_{11}\)について解くと
で、これを利用して
となる。
誤差分散は
\(\sigma^2_i = \alpha^2_{ij} + \sigma^2_{e_i} \implies \sigma^2_{e_i} = \sigma^2_i - \alpha^2_{ij}\)より
となる。
上記の式は母分散を利用しているが、実際には標本分散を用いた推定量とする
# データの生成
from scipy.stats import multivariate_normal
import numpy as np
mean = np.array([10, 5, 3])
cov = np.array([
[2, 0.5, 1.2],
[0.5, 1, 0.7],
[1.2, 0.7, 1.5],
])
mvn = multivariate_normal(mean=mean, cov=cov, seed=0)
n = 100
# データ行列
X = mvn.rvs(size=n, random_state=0)
# 平均偏差行列
V = X - X.mean(axis=0)
# 分散共分散行列
S = np.cov(V, rowvar=False)
S.round(3)
array([[2.275, 0.578, 1.278],
[0.578, 0.976, 0.69 ],
[1.278, 0.69 , 1.42 ]])
# alphaの推定
# pythonは0始まりなのでインデックスが全部1ずれる
a11 = np.sqrt( S[1, 0] * S[2, 0] / S[2, 1] )
a21 = S[1, 0] / a11
a31 = S[2, 0] / a11
# 誤差分散sigma_eの推定
s_e1 = S[0,0] - a11
s_e2 = S[1,1] - a21
s_e3 = S[2,2] - a31
# 再現された分散行列
Sigma = np.array([
[(a11**2 + s_e1**2), a21 * a11, a31 * a11],
[a21 * a11, (a21**2 + s_e2**2), a31 * a21],
[a31 * a11, a31 * a21, (a31**2 + s_e3**2)],
])
Sigma.round(3)
array([[2.609, 0.578, 1.278],
[0.578, 0.486, 0.69 ],
[1.278, 0.69 , 1.559]])
# residual
(S - Sigma).round(3)
array([[-0.334, 0. , 0. ],
[ 0. , 0.49 , -0. ],
[ 0. , -0. , -0.138]])
標準化解#
\(z, f, e\)の分散が1に標準化されたモデル(標準化モデル)
\(\beta\)は誤差の係数(\(\alpha\)は区別のため係数に\(*\)をつけている)
\(z, f, e\)の分散は1になるから、その係数は合計が1になる:\(1 = \alpha_{11}^{*2} + \beta_1^2\)
共分散(相関)も\(\sigma_{r21} = \alpha_{21}^* \alpha_{11}^*\)のようになる
共分散行列は
と構造化される
測定方程式の行列表記#
測定方程式を次のように表記する
また仮定については
となる。
共分散構造は