ラベル 平均構造 の投稿を表示しています。 すべての投稿を表示
ラベル 平均構造 の投稿を表示しています。 すべての投稿を表示

2013年4月17日水曜日

共分散構造分析[R編]ってないの?[第5章4]


しばらく、更新を中断していました。第5章の2はうまく収束せず、またまた宿題とします。ここでは、「共分散構造分析[Amos編]-構造方程式モデリング-」の96頁の平均構造を含めた構成概念間のパス解析をやってみます。

このモデルでは、構成概念間に平均構造を含めるために、観測変数の平均は0に制約するということのようです。構成概念が観測変数の平均を決めるので、観測変数独自の平均は0ということです。そこで、以下のようなファイルを用意しました。

講師の質 -> 講師対処, NA, 1
講師の質 -> ペース , path1, NA
講師の質 -> プレゼン, path2, NA
講師の質 -> テキスト, path3, NA
充実感 -> 目的一致, NA, 1
充実感 -> 理解度, path5, NA
充実感 -> 満足度, path6, NA
講師の質 -> 充実感, path7, NA
講師の質 <-> 講師の質, vq, NA
充実感 <-> 充実感, vf, NA
Intercept -> 講師の質, iq, NA
Intercept -> 充実感, if, NA
Intercept -> 講師対処 , NA, 0
Intercept -> ペース,NA, 0
Intercept -> プレゼン, NA, 0
Intercept -> テキスト, NA, 0
Intercept -> 目的一致, NA, 0
Intercept -> 理解度, NA, 0
Intercept -> 満足度, NA, 0

次のスクリプトを実行すれば、収束すると思ったのですが。

summary(c5semi.sem <- sem(c5semi.mdl, data=semi, fixed.x="Intercept", raw=TRUE,
                          debug=TRUE))

ダメですぅ。
 「収束で困ったらpar.sizeオプションの値を変えてみれば」というふうにも読めなくもなかったので、 par.size = "startvalues"を追加して実行すると収束しました。
デフォルトのまま、モデル記述の初期値を変えても収束しました。(講師の質 <-> 講師の質, vq, 1)
CFI,RSMEAの出力はありません。
係数、平均値、切片、分散については、小数3桁まで一致します。

標準化推定値については、stdCoef(c5semi.sem)で出力した値は、全く違います。明らかに不自然な値てす。semパッケージでは、平均構造を導入したsemオブジェクトにstdCoef()を使って標準化係数を求めることができないのではないでしょうか。

< 下線部は、2013/8/31修正 >

2013年2月23日土曜日

共分散構造分析[R編]ってないの?[第5章1]

「共分散構造分析[Amos編]-構造方程式モデリング-」の90頁からの平均共分散構造分析を試してみます。
まず、モデルの記述は次のようにします。Interceptから平均や切片を計算する観測変数に向けて矢印を書きます。dataを入力する場合は、Interceptという変数名にします。sem()関数が自動でIntercept込のraw momentを計算してくれるようです。raw momentを別に計算してSに代入する場合は例えば rawMoment( cbind( semidata, 切片=1 ))などと計算すれば良いのではないかと思います。

semi.mdl <- specifyModel()
     理解度 -> 満足度, path1, NA
     プレゼン -> 満足度, path2, NA
     講師対処 -> 満足度, path3, NA
     理解度 <-> プレゼン, c1, NA
     理解度 <-> 講師対処, c2, NA
     プレゼン <-> 講師対処, c3, NA
     Intercept -> 満足度, i0, NA
     Intercept -> 理解度, i1, NA
     Intercept -> プレゼン, i2, NA
     Intercept -> 講師対処, i3, NA
#

平均構造を計算する場合、sem()関数では必ずrawオプションにTRUEを指定します。デフォルトではFALSEとなっていて分散共分散を計算します。このまま共分散行列を計算してもらうと逆行列が計算できませんということでエラーになります。平均構造を導入する場合は、ここをTRUEに指定して一次のモーメントを計算してもらいます。fixed.xオプションではInterceptを指定します。formulaオプションにはInterceptを指定しません。

summary(semi.sem <- sem(semi.mdl, data = semidata, raw = TRUE, fixed.x = "Intercept",
                        formula = ~ 満足度 + 理解度 + プレゼン + 講師対処 ))

これで、91頁のパス図に書かれている値が推定されていると思います。ちなみに、平均と切片を計算する場合、適合度指標は出力されません。Amosでも。

さて、パス図(左)を作成してみると大変見苦しくなってしまいました。ちょっと手を加えてみたのが右の図です。