階層因子分析(hierarchical factor analysis)について松田淑美・狩野裕「高次因子分析モデルと階層因子分析モデルについて」から説明を引用しよう。
http://www.sigmath.es.osaka-u.ac.jp/~kano/research/meeting/20050827_BSJ33/matsudaABS.pdf
階層因子分析モデルは,全ての観測変数を説明する一般因子(general factor)と,一部の観測変数を説明するグループ因子(group factor)からなる.このモデルには,いくつかの「層 (layer)」があり,各層において,観測変数は,ひとつの因子に負荷する.層の順番は,各層に含まれる因子の数によって決まり,因子数の最も多い層が第1 層となる.図 2のモデルでは,F1 ∼ F4 が第 1 層,F5 ∼ F6 が第2層,Gが第3層となる.また,F1 ∼ F6がグループ因子,G が一般因子である.これらの因子は全て,互いに直交している.
特に,2 層のモデル(ひとつの一般因子といくつかのグループ因子からなるモデル)は双因子モデル(bi–factor model)とも言う(図 3).
データ
lavaanパッケージに同梱されているHolzingerSwineford1939
を使用する。
ドキュメントには次のようにデータの説明が書かれてある。
古典的なHolzinger and Swineford (1939)のデータセットは、2つの異なる学校(PasteurとGrant-White)の7年生と8年生の子供たちの精神能力テストのスコアで構成されている。オリジナルのデータセット(MBESSパッケージで利用可能)には、26のテストのスコアがある。しかし、9つの変数を持つより小さなサブセットが、文献ではより広く使われている(たとえば、Joreskogの1969年の論文では、Grant-Whiteの学校からの145人の被験者のみを使用している)。
- x1 Visual perception
- x2 Cubes
- x3 Lozenges
- x4 Paragraph comprehension
- x5 Sentence completion
- x6 Word meaning
- x7 Speeded addition
- x8 Speeded counting of dots
- x9 Speeded discrimination straight and curved capitals
因子
visual | textual | speed |
---|---|---|
Visual perception | Paragraph comprehension | Speeded addition |
Cubes | Sentence completion | Speeded counting of dots |
Lozenges | Word meaning | Speeded discrimination straight and curved capitals |
モデル
すべての観測変数に共通して影響を与える構成概念として「知能(intelligence)」を想定する。 この一般因子とグループ因子との聞の相関は,あらかじめ0に固定する。
library(lavaan) HS1.model <- 'visual =~ x1 + x2 + x3 textual =~ x4 + x5 + x6 speed =~ x7 + x8 + x9 intelligence =~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 intelligence ~~ 0*visual + 0*textual + 0*speed'
実行
HS1.fit <- sem(HS2.model, data = HolzingerSwineford1939, std.lv=T) summary(HS1.fit, standardized=TRUE)
分散
Variances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .x1 0.395 0.214 1.848 0.065 0.395 0.290 .x2 1.155 0.116 9.944 0.000 1.155 0.836 .x3 -0.079 1.656 -0.048 0.962 -0.079 -0.062 .x4 0.386 0.048 8.122 0.000 0.386 0.286 .x5 0.383 0.061 6.233 0.000 0.383 0.230 .x6 0.371 0.042 8.732 0.000 0.371 0.310 .x7 0.654 0.099 6.604 0.000 0.654 0.552 .x8 0.453 0.085 5.318 0.000 0.453 0.444 .x9 0.578 0.062 9.337 0.000 0.578 0.569
x3の分散がマイナスになっている。これは不適解であるため、x3にも制約を課す必要がある。
モデルの改善
library(lavaan) HS2.model <- 'visual =~ x1 + x2 + x3 textual =~ x4 + x5 + x6 speed =~ x7 + x8 + x9 intelligence =~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 intelligence ~~ 0*visual + 0*textual + 0*speed x3 ~~ a*x3; a>0'
実行
HS2.fit <- sem(HS2.model, data = HolzingerSwineford1939, std.lv=T) summary(HS2.fit, standardized=TRUE)
結果。
Estimator ML Optimization method NLMINB Number of free parameters 30 Number of inequality constraints 1 Number of observations 301 Model Test User Model: Test statistic 26.016 Degrees of freedom 15 P-value (Chi-square) 0.038 Parameter Estimates: Standard errors Standard Information Expected Information saturated (h1) model Structured Latent Variables: Estimate Std.Err z-value P(>|z|) Std.lv Std.all visual =~ x1 -0.251 0.200 -1.255 0.209 -0.251 -0.216 x2 0.084 0.094 0.891 0.373 0.084 0.071 x3 0.779 0.123 6.320 0.000 0.779 0.690 textual =~ x4 0.868 0.065 13.256 0.000 0.868 0.747 x5 1.058 0.066 15.930 0.000 1.058 0.821 x6 0.790 0.063 12.620 0.000 0.790 0.722 speed =~ x7 0.722 0.080 9.019 0.000 0.722 0.664 x8 0.706 0.075 9.469 0.000 0.706 0.698 x9 0.465 0.064 7.300 0.000 0.465 0.461 intelligence =~ x1 0.949 0.097 9.810 0.000 0.949 0.814 x2 0.472 0.073 6.433 0.000 0.472 0.402 x3 0.817 0.127 6.460 0.000 0.817 0.724 x4 0.460 0.094 4.891 0.000 0.460 0.396 x5 0.397 0.104 3.835 0.000 0.397 0.308 x6 0.449 0.088 5.092 0.000 0.449 0.411 x7 0.097 0.070 1.377 0.169 0.097 0.089 x8 0.264 0.066 3.985 0.000 0.264 0.261 x9 0.471 0.067 7.082 0.000 0.471 0.468 Covariances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all visual ~~ intelligence 0.000 0.000 0.000 textual ~~ intelligence 0.000 0.000 0.000 speed ~~ intelligence 0.000 0.000 0.000 visual ~~ textual -0.240 0.094 -2.566 0.010 -0.240 -0.240 speed -0.002 0.094 -0.021 0.983 -0.002 -0.002 textual ~~ speed 0.122 0.083 1.473 0.141 0.122 0.122 Variances: Estimate Std.Err z-value P(>|z|) Std.lv Std.all .x3 (a) -0.000 -0.000 -0.000 .x1 0.394 0.216 1.822 0.068 0.394 0.290 .x2 1.152 0.098 11.799 0.000 1.152 0.834 .x4 0.386 0.048 8.120 0.000 0.386 0.286 .x5 0.383 0.061 6.252 0.000 0.383 0.231 .x6 0.371 0.042 8.731 0.000 0.371 0.310 .x7 0.653 0.099 6.620 0.000 0.653 0.552 .x8 0.454 0.085 5.357 0.000 0.454 0.444 .x9 0.577 0.060 9.582 0.000 0.577 0.569 visual 1.000 1.000 1.000 textual 1.000 1.000 1.000 speed 1.000 1.000 1.000 intellignc 1.000 1.000 1.000 Constraints: |Slack| a - 0 0.000
パス図の描画
library(semPlot) semPaths(HS2.fit,layout="spring", whatLabels="stand",sizeMan=5, shapeLat="ellipse",sizeLat=8,sizeLat2=5, exoCov=F,residuals=F,nCharNodes=0, edge.label.cex=0.9,edge.color="black")