Hatena::ブログ(Diary)

極めて個人的なメモ Twitter

Θ・)ノシ Bob#3のメモ帳です。
1972 | 12 |
2003 | 03 | 04 | 05 | 06 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 |
2006 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 05 | 06 | 07 | 10 | 11 | 12 |
2008 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 11 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2011 | 05 | 06 | 09 | 10 |
2012 | 02 | 03 | 05 | 06 | 08 |
2013 | 01 | 02 | 03 |
2015 | 02 |

2011-10-03 Rで共分散構造分析 {lavaan}パッケージ編 #rstatsj

[]Rで共分散構造分析 {lavaan}パッケージ編 #rstatsj Rで共分散構造分析 {lavaan}パッケージ編 #rstatsjを含むブックマーク Rで共分散構造分析 {lavaan}パッケージ編 #rstatsjのブックマークコメント

Rで共分散構造分析を行うにはこれまでは John Fox さんの{sem}パッケージを使うのが普通でした。

私も以前、{sem}パッケージの使い方についてエントリーを書いています。

id:bob3:20091226

id:bob3:20091227

id:bob3:20100530


しかし最近は{OpenMX}や{lavaan}など共分散構造分析のためのパッケージが他にも出てきました。

特に{lavaan}はまだβ版ながら評判が良いようです。

{lavaan}の公式サイトはこちら→ lavaan - latent variable analysis


というわけで、ブルーバックス『原因をさぐる統計学』に載っている事例をいくつが{lavaan}でやってみましょう。


まずは{lavaan}と関連パッケージのインストール

install.packages(c("lavaan", "psych", "qgraph"))

パッケージの呼び出し。

library(lavaan)
library(psych)
library(qgraph)

まずは『原因を探る統計学』のp129、p237に載っている「ヘッド・スタート計画」の事例から。


まず、分析する相関係数行列を入力します。

# ヘッドスタート計画の相関係数行列
HS <- matrix(c(1.000, 0.484, 0.224, 0.268, 0.230, 0.265,
                0.484, 1.000, 0.342, 0.215, 0.215, 0.295,
                0.224, 0.342, 1.000, 0.387, 0.196, 0.234,
                0.268, 0.215, 0.387, 1.000, 0.115, 0.162,
                0.230, 0.215, 0.196, 0.115, 1.000, 0.635,
                0.265, 0.295, 0.234, 0.162, 0.635, 1.000), 6)
colnames(HS) <- rownames(HS) <- paste("x", 1:6, sep="")

それぞれの変数の意味は、

x1:母親学歴

x2:父親の学歴

x3:父親の職業

x4:家庭の収入

x5:MRT(知能検査

x6:ITPA(知能検査


次にモデル記述です。

「多重指標モデル」と「外生潜在変数が2つのモデル」の2パターンでやってみます。


# 多重指標モデル
HS.mdl.1 <- '
  # 測定方程式の記述
  f1 =~ x1 + x2 + x3 + x4
  f2 =~ x5 + x6
  # 構造方程式の記述
  f2 ~ f1 '

# 外生潜在変数が2つのモデル
# 因子間相関は記述しなくてもOK。
HS.mdl.2 <- '
  # 測定方程式
  f1 =~ x1 + x2
  f2 =~ x3 + x4
  f3 =~ x5 + x6
  # 構造方程式
  f3 ~  f1 + f2 '

{lavaan}パッケージではモデル記述に以下のような記号の使い方をしています。

=~ 測定方程式

~ 構造方程式(回帰

~~ 残差の共分散(相関)


それでは分析の実行です。

HS.fit.1 <- sem(HS.mdl.1, sample.cov=HS, sample.nobs=1800)
summary(HS.fit.1, fit.measures=TRUE, standardized=TRUE)

HS.fit.2 <- sem(HS.mdl.2, sample.cov=HS, sample.nobs=1800)
summary(HS.fit.2, fit.measures=TRUE, standardized=TRUE)

出力結果は割愛しますが、CFI、TLI、AICBIC、RMSEAといった指標値に続き、推定された係数が出てきます。(なぜかメジャーなGFI、AGFIは出力されない…)

Std.allというのが標準化係数のようです。

また、sem()を実行したときに「相関係数行列からの分析はまだサポートしてないよ!」という警告メッセージが出ます。

このあたりはβ版ゆえ仕方がないでしょう。

それでもテキストと同じ数値が出てきます。


一応、パス図の描画もしてくれます。

ただ、本当に“一応”という感じで、モデルの確認程度にしか使えないと思います。

diagram(HS.fit.1, "多重指標モデル", errors=TRUE, cut=0, lr=FALSE)

f:id:bob3:20111004005908p:image:w360


qgraph(HS.fit.1, titles=FALSE)

はてなフォトライフメンテ中で画像を載せられませんでした…


diagram(HS.fit.2, "潜在変数が2つのモデル", errors=TRUE, cut=0, lr=FALSE)

はてなフォトライフメンテ中で画像を載せられませんでした…


qgraph(HS.fit.2, titles=FALSE)

はてなフォトライフメンテ中で画像を載せられませんでした…


といった具合で、まだまだ不具合や不満点はあるものの、多母集団同時分析や平均構造モデルにも対応するということで、{lavaan}は今後が楽しみなパッケージです。

時間ができたら他の事例でも試してみます。






あ、そうそう、転職しました。