毎回やる儀式

今日のモデルのRQ例

  • 風が吹けば桶屋が儲かるらしい。というのもつまり、大風で土ぼこりが立つ→土ぼこりが目に入って、盲人が増える→盲人は三味線を買う(当時の盲人が就ける職に由来)→三味線に使う猫皮が必要になり、ネコが殺される→ネコが減ればネズミが増える→ネズミは桶をかじる→桶の需要が増え桶屋が儲かる,らしい。本当かね?(パス解析)
  • 女子力,コミュ力,社会人基礎力・・・いろいろな「力」があるらしいけど,これをどうやって測ればいいの?
  • コミュ力があればさ,社会人基礎力だって必然的に身につくし,その結果として年収が高くなるってことだよね。

今日使うパッケージ

  • psych
  • lavaan
  • semPlot

回帰分析と因子分析

前回「因子分析」の回で,目に見えないものが見えるようになりました。 例えば,身長と体重を足し合わせることで,「身体性」と考えたとします。 打席数,打率,三振の数,ホームランの数,これらに「選手の能力」が測れたとします。 これらが年収に影響しているかもしれない,ということを考えるのは自然なことですよね。

この因子分析と回帰分析を足し合わせたような方法として,SEM(構造方程式モデリング,Structural Equation Modeling)を使うことが可能です。

SEMはlavaanパッケージを使います。これを使って,選手力が年俸に影響しているかどうか,調べてみましょう。

baseball <- read.csv("ball2017.csv",fileEncoding = "UTF-8",head=T)
baseball$pay <- baseball$pay/1000
summary(baseball)
##            name              team        league       height     
##  T-岡田    : 1   ソフトバンク: 8   Central:36   Min.   :171.0  
##  ウィーラー  : 1   巨人        : 8   Pacific:42   1st Qu.:177.0  
##  エルドレッド: 1   広島        : 8                Median :180.0  
##  ゲレーロ    : 1   日本ハム    : 8                Mean   :180.7  
##  ダフィー    : 1   オリックス  : 7                3rd Qu.:183.8  
##  デスパイネ  : 1   西武        : 7                Max.   :198.0  
##  (Other)     :72   (Other)     :32                               
##      weight             PA              AB              HR       
##  Min.   : 66.00   Min.   :156.0   Min.   :137.0   Min.   : 0.00  
##  1st Qu.: 79.25   1st Qu.:310.2   1st Qu.:270.8   1st Qu.: 3.00  
##  Median : 86.00   Median :469.0   Median :402.5   Median : 9.00  
##  Mean   : 87.95   Mean   :437.6   Mean   :382.9   Mean   :12.67  
##  3rd Qu.: 95.00   3rd Qu.:575.5   3rd Qu.:503.8   3rd Qu.:19.75  
##  Max.   :122.00   Max.   :679.0   Max.   :575.0   Max.   :35.00  
##                                                                  
##        K               pay       
##  Min.   : 21.00   Min.   : 4.30  
##  1st Qu.: 56.25   1st Qu.: 7.00  
##  Median : 73.00   Median :11.00  
##  Mean   : 77.55   Mean   :15.77  
##  3rd Qu.: 99.50   3rd Qu.:22.38  
##  Max.   :157.00   Max.   :50.00  
## 
library(lavaan)
## This is lavaan 0.5-23.1097
## lavaan is BETA software! Please report any bugs.
model1 <- '
body =~  weight + height
performance =~ PA + AB + K + HR
pay ~ body+performance
'
result.fit <- sem(model1,data=baseball)
summary(result.fit,fit.measures=T,standardized=T)
## lavaan (0.5-23.1097) converged normally after 299 iterations
## 
##   Number of observations                            78
## 
##   Estimator                                         ML
##   Minimum Function Test Statistic              104.354
##   Degrees of freedom                                12
##   P-value (Chi-square)                           0.000
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic              600.363
##   Degrees of freedom                                21
##   P-value                                        0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.841
##   Tucker-Lewis Index (TLI)                       0.721
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2257.296
##   Loglikelihood unrestricted model (H1)      -2205.119
## 
##   Number of free parameters                         16
##   Akaike (AIC)                                4546.592
##   Bayesian (BIC)                              4584.299
##   Sample-size adjusted Bayesian (BIC)         4533.855
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.314
##   90 Percent Confidence Interval          0.260  0.371
##   P-value RMSEA <= 0.05                          0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.188
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Standard Errors                             Standard
## 
## Latent Variables:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   body =~                                                                
##     weight             1.000                               9.808    0.873
##     height             0.452    0.123    3.671    0.000    4.432    0.789
##   performance =~                                                         
##     PA                 1.000                             146.581    0.999
##     AB                 0.877    0.014   60.499    0.000  128.520    0.994
##     K                  0.154    0.017    9.153    0.000   22.566    0.721
##     HR                 0.040    0.007    5.981    0.000    5.807    0.562
## 
## Regressions:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   pay ~                                                                  
##     body               0.418    0.144    2.908    0.004    4.100    0.367
##     performance        0.026    0.008    3.436    0.001    3.802    0.341
## 
## Covariances:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   body ~~                                                                
##     performance       95.343  179.426    0.531    0.595    0.066    0.066
## 
## Variances:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .weight            29.923   24.960    1.199    0.231   29.923    0.237
##    .height            11.929    5.355    2.228    0.026   11.929    0.378
##    .PA                38.180  216.024    0.177    0.860   38.180    0.002
##    .AB               192.858  168.855    1.142    0.253  192.858    0.012
##    .K                469.488   75.398    6.227    0.000  469.488    0.480
##    .HR                73.167   11.727    6.239    0.000   73.167    0.685
##    .pay               91.246   15.241    5.987    0.000   91.246    0.732
##     body              96.202   31.385    3.065    0.002    1.000    1.000
##     performance    21485.868 3453.359    6.222    0.000    1.000    1.000
library(semPlot)
semPaths(result.fit,what="stand",style="lisrel")

