重み付き最小二乗法についての調べ物
SEMなどの際の推定法の中にWeighted Least Square(重み付き最小2乗法)というものがある。通常の(重みをつけない)最小2乗法は標本共分散行列とモデルの共分散行列の残差が最も小さくなるようにモデルの母数を推定するが, WLSでは残差に対して異なる重みを与える。
Weighted Least Squareとは
SEMのオプションで一般にWLSというとBrown(1984)によるAsymptotically Distribution-Free法のことを指すようで, 分布によらない推定ができるらしい。データとモデルの不一致度の関数は次のように表される。
ここで, は標本共分散行列の対角要素を含む下三角要素を縦ベクトルにしたものでは, 同じ操作をモデルの共分散行列にしたものである。が重みの行列である。
重みの行列はサイズが, 観測変数の数をとしたときにになる。例えば観測変数が2個だとしたらの行列でそれぞれの成分は次のようになる。
ここで, は標本数を, 観測変数をとしたときに次のようになる。
である。
lavaanで試してみる
具体的な数字を入れてみると分かりやすいだろうということでみんな大好きlavaanで試してみる。まず, データの変数の部分だけ取り出してモデルを指定。
library(lavaan) dat <- HolzingerSwineford1939[,7:15] model1 <- " visual =~ x1 + x2 + x3 textual =~ x4 + x5 + x6 speed =~ x7 + x8 + x9 "
推定法にestimator="WLS"
とつけるとlavaanはWLSでやってくれる。
res.wls <- cfa(model=model1, data=dat, estimator="WLS") summary(res.wls)
さて, このモデルで重み行列はどこに保存されているかというとres.wls@SampleStats@NACOV
というところにある。9変数あるので45×45の行列である。
表示しきれていないだけで, 下にまだまだ続いている。
さて, 実際にさっきの計算式通りに計算して確かめてみよう。たとえばを計算してみる。lavaanでは, N-1でなくNで計算しているようなので出力結果に合うように300/301をかけている。
W <- res.wls@SampleStats@NACOV[[1]] # lavaanの出力結果のW mean <- res.wls@SampleStats@mean[[1]] # 標本の各変数の平均 s <- res.wls@SampleStats@cov[[1]] # 標本の分散共分散行列 s_2111 <- mean((dat[,2]- mean[2])*(dat[,1] -mean[1])^3) W_2111 <- s_2111 - (s[1,1]*300/301 * s[2,1]*300/301)
とこんな感じで計算した結果がに入っている。これの逆行列を使って重みづけた残差の2乗和が最小になるように推定を行うのがWLSであるようだ。
参考にしたもの
共分散構造分析 疑問編―構造方程式モデリング (統計ライブラリー)
- 作者: 豊田秀樹
- 出版社/メーカー: 朝倉書店
- 発売日: 2003/12/01
- メディア: 単行本
- この商品を含むブログを見る