共分散行列を利用3

lavaanパッケージ gawk graphviz

(参考)blue backs「原因をさぐる統計学」

OSはlinux(zorinOS)
windowsではlavaan:::sem使用時に変数名が日本語だとエラーになりました。

(準備)「因子分析&確証的因子分析」にあるmakeawk関数を読み込んでおく。

転職の意思に関する因果モデル p.193 図表 補-7 p.242

誤差分散を固定する p.199

相関行列をlavaan:::cor2covを使って共分散行列に変換する必要あり。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
library(lavaan)
mat<-'
1
0.38 1
0.26 0.23 1
-0.06 0.13 0.05 1
0.1 0.18 -0.03 0.31 1
0.13 0.23 0.01 0.15 0.38 1
0.06 0.07 0.06 0.05 0.2 0.38 1
0.16 0.24 0.05 0.2 0.34 0.5 0.2 1
0.21 0.16 0.09 0.15 0.38 0.24 0.32 0.5 1
0.14 0.12 0.08 0.19 0.35 0.25 0.15 0.41 0.32 1
-0.13 -0.14 -0.03 -0.16 -0.3 -0.24 -0.18 -0.27 -0.27 -0.38 1
'
wheaton.cov <- getCov(mat,names=c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11"))
sd<-c(0.5, 0.8, 0.6, 0.8, 0.9, 1.3, 1.3, 4.3, 5.2, 9.6, 1.0)
#共分散行列に変換
full.cov <- lavaan:::cor2cov(wheaton.cov,sd,names=c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11"))
model<-'
F1=~x1+x2+x3
F2=~x4+x5
F3=~x6+x7
F4=~x8+x9
F5=~x10
F6=~x11
F1~~F2
F3~F1
F4~F2+F3
F5~F4
F6~F4+F5
x10~~10.14*x10
x11~~0.35*x11
x5~~x6
'
fit <- lavaan:::sem(model, sample.cov=full.cov, sample.nobs=338)
summary(fit, standardized=TRUE)
latent<-c("F1","F2","F3","F4","F5","F6")
makeawk(latent)
pars <- parameterEstimates(fit, standardized = TRUE)
g<-data.frame(pars$lhs,pars$op,pars$rhs," [label=",signif(pars$std.all,digits=3),"];")
write.table(g,"out",sep=" ",col.names=FALSE,row.names=FALSE,quote=FALSE, na="")
system( 'gawk -f "lavaan_dot.awk" "out">out.dot')

絶対位置指定、潜在変数のラベル付け等

1
system('neato -Tpng out.dot -o cov02.png')

cov02.dot