井出草平の研究ノート

ベイズ推定による因子分析[Mplus]

f:id:iDES:20201228170955g:plain

頻度主義で行うのと特に何かが変わるというわけではないものの、Mplusでベイズ推定で因子分析を行った。

コード

  DATA: FILE = "HS1939.dat";

  VARIABLE:
    NAMES = x1 x2 x3 x4 x5 x6 x7 x8 x9;
    MISSING=.;

  ANALYSIS:
    ESTIMATOR = BAYES;
    PROCESS = 2;
    FBITER = 10000;

  MODEL:
    visual by x1-x3;
    textual by x4-x6;
    speed by x7-x9;

  OUTPUT:
    STDYX;

標準化した解を掲載する。

STDYX Standardization

                                Posterior  One-Tailed         95% C.I.
                    Estimate       S.D.      P-Value   Lower 2.5%  Upper 2.5%  Significance
 VISUAL   BY
    X1                 0.769       0.056      0.000       0.647       0.866      *
    X2                 0.425       0.063      0.000       0.297       0.543      *
    X3                 0.585       0.059      0.000       0.463       0.695      *

 TEXTUAL  BY
    X4                 0.852       0.024      0.000       0.800       0.894      *
    X5                 0.855       0.023      0.000       0.807       0.897      *
    X6                 0.838       0.024      0.000       0.786       0.881      *

 SPEED    BY
    X7                 0.562       0.057      0.000       0.437       0.664      *
    X8                 0.720       0.065      0.000       0.575       0.831      *
    X9                 0.669       0.067      0.000       0.540       0.804      *

 TEXTUAL  WITH
    VISUAL             0.454       0.064      0.000       0.321       0.572      *

 SPEED    WITH
    VISUAL             0.471       0.084      0.000       0.301       0.629      *
    TEXTUAL            0.281       0.071      0.000       0.142       0.417      *

 Intercepts
    X1                 4.179       0.184      0.000       3.823       4.534      *
    X2                 5.124       0.221      0.000       4.692       5.566      *
    X3                 1.970       0.099      0.000       1.781       2.167      *
    X4                 2.600       0.123      0.000       2.360       2.843      *
    X5                 3.327       0.149      0.000       3.039       3.617      *
    X6                 1.973       0.100      0.000       1.780       2.169      *
    X7                 3.806       0.165      0.000       3.486       4.130      *
    X8                 5.404       0.229      0.000       4.963       5.856      *
    X9                 5.275       0.228      0.000       4.834       5.729      *

 Variances
    VISUAL             1.000       0.000      0.000       1.000       1.000
    TEXTUAL            1.000       0.000      0.000       1.000       1.000
    SPEED              1.000       0.000      0.000       1.000       1.000

 Residual Variances
    X1                 0.408       0.084      0.000       0.250       0.581      *
    X2                 0.819       0.053      0.000       0.705       0.912      *
    X3                 0.658       0.069      0.000       0.517       0.786      *
    X4                 0.274       0.040      0.000       0.201       0.360      *
    X5                 0.268       0.039      0.000       0.196       0.348      *
    X6                 0.298       0.040      0.000       0.224       0.382      *
    X7                 0.684       0.064      0.000       0.559       0.809      *
    X8                 0.482       0.092      0.000       0.309       0.670      *
    X9                 0.553       0.091      0.000       0.354       0.708      *

最尤法での推定

いわゆる普通の因子分析である。

DATA: FILE = "HS1939.dat";

VARIABLE: 
NAMES = x1 x2 x3 x4 x5 x6 x7 x8 x9; 

MISSING=.;

ANALYSIS: 
ESTIMATOR = ML;

MODEL:
visual by x1-x3;
textual by x4-x6;
speed by x7-x9;

OUTPUT:
STDYX;

こちらも標準化した解。

STDYX Standardization

                                                    Two-Tailed
                    Estimate       S.E.  Est./S.E.    P-Value

 VISUAL   BY
    X1                 0.772      0.058     13.417      0.000
    X2                 0.424      0.063      6.752      0.000
    X3                 0.581      0.058      9.941      0.000

 TEXTUAL  BY
    X4                 0.852      0.023     37.612      0.000
    X5                 0.855      0.022     38.529      0.000
    X6                 0.838      0.024     35.597      0.000

 SPEED    BY
    X7                 0.569      0.058      9.766      0.000
    X8                 0.723      0.062     11.607      0.000
    X9                 0.665      0.066     10.063      0.000

 TEXTUAL  WITH
    VISUAL             0.459      0.063      7.225      0.000

 SPEED    WITH
    VISUAL             0.471      0.086      5.457      0.000
    TEXTUAL            0.283      0.071      3.960      0.000

 Intercepts
    X1                 4.235      0.182     23.272      0.000
    X2                 5.179      0.219     23.669      0.000
    X3                 1.993      0.100     20.010      0.000
    X4                 2.634      0.122     21.617      0.000
    X5                 3.369      0.149     22.623      0.000
    X6                 1.998      0.100     20.027      0.000
    X7                 3.848      0.167     23.030      0.000
    X8                 5.467      0.230     23.754      0.000
    X9                 5.334      0.225     23.716      0.000

 Variances
    VISUAL             1.000      0.000    999.000    999.000
    TEXTUAL            1.000      0.000    999.000    999.000
    SPEED              1.000      0.000    999.000    999.000

 Residual Variances
    X1                 0.404      0.089      4.550      0.000
    X2                 0.821      0.053     15.438      0.000
    X3                 0.662      0.068      9.749      0.000
    X4                 0.275      0.039      7.126      0.000
    X5                 0.269      0.038      7.084      0.000
    X6                 0.298      0.039      7.546      0.000
    X7                 0.676      0.066     10.172      0.000
    X8                 0.477      0.090      5.298      0.000
    X9                 0.558      0.088      6.345      0.000

ちなみに標準化した解での共分散は当然ながら相関係数になる。

データ

データはRのlavaanパッケージに含まれるHolzingerSwineford1939を利用した。
下記の手順でデータセットが作成できる。

dataの呼び出し

library(lavaan)
data(HolzingerSwineford1939)
dat <- HolzingerSwineford1939[7:15]

Mplusへの書き出し

library(MplusAutomation)
variable.names(dat) # 変数名を書き出し
prepareMplusData(dat, filename="HS1939.dat", 
                keepCols=c("x1","x2","x3", "x4", "x5", "x6", "x7", "x8","x9"),
                overwrite=T)