2012年9月17日月曜日

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

3.5 共分散分析

共変量分析というと、以前、日常的に運動をしている人は最大酸素摂取量(VO2MAX)が多くなるか確認できないかと尋ねられて検討したと思います。この時の補助変数(共変量って言ってたような)は年齢でした。群を分けるのも「日常的に運動していますか」という設問への自己申告で心もとない感じだったのですが。
同じようにボディマス指数(BMI)も確認したいということもあったのですが、
  • 20歳代は運動すると、筋肉がたくさんつくみたいで運動する人の方がBMIが大きい
  • 30歳代半ば過ぎると、運動する人のほうが贅肉がつきにくいということなのかBMIが小さい
という関係があるようでした。つまり、(1)の回帰直線の傾きが群間で等しいという仮定が成り立たなかったのです。(2)の補助変数の影響に関しても、年齢と運動強度の間に関係がある?影響がでているのかもしれません。
さらに、年齢とBMIの関係が対象とした年齢(20-60)では、50歳程度でピークとなる非線形の関係があるようでした。人間って50歳過ぎると萎むんですね。私なんか、なんだか縮んじゃって勤め先でも居場所がなくなってきてるんですよ・・・。(; _ ;)

そんなボヤキはさておき、こうしてみました。
english.mdl <- specifyModel()
学力テスト -> 英語の試験, p1, NA
群 -> 英語の試験, p2, NA
英語の試験 <-> 英語の試験, e1, NA
学力テスト <-> 学力テスト, v1, NA
群 <-> 群, v2, NA
1 -> 英語の試験, i0, NA

english.raw <- rawMoments(cbind(english.data,1))
english.sem <- sem(english.mdl, S=english.raw, N=24, raw=TRUE, fixed.x=c("1"))
summary(english.sem)
modIndices(english.sem)

切片を計算するために、
  • 元のデータに1ばかりの列を追加して、rawMoments()でsem()用に積和行列を計算
  • sem()関数のSに計算した積和行列を指定して、raw=TRUEで積和行列を使用していることを知らせ
  • fixed.xオプションに変数"1"を指定

summary()の出力では、p2の標準誤差が本より少し小さく、信頼区間もすこし狭くなります。
修正指数を出力するmodIndices()関数には、しきい値の設定がないようです。出力された指数が無視してよいものなのかどうなのか判断に苦しみます。ただ、本で指定しているしきい値(4)よりはずっと小さいです。

次に、群 -> 英語の試験のパスを0に制約してみます。モデルは次のように書きました。

english.mdl <- specifyModel()
学力テスト -> 英語の試験, p1, NA
群 -> 英語の試験, NA, 0
英語の試験 <-> 英語の試験, e1, NA
学力テスト <-> 学力テスト, v1, NA
群 <-> 群, v2, NA
1 -> 学力テスト, i1, NA

改善指数が一番大きいのは、群 -> 英語の試験にパスを引くことになります。修正指数はAmosのそれに近い値が出ています。

0 件のコメント:

コメントを投稿