このように,潜在変数を作るときには「=~」で項を結びます。複数の潜在変数を置いてモデルを組んだり,潜在変数同士の関係を回帰的に表現したりすることだって可能です。

model2 <- '
body =~  weight + height + HR + K
performance =~ PA + AB + pay
performance ~ body
'
result.fit2 <- sem(model2,data=baseball)
summary(result.fit2,fit.measures=T,standardized=T)
## lavaan (0.5-23.1097) converged normally after 332 iterations
## 
##   Number of observations                            78
## 
##   Estimator                                         ML
##   Minimum Function Test Statistic              100.837
##   Degrees of freedom                                13
##   P-value (Chi-square)                           0.000
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic              600.363
##   Degrees of freedom                                21
##   P-value                                        0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.848
##   Tucker-Lewis Index (TLI)                       0.755
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2255.537
##   Loglikelihood unrestricted model (H1)      -2205.119
## 
##   Number of free parameters                         15
##   Akaike (AIC)                                4541.075
##   Bayesian (BIC)                              4576.425
##   Sample-size adjusted Bayesian (BIC)         4529.134
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.294
##   90 Percent Confidence Interval          0.242  0.349
##   P-value RMSEA <= 0.05                          0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.176
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Standard Errors                             Standard
## 
## Latent Variables:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   body =~                                                                
##     weight             1.000                               7.436    0.662
##     height             0.320    0.091    3.537    0.000    2.381    0.424
##     HR                 1.339    0.201    6.647    0.000    9.956    0.963
##     K                  3.291    0.534    6.160    0.000   24.474    0.782
##   performance =~                                                         
##     PA                 1.000                             146.429    0.998
##     AB                 0.879    0.019   47.469    0.000  128.653    0.995
##     pay                0.028    0.008    3.452    0.001    4.072    0.365
## 
## Regressions:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   performance ~                                                          
##     body              11.572    2.418    4.785    0.000    0.588    0.588
## 
## Variances:
##                    Estimate   Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .weight            70.835   12.287    5.765    0.000   70.835    0.562
##    .height            25.904    4.215    6.145    0.000   25.904    0.820
##    .HR                 7.777    7.460    1.042    0.297    7.777    0.073
##    .K                379.728   76.441    4.968    0.000  379.728    0.388
##    .PA                82.466  353.978    0.233    0.816   82.466    0.004
##    .AB               158.514  274.239    0.578    0.563  158.514    0.009
##    .pay              107.996   17.301    6.242    0.000  107.996    0.867
##     body              55.290   17.365    3.184    0.001    1.000    1.000
##    .performance    14037.279 2384.571    5.887    0.000    0.655    0.655
semPaths(result.fit2,what="stand",style="lisrel")

ここでlavaanの式の書き方をまとめておきましょう。

言いたいこと  書き方
回帰(因果) ~
因子(潜在変数) =~
相関がある ~~
切片 ~1
直交 ~0

モデルはいかようにも表現できます。自分のモデルの出来の良さはモデル適合度で評価されます。論文の具体的な記載例などを参考に考えましょう。

測定方程式と構造方程式

エラーとモデルの改善

今回はこうして結果が得られましたが,実際のデータを使うと結構エラーがでて困ることがあります。少しエラーの解説をします。

答えが出ないヨゥ

lavaan WARNING: model has NOT converged! という警告は「モデルは収束しませんでした」という意味です。モデルが収束する,というのは「計算結果が出る」ということで,この警告が出たらそもそも答えが出ていない,出ていたとしても間違えた数字になっている,ということです。

理由はいくつか考えられます。

  • モデルを識別するのに変数が少なすぎる。例えば一つの項目で一つの潜在変数を作ろうとしても,無理がありますよね。
  • モデルを識別するのに条件が少なすぎる,多すぎる。これは識別の問題とよばれ,少し専門的な話になります。とりあえずモデルを書き換える必要があります。
  • 計算が思っていた時間内に終わりそうにない。この問題であれば,計算時間の締め切りを伸ばすことで解決できることもあります。そもそもサンプルサイズが小さすぎるという問題があるかもしれません。

