「共分散構造分析[R編]--構造方程式モデリング」(豊田秀樹編著)が、2014年4月に出版されました。RでSEMを実行したい方は、そちらを購読されることをおすすめします。 |
共分散構造分析[Amos編]を購入しましたが、[R編]というのは出ないのでしょうね。個人でAmosなんてなかなか買えないです。
さて、Rのsemパッケージが3.0になり、多母集団分析 もできるようになったようです。これでもって、Amos編に掲載されている事例をそのまま(^^;)なぞってみようではないかと思ったものであります。備忘録も兼ねて・・・。
でも、公開されている本書のデータ[02008DL.exe]を使って分析した成果をwebなんぞに公開するには、著作権者(豊田先生?)に許可を貰わなくてはなりませんと明記されています。こんなつまんないことで私なんぞが豊田先生に許可を求めるなんてあまりに畏れ多いので、結果は表示しません。
まず、第一章の8ページのパス図。
データはsemi.tabにタブ区切りで保存してあります。
このモデルを次のように記述して保存しました。
semi.txt
講師の質 <-> 充実感, sf, NA
講師の質 -> テキスト, p1, NA
講師の質 -> プレゼン, p2, NA
講師の質 -> ペース, p3, NA
講師の質 -> 講師対処, p0, NA
充実感 -> 満足度, NA, 1
充実感 -> 理解度, p5, NA
充実感 -> 目的一致, p6, NA
目的一致 <-> 目的一致, e1, NA
理解度 <-> 理解度 , e2, NA
テキスト <-> テキスト, e3, NA
ペース <-> ペース , e4, NA
満足度 <-> 満足度 , e5, NA
プレゼン <-> プレゼン, e6, NA
講師対処 <-> 講師対処, e7, NA
講師の質 <-> 講師の質, NA, 1
充実感 <-> 充実感, sat, NA
講師の質 -> テキスト, p1, NA
講師の質 -> プレゼン, p2, NA
講師の質 -> ペース, p3, NA
講師の質 -> 講師対処, p0, NA
充実感 -> 満足度, NA, 1
充実感 -> 理解度, p5, NA
充実感 -> 目的一致, p6, NA
目的一致 <-> 目的一致, e1, NA
理解度 <-> 理解度 , e2, NA
テキスト <-> テキスト, e3, NA
ペース <-> ペース , e4, NA
満足度 <-> 満足度 , e5, NA
プレゼン <-> プレゼン, e6, NA
講師対処 <-> 講師対処, e7, NA
講師の質 <-> 講師の質, NA, 1
充実感 <-> 充実感, sat, NA
- なんと、例えばeをつけた誤差分散は記述しなくてもspecifyModel()関数が補ってくれます。その時は、こんな風に補完されています。
> semi.mdl <- specifyModel("model/semi.txt")
Read 10 records
NOTE: adding 7 variances to the model
> semi.mdl
Path Parameter StartValue
1 講師の質 -> 充実感 sf
:
11 テキスト <-> テキスト V[テキスト]
12 プレゼン <-> プレゼン V[プレゼン]
13 ペース <-> ペース V[ペース]
14 講師対処 <-> 講師対処 V[講師対処]
15 満足度 <-> 満足度 V[満足度]
16 理解度 <-> 理解度 V[理解度]
17 目的一致 <-> 目的一致 V[目的一致]
NOTE: adding 7 variances to the model
> semi.mdl
Path Parameter StartValue
1 講師の質 -> 充実感 sf
:
11 テキスト <-> テキスト V[テキスト]
12 プレゼン <-> プレゼン V[プレゼン]
13 ペース <-> ペース V[ペース]
14 講師対処 <-> 講師対処 V[講師対処]
15 満足度 <-> 満足度 V[満足度]
16 理解度 <-> 理解度 V[理解度]
17 目的一致 <-> 目的一致 V[目的一致]
- Amosだと、講師の質を測定するパスのうち一つには1に制約するけれど、semではその制約を入れると期待した結果は求められませんでした。
semi <- read.delim("data/semi.tab")
semimdl <- specifyModel("model/semi.txt") #モデルのオブジェクトを作成
semi.sem <- sem(semi.mdl, data = semi[,-1], N = nrow(semi)) #分析を実行
summary(semi.sem)
stdCoef(semi.sem) #標準化係数
semimdl <- specifyModel("model/semi.txt") #モデルのオブジェクトを作成
semi.sem <- sem(semi.mdl, data = semi[,-1], N = nrow(semi)) #分析を実行
summary(semi.sem)
stdCoef(semi.sem) #標準化係数
標準化パス係数は小数点2桁まで同じ
- GFI, AGFI, CFI, RMSEAは小数点3桁まで同じ
fscores(semi.sem, data=NULL) #因子得点ウェイト
semi.fs <- fscores(semi.sem, scale=TRUE) #構成概念スコア
fs.plot <- ggplot(data.frame(semi.fs)) +
geom_point(aes(x=講師の質, y=充実感)) #ggplot2で散布図を描いた
fs.plot
semi.fs <- fscores(semi.sem, scale=TRUE) #構成概念スコア
fs.plot <- ggplot(data.frame(semi.fs)) +
geom_point(aes(x=講師の質, y=充実感)) #ggplot2で散布図を描いた
fs.plot
- 本の出力とはかなり違います。ただし、それぞれの因子の中では本の出力と比例しているようです。
0 件のコメント:
コメントを投稿