理論的におかしな数字になるヨゥ

lavaan WARNING: some estimated ov variances are negative これは「いくつかの分散(の推定値)が負の数になったよ」という意味です。分散は理論的に正の数字にしかならない(二乗和だから)のに,あなたのモデルで計算するとどうしてもいくつかが負の数にならないと理屈が合わない,という警告です。答えは一応示されることがありますが,信用してはいけません。

  • モデルを書き換えましょう。
  • サンプルサイズが小さすぎてうまくいかないのかもしれません。

単位がおかしくない?

lavaan WARNING: some observed variances are (at least) a factor 1000 times larger than others; use varTable(fit) to investigate これは訳すと「いくつかの観測変数が(少なくとも)他のものより1000倍の単位を持っているよ」という意味です。桁が違いすぎるので大丈夫かおい,ってことです。

今回は年収のデータがそれに当たっていました。ゲームに出る回数はせいぜい3桁なのに,年収は何千万,とかだったりするので,警告が出たのです。心理系の一般的なデータの場合はこういう問題があまり生じないから心配ないんですけど。

  • 単位を整えましょう。

この他,SEMをやっていると警告やエラーが出ます。問題の根本的な解決のためには,SEMの数学的側面や理論的側面を学ばねばなりません。授業の範囲を超えますので,それらについてはこの本(http://amzn.to/2g61tlJ)などが参考になろうかと思います

CFAとEFA

潜在変数を仮定するモデルで因子を想定することができましたが,前回の因子分析とどこが違うのでしょうか?

前回の因子分析では,因子数がいくつなのか,どの項目がどの因子に関係するのかがわからないまま手探りで分析を始めました。そのやり方を探索的因子分析;Exploratory Factor Analysis,EFA と言います。

SEMで因子を想定してモデルを書くときは,どの項目がどの因子に関係するのか,仮説的なモデルを当てはめるのですから,このやり方を検証的因子分析;Conformatory Factor Analysis:CFAと言います。

先行研究などで因子の構造がすでにわかっている場合は,CFAをすると良いでしょう。 先行研究がないとか,先行研究と違う項目が入っている,対象が随分変わっているなどの理由でゼロベースで考え直したい時はEFAをやりましょう。 あるいは,CFAでどうにもモデルの適合度が悪い場合は,EFAで本当に仮説モデルが再現できそうなのか,チェックしてみてもいいでしょう。

EFAとCFAの違いを見ておこう

library(psych)
## 
## Attaching package: 'psych'
## The following object is masked from 'package:lavaan':
## 
##     cor2cov
dat <- bfi[1:25]
result.fa <- fa(dat,nfactors=4)
## Loading required namespace: GPArotation
print(result.fa,sort=T)
## Factor Analysis using method =  minres
## Call: fa(r = dat, nfactors = 4)
## Standardized loadings (pattern matrix) based upon correlation matrix
##    item   MR1   MR2   MR3   MR4    h2   u2 com
## E4   14  0.72 -0.06 -0.01 -0.09 0.505 0.49 1.0
## A5    5  0.63 -0.06  0.02  0.01 0.429 0.57 1.0
## A3    3  0.63  0.06  0.06 -0.01 0.406 0.59 1.0
## E3   13  0.57  0.06 -0.02  0.27 0.441 0.56 1.5
## E2   12 -0.56  0.22  0.04 -0.07 0.418 0.58 1.3
## A2    2  0.52  0.08  0.12 -0.01 0.299 0.70 1.2
## E1   11 -0.51  0.03  0.14 -0.10 0.276 0.72 1.2
## A4    4  0.41 -0.01  0.21 -0.17 0.243 0.76 1.9
## E5   15  0.39  0.07  0.23  0.21 0.340 0.66 2.3
## A1    1 -0.20  0.09  0.02 -0.02 0.056 0.94 1.4
## N3   18  0.02  0.75 -0.01  0.01 0.563 0.44 1.0
## N1   16  0.01  0.74 -0.01 -0.03 0.551 0.45 1.0
## N2   17 -0.02  0.73  0.01  0.02 0.542 0.46 1.0
## N4   19 -0.21  0.58 -0.08  0.06 0.443 0.56 1.3
## N5   20  0.03  0.56  0.03 -0.17 0.335 0.66 1.2
## C2    7  0.01  0.15  0.67  0.03 0.454 0.55 1.1
## C4    9  0.04  0.21 -0.60 -0.06 0.453 0.55 1.3
## C3    8  0.03  0.03  0.57 -0.07 0.319 0.68 1.0
## C1    6 -0.03  0.05  0.54  0.15 0.328 0.67 1.2
## C5   10 -0.09  0.25 -0.52  0.08 0.410 0.59 1.6
## O3   23  0.22  0.05  0.01  0.60 0.471 0.53 1.3
## O5   25  0.10  0.09 -0.04 -0.54 0.291 0.71 1.1
## O1   21  0.12  0.02  0.07  0.50 0.315 0.69 1.2
## O2   22  0.18  0.20 -0.07 -0.47 0.264 0.74 1.7
## O4   24 -0.08  0.24  0.03  0.32 0.154 0.85 2.0
## 
##                        MR1  MR2  MR3  MR4
## SS loadings           3.14 2.68 1.96 1.53
## Proportion Var        0.13 0.11 0.08 0.06
## Cumulative Var        0.13 0.23 0.31 0.37
## Proportion Explained  0.34 0.29 0.21 0.16
## Cumulative Proportion 0.34 0.62 0.84 1.00
## 
##  With factor correlations of 
##       MR1   MR2   MR3   MR4
## MR1  1.00 -0.19  0.27  0.22
## MR2 -0.19  1.00 -0.18 -0.05
## MR3  0.27 -0.18  1.00  0.18
## MR4  0.22 -0.05  0.18  1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  300  and the objective function was  7.23 with Chi Square of  20163.79
## The degrees of freedom for the model are 206  and the objective function was  1.23 
## 
## The root mean square of the residuals (RMSR) is  0.05 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  2762 with the empirical chi square  3555.08  with prob <  0 
## The total number of observations was  2800  with Likelihood Chi Square =  3421.61  with prob <  0 
## 
## Tucker Lewis Index of factoring reliability =  0.764
## RMSEA index =  0.075  and the 90 % confidence intervals are  0.072 0.077
## BIC =  1786.51
## Fit based upon off diagonal values = 0.95
## Measures of factor score adequacy             
##                                                    MR1  MR2  MR3  MR4
## Correlation of (regression) scores with factors   0.92 0.92 0.87 0.84
## Multiple R square of scores with factors          0.84 0.84 0.76 0.70
## Minimum correlation of possible factor scores     0.68 0.68 0.52 0.40
CFA <-'
A =~ A1 + A2 + A3 + A4 + A5
E =~ E1 + E2 + E3 + E4 + E5
N =~ N1 + N2 + N3 + N4 + N5
C =~ C1 + C2 + C3 + C4 + C5
O =~ O1 + O2 + O3 + O4 + O5
'

result.fit3 <- sem(CFA,data=bfi)
summary(result.fit3,fit.measures=T,standardized=T)
## lavaan (0.5-23.1097) converged normally after  55 iterations
## 
##                                                   Used       Total
##   Number of observations                          2436        2800
## 
##   Estimator                                         ML
##   Minimum Function Test Statistic             4165.467
##   Degrees of freedom                               265
##   P-value (Chi-square)                           0.000
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic            18222.116
##   Degrees of freedom                               300
##   P-value                                        0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.782
##   Tucker-Lewis Index (TLI)                       0.754
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -99840.238
##   Loglikelihood unrestricted model (H1)     -97757.504
## 
##   Number of free parameters                         60
##   Akaike (AIC)                              199800.476
##   Bayesian (BIC)                            200148.363
##   Sample-size adjusted Bayesian (BIC)       199957.729
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.078
##   90 Percent Confidence Interval          0.076  0.080
##   P-value RMSEA <= 0.05                          0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.075
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Standard Errors                             Standard
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A =~                                                                  
##     A1                1.000                               0.484    0.344
##     A2               -1.579    0.108  -14.650    0.000   -0.764   -0.648
##     A3               -2.030    0.134  -15.093    0.000   -0.983   -0.749
##     A4               -1.564    0.115  -13.616    0.000   -0.757   -0.510
##     A5               -1.804    0.121  -14.852    0.000   -0.873   -0.687
##   E =~                                                                  
##     E1                1.000                               0.920    0.564
##     E2                1.226    0.051   23.899    0.000    1.128    0.699
##     E3               -0.921    0.041  -22.431    0.000   -0.847   -0.627
##     E4               -1.121    0.047  -23.977    0.000   -1.031   -0.703
##     E5               -0.808    0.039  -20.648    0.000   -0.743   -0.553
##   N =~                                                                  
##     N1                1.000                               1.300    0.825
##     N2                0.947    0.024   39.899    0.000    1.230    0.803
##     N3                0.884    0.025   35.919    0.000    1.149    0.721
##     N4                0.692    0.025   27.753    0.000    0.899    0.573
##     N5                0.628    0.026   24.027    0.000    0.816    0.503
##   C =~                                                                  
##     C1                1.000                               0.680    0.551
##     C2                1.148    0.057   20.152    0.000    0.781    0.592
##     C3                1.036    0.054   19.172    0.000    0.705    0.546
##     C4               -1.421    0.065  -21.924    0.000   -0.967   -0.702
##     C5               -1.489    0.072  -20.694    0.000   -1.012   -0.620
##   O =~                                                                  
##     O1                1.000                               0.635    0.564
##     O2               -1.020    0.068  -14.962    0.000   -0.648   -0.418
##     O3                1.373    0.072   18.942    0.000    0.872    0.724
##     O4                0.437    0.048    9.160    0.000    0.277    0.233
##     O5               -0.960    0.060  -16.056    0.000   -0.610   -0.461
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A ~~                                                                  
##     E                 0.304    0.025   12.293    0.000    0.683    0.683
##     N                 0.141    0.018    7.712    0.000    0.223    0.223
##     C                -0.110    0.012   -9.254    0.000   -0.334   -0.334
##     O                -0.093    0.011   -8.446    0.000   -0.303   -0.303
##   E ~~                                                                  
##     N                 0.292    0.032    9.131    0.000    0.244    0.244
##     C                -0.224    0.020  -11.121    0.000   -0.357   -0.357
##     O                -0.265    0.021  -12.347    0.000   -0.453   -0.453
##   N ~~                                                                  
##     C                -0.250    0.025  -10.117    0.000   -0.283   -0.283
##     O                -0.093    0.022   -4.138    0.000   -0.112   -0.112
##   C ~~                                                                  
##     O                 0.130    0.014    9.190    0.000    0.301    0.301
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .A1                1.745    0.052   33.725    0.000    1.745    0.882
##    .A2                0.807    0.028   28.396    0.000    0.807    0.580
##    .A3                0.754    0.032   23.339    0.000    0.754    0.438
##    .A4                1.632    0.051   31.796    0.000    1.632    0.740
##    .A5                0.852    0.032   26.800    0.000    0.852    0.528
##    .E1                1.814    0.058   31.047    0.000    1.814    0.682
##    .E2                1.332    0.049   26.928    0.000    1.332    0.512
##    .E3                1.108    0.038   29.522    0.000    1.108    0.607
##    .E4                1.088    0.041   26.732    0.000    1.088    0.506
##    .E5                1.251    0.040   31.258    0.000    1.251    0.694
##    .N1                0.793    0.037   21.575    0.000    0.793    0.320
##    .N2                0.836    0.036   23.458    0.000    0.836    0.356
##    .N3                1.222    0.043   28.271    0.000    1.222    0.481
##    .N4                1.654    0.052   31.977    0.000    1.654    0.672
##    .N5                1.969    0.060   32.889    0.000    1.969    0.747
##    .C1                1.063    0.035   30.073    0.000    1.063    0.697
##    .C2                1.130    0.039   28.890    0.000    1.130    0.650
##    .C3                1.170    0.039   30.194    0.000    1.170    0.702
##    .C4                0.960    0.040   24.016    0.000    0.960    0.507
##    .C5                1.640    0.059   27.907    0.000    1.640    0.615
##    .O1                0.865    0.032   27.216    0.000    0.865    0.682
##    .O2                1.990    0.063   31.618    0.000    1.990    0.826
##    .O3                0.691    0.039   17.717    0.000    0.691    0.476
##    .O4                1.346    0.040   34.036    0.000    1.346    0.946
##    .O5                1.380    0.045   30.662    0.000    1.380    0.788
##     A                 0.234    0.030    7.839    0.000    1.000    1.000
##     E                 0.846    0.062   13.693    0.000    1.000    1.000
##     N                 1.689    0.073   23.034    0.000    1.000    1.000
##     C                 0.463    0.036   12.810    0.000    1.000    1.000
##     O                 0.404    0.033   12.156    0.000    1.000    1.000
semPaths(result.fit3,what="stand",style="lisrel")

同じモデルを違う集団に

SEMを使ってモデルを書くことができる利点の一つは,同じモデルを複数のデータに当てはめることができるという点です。 これはモデルの妥当性を検証する場合に適しています。 同じモデルを当てはめる時に,様々な制約・統制をかけたりすることで,群間の違いがどこにあるかを検証することもできます。

この分析方法を多母集団同時分析と言います。

先ほどの因子分析モデルを,男女で比較して見ましょう。

result.fit4<- sem(CFA,data=bfi,group = "gender")
summary(result.fit4,fit.measures=T,standardized=T)
## lavaan (0.5-23.1097) converged normally after 100 iterations
## 
##                                                   Used       Total
##   Number of observations per group         
##   1                                                805         919
##   2                                               1631        1881
## 
##   Estimator                                         ML
##   Minimum Function Test Statistic             4545.267
##   Degrees of freedom                               530
##   P-value (Chi-square)                           0.000
## 
## Chi-square for each group:
## 
##   1                                           1673.974
##   2                                           2871.293
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic            18451.441
##   Degrees of freedom                               600
##   P-value                                        0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.775
##   Tucker-Lewis Index (TLI)                       0.745
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -99576.868
##   Loglikelihood unrestricted model (H1)     -97304.234
## 
##   Number of free parameters                        170
##   Akaike (AIC)                              199493.736
##   Bayesian (BIC)                            200479.415
##   Sample-size adjusted Bayesian (BIC)       199939.285
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.079
##   90 Percent Confidence Interval          0.077  0.081
##   P-value RMSEA <= 0.05                          0.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.075
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Standard Errors                             Standard
## 
## 
## Group 1 [1]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A =~                                                                  
##     A1                1.000                               0.449    0.315
##     A2               -1.806    0.232   -7.799    0.000   -0.812   -0.639
##     A3               -2.267    0.282   -8.052    0.000   -1.019   -0.764
##     A4               -1.708    0.232   -7.374    0.000   -0.768   -0.516
##     A5               -2.181    0.272   -8.015    0.000   -0.980   -0.739
##   E =~                                                                  
##     E1                1.000                               0.976    0.586
##     E2                1.215    0.081   14.933    0.000    1.187    0.729
##     E3               -0.919    0.067  -13.811    0.000   -0.897   -0.644
##     E4               -1.152    0.077  -15.003    0.000   -1.125   -0.736
##     E5               -0.879    0.065  -13.544    0.000   -0.858   -0.625
##   N =~                                                                  
##     N1                1.000                               1.250    0.796
##     N2                0.966    0.046   20.952    0.000    1.207    0.786
##     N3                0.862    0.045   18.964    0.000    1.077    0.700
##     N4                0.745    0.047   15.830    0.000    0.931    0.589
##     N5                0.552    0.045   12.320    0.000    0.689    0.464
##   C =~                                                                  
##     C1                1.000                               0.682    0.556
##     C2                1.125    0.098   11.471    0.000    0.768    0.579
##     C3                1.003    0.094   10.722    0.000    0.684    0.521
##     C4               -1.430    0.114  -12.574    0.000   -0.976   -0.691
##     C5               -1.527    0.127  -12.042    0.000   -1.042   -0.630
##   O =~                                                                  
##     O1                1.000                               0.620    0.578
##     O2               -0.984    0.120   -8.196    0.000   -0.610   -0.398
##     O3                1.356    0.128   10.621    0.000    0.841    0.693
##     O4                0.518    0.088    5.892    0.000    0.321    0.267
##     O5               -1.036    0.111   -9.315    0.000   -0.642   -0.477
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A ~~                                                                  
##     E                 0.295    0.044    6.762    0.000    0.672    0.672
##     N                 0.108    0.028    3.869    0.000    0.192    0.192
##     C                -0.089    0.019   -4.796    0.000   -0.290   -0.290
##     O                -0.081    0.018   -4.636    0.000   -0.292   -0.292
##   E ~~                                                                  
##     N                 0.289    0.056    5.166    0.000    0.237    0.237
##     C                -0.268    0.038   -7.061    0.000   -0.403   -0.403
##     O                -0.221    0.035   -6.306    0.000   -0.364   -0.364
##   N ~~                                                                  
##     C                -0.266    0.043   -6.215    0.000   -0.312   -0.312
##     O                -0.054    0.037   -1.458    0.145   -0.069   -0.069
##   C ~~                                                                  
##     O                 0.135    0.025    5.485    0.000    0.319    0.319
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .A1                2.722    0.050   54.042    0.000    2.722    1.905
##    .A2                4.481    0.045  100.003    0.000    4.481    3.525
##    .A3                4.334    0.047   92.228    0.000    4.334    3.251
##    .A4                4.427    0.052   84.499    0.000    4.427    2.978
##    .A5                4.361    0.047   93.244    0.000    4.361    3.286
##    .E1                3.267    0.059   55.599    0.000    3.267    1.960
##    .E2                3.281    0.057   57.217    0.000    3.281    2.017
##    .E3                3.902    0.049   79.443    0.000    3.902    2.800
##    .E4                4.235    0.054   78.568    0.000    4.235    2.769
##    .E5                4.256    0.048   88.011    0.000    4.256    3.102
##    .N1                2.845    0.055   51.443    0.000    2.845    1.813
##    .N2                3.288    0.054   60.772    0.000    3.288    2.142
##    .N3                2.940    0.054   54.258    0.000    2.940    1.912
##    .N4                3.201    0.056   57.403    0.000    3.201    2.023
##    .N5                2.476    0.052   47.228    0.000    2.476    1.665
##    .C1                4.507    0.043  104.245    0.000    4.507    3.674
##    .C2                4.255    0.047   91.057    0.000    4.255    3.209
##    .C3                4.207    0.046   90.966    0.000    4.207    3.206
##    .C4                2.687    0.050   54.023    0.000    2.687    1.904
##    .C5                3.489    0.058   59.872    0.000    3.489    2.110
##    .O1                4.990    0.038  131.870    0.000    4.990    4.648
##    .O2                2.589    0.054   47.925    0.000    2.589    1.689
##    .O3                4.522    0.043  105.746    0.000    4.522    3.727
##    .O4                4.957    0.042  116.875    0.000    4.957    4.119
##    .O5                2.394    0.048   50.395    0.000    2.394    1.776
##     A                 0.000                               0.000    0.000
##     E                 0.000                               0.000    0.000
##     N                 0.000                               0.000    0.000
##     C                 0.000                               0.000    0.000
##     O                 0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .A1                1.840    0.094   19.556    0.000    1.840    0.901
##    .A2                0.957    0.057   16.807    0.000    0.957    0.592
##    .A3                0.739    0.056   13.318    0.000    0.739    0.416
##    .A4                1.621    0.088   18.368    0.000    1.621    0.733
##    .A5                0.800    0.056   14.270    0.000    0.800    0.454
##    .E1                1.826    0.102   17.916    0.000    1.826    0.657
##    .E2                1.238    0.081   15.329    0.000    1.238    0.468
##    .E3                1.137    0.066   17.141    0.000    1.137    0.586
##    .E4                1.073    0.071   15.156    0.000    1.073    0.459
##    .E5                1.146    0.066   17.413    0.000    1.146    0.609
##    .N1                0.900    0.069   12.987    0.000    0.900    0.366
##    .N2                0.901    0.067   13.450    0.000    0.901    0.382
##    .N3                1.205    0.074   16.209    0.000    1.205    0.510
##    .N4                1.636    0.091   17.981    0.000    1.636    0.654
##    .N5                1.737    0.091   19.000    0.000    1.737    0.785
##    .C1                1.039    0.061   17.165    0.000    1.039    0.691
##    .C2                1.168    0.070   16.791    0.000    1.168    0.665
##    .C3                1.254    0.071   17.656    0.000    1.254    0.728
##    .C4                1.040    0.074   14.090    0.000    1.040    0.522
##    .C5                1.648    0.105   15.764    0.000    1.648    0.603
##    .O1                0.768    0.051   15.006    0.000    0.768    0.666
##    .O2                1.976    0.108   18.262    0.000    1.976    0.841
##    .O3                0.765    0.069   11.068    0.000    0.765    0.520
##    .O4                1.344    0.070   19.341    0.000    1.344    0.929
##    .O5                1.404    0.082   17.207    0.000    1.404    0.773
##     A                 0.202    0.049    4.133    0.000    1.000    1.000
##     E                 0.953    0.114    8.357    0.000    1.000    1.000
##     N                 1.562    0.126   12.410    0.000    1.000    1.000
##     C                 0.465    0.063    7.430    0.000    1.000    1.000
##     O                 0.385    0.055    7.035    0.000    1.000    1.000
## 
## 
## Group 2 [2]:
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A =~                                                                  
##     A1                1.000                               0.451    0.330
##     A2               -1.531    0.136  -11.294    0.000   -0.691   -0.629
##     A3               -2.074    0.178  -11.630    0.000   -0.936   -0.731
##     A4               -1.577    0.151  -10.452    0.000   -0.712   -0.485
##     A5               -1.799    0.158  -11.413    0.000   -0.812   -0.659
##   E =~                                                                  
##     E1                1.000                               0.859    0.539
##     E2                1.273    0.070   18.267    0.000    1.093    0.682
##     E3               -0.960    0.055  -17.358    0.000   -0.824   -0.620
##     E4               -1.127    0.062  -18.218    0.000   -0.968   -0.678
##     E5               -0.786    0.051  -15.331    0.000   -0.675   -0.510
##   N =~                                                                  
##     N1                1.000                               1.319    0.837
##     N2                0.927    0.027   33.767    0.000    1.223    0.805
##     N3                0.885    0.029   30.411    0.000    1.167    0.728
##     N4                0.682    0.029   23.169    0.000    0.900    0.576
##     N5                0.635    0.031   20.360    0.000    0.838    0.513
##   C =~                                                                  
##     C1                1.000                               0.678    0.547
##     C2                1.143    0.070   16.408    0.000    0.775    0.591
##     C3                1.045    0.066   15.790    0.000    0.709    0.555
##     C4               -1.414    0.079  -17.912    0.000   -0.958   -0.708
##     C5               -1.467    0.087  -16.805    0.000   -0.994   -0.616
##   O =~                                                                  
##     O1                1.000                               0.638    0.559
##     O2               -1.000    0.082  -12.241    0.000   -0.638   -0.409
##     O3                1.404    0.088   15.993    0.000    0.896    0.747
##     O4                0.401    0.057    7.084    0.000    0.256    0.216
##     O5               -0.904    0.070  -12.936    0.000   -0.577   -0.440
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   A ~~                                                                  
##     E                 0.265    0.028    9.565    0.000    0.685    0.685
##     N                 0.174    0.023    7.389    0.000    0.291    0.291
##     C                -0.104    0.014   -7.444    0.000   -0.341   -0.341
##     O                -0.102    0.014   -7.384    0.000   -0.356   -0.356
##   E ~~                                                                  
##     N                 0.314    0.038    8.203    0.000    0.277    0.277
##     C                -0.188    0.023   -8.330    0.000   -0.324   -0.324
##     O                -0.292    0.027  -10.813    0.000   -0.532   -0.532
##   N ~~                                                                  
##     C                -0.263    0.031   -8.584    0.000   -0.294   -0.294
##     O                -0.096    0.028   -3.488    0.000   -0.114   -0.114
##   C ~~                                                                  
##     O                 0.132    0.017    7.617    0.000    0.304    0.304
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .A1                2.251    0.034   66.380    0.000    2.251    1.644
##    .A2                4.953    0.027  182.186    0.000    4.953    4.511
##    .A3                4.729    0.032  149.206    0.000    4.729    3.695
##    .A4                4.816    0.036  132.569    0.000    4.816    3.283
##    .A5                4.633    0.031  151.909    0.000    4.633    3.761
##    .E1                2.836    0.039   71.867    0.000    2.836    1.780
##    .E2                3.092    0.040   77.887    0.000    3.092    1.929
##    .E3                4.025    0.033  122.375    0.000    4.025    3.030
##    .E4                4.495    0.035  127.198    0.000    4.495    3.150
##    .E5                4.457    0.033  136.018    0.000    4.457    3.368
##    .N1                2.993    0.039   76.661    0.000    2.993    1.898
##    .N2                3.631    0.038   96.528    0.000    3.631    2.390
##    .N3                3.365    0.040   84.763    0.000    3.365    2.099
##    .N4                3.203    0.039   82.766    0.000    3.203    2.049
##    .N5                3.216    0.040   79.597    0.000    3.216    1.971
##    .C1                4.534    0.031  147.786    0.000    4.534    3.659
##    .C2                4.430    0.032  136.416    0.000    4.430    3.378
##    .C3                4.346    0.032  137.354    0.000    4.346    3.401
##    .C4                2.482    0.034   74.039    0.000    2.482    1.833
##    .C5                3.215    0.040   80.444    0.000    3.215    1.992
##    .O1                4.725    0.028  167.191    0.000    4.725    4.140
##    .O2                2.732    0.039   70.722    0.000    2.732    1.751
##    .O3                4.414    0.030  148.657    0.000    4.414    3.681
##    .O4                4.910    0.029  166.987    0.000    4.910    4.135
##    .O5                2.506    0.032   77.241    0.000    2.506    1.913
##     A                 0.000                               0.000    0.000
##     E                 0.000                               0.000    0.000
##     N                 0.000                               0.000    0.000
##     C                 0.000                               0.000    0.000
##     O                 0.000                               0.000    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .A1                1.672    0.061   27.599    0.000    1.672    0.891
##    .A2                0.729    0.031   23.276    0.000    0.729    0.604
##    .A3                0.762    0.040   19.242    0.000    0.762    0.465
##    .A4                1.646    0.063   26.115    0.000    1.646    0.765
##    .A5                0.858    0.038   22.336    0.000    0.858    0.566
##    .E1                1.803    0.071   25.564    0.000    1.803    0.710
##    .E2                1.375    0.062   22.122    0.000    1.375    0.535
##    .E3                1.085    0.045   23.948    0.000    1.085    0.615
##    .E4                1.100    0.049   22.249    0.000    1.100    0.540
##    .E5                1.296    0.050   25.986    0.000    1.296    0.740
##    .N1                0.746    0.043   17.277    0.000    0.746    0.300
##    .N2                0.812    0.042   19.534    0.000    0.812    0.352
##    .N3                1.209    0.052   23.196    0.000    1.209    0.470
##    .N4                1.632    0.062   26.259    0.000    1.632    0.668
##    .N5                1.960    0.073   26.908    0.000    1.960    0.736
##    .C1                1.076    0.044   24.693    0.000    1.076    0.701
##    .C2                1.120    0.047   23.685    0.000    1.120    0.651
##    .C3                1.131    0.046   24.538    0.000    1.131    0.692
##    .C4                0.914    0.047   19.394    0.000    0.914    0.499
##    .C5                1.616    0.070   22.975    0.000    1.616    0.620
##    .O1                0.896    0.039   22.856    0.000    0.896    0.688
##    .O2                2.027    0.077   26.193    0.000    2.027    0.833
##    .O3                0.636    0.046   13.686    0.000    0.636    0.442
##    .O4                1.344    0.048   28.001    0.000    1.344    0.953
##    .O5                1.384    0.054   25.697    0.000    1.384    0.806
##     A                 0.204    0.034    6.065    0.000    1.000    1.000
##     E                 0.737    0.070   10.519    0.000    1.000    1.000
##     N                 1.740    0.090   19.362    0.000    1.000    1.000
##     C                 0.460    0.044   10.409    0.000    1.000    1.000
##     O                 0.407    0.041   10.023    0.000    1.000    1.000

それぞれのグループでの影響力の違いなどを見ることができます。

本日の課題

  1. 三因子構造を仮定して,探索的因子分析を行なってください
  2. 探索的因子分析の結果を参考に,検証的因子分析を行なってください
  3. 第一因子を従属変数,第二・第三因子を独立変数とした回帰のパスを引く,構造方程式モデルを書いてください。