Rを使った項目反応理論と構造方程式モデリング

Author

kosugitti

Published

July 22, 2024

項目反応理論

# パッケージの読み込み
library(pacman)
pacman::p_load(tidyverse, ltm, psych, lavaan, semPlot)

# サンプルデータの読み込み
dat <- read_csv("IRTsample.csv")
Rows: 500 Columns: 10
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (10): V1, V2, V3, V4, V5, V6, V7, V8, V9, V10

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# データの記述統計量を確認する
ltm::descript(dat)

Descriptive statistics for the 'dat' data-set

Sample:
 10 items and 500 sample units; 0 missing values

Proportions for each level of response:
        0     1   logit
V1  0.710 0.290 -0.8954
V2  0.114 0.886  2.0505
V3  0.186 0.814  1.4762
V4  0.206 0.794  1.3492
V5  0.670 0.330 -0.7082
V6  0.832 0.168 -1.5999
V7  0.666 0.334 -0.6901
V8  0.884 0.116 -2.0309
V9  0.652 0.348 -0.6278
V10 0.254 0.746  1.0774


Frequencies of total scores:
     0  1  2  3  4   5  6  7  8  9 10
Freq 4 19 41 62 97 104 66 54 36 14  3


Point Biserial correlation with Total Score:
    Included Excluded
V1    0.4228   0.2118
V2    0.3959   0.2502
V3    0.5202   0.3567
V4    0.5209   0.3501
V5    0.5449   0.3470
V6    0.4635   0.2983
V7    0.5440   0.3452
V8    0.2901   0.1350
V9    0.4992   0.2890
V10   0.5890   0.4180


Cronbach's alpha:
               value
All Items     0.6341
Excluding V1  0.6303
Excluding V2  0.6195
Excluding V3  0.5978
Excluding V4  0.5986
Excluding V5  0.5982
Excluding V6  0.6100
Excluding V7  0.5987
Excluding V8  0.6380
Excluding V9  0.6130
Excluding V10 0.5817


Pairwise Associations:
   Item i Item j p.value
1       2      8   0.625
2       1      8   0.409
3       1      2   0.347
4       6      8   0.303
5       4      8   0.234
6       7      8   0.222
7       5      8   0.195
8       1      4   0.191
9       1      3   0.166
10      3      8   0.124

IRTモデルの実践

1plモデル

result.1pl <- rasch(dat)
print(result.1pl)

Call:
rasch(data = dat)

Coefficients:
 Dffclt.V1   Dffclt.V2   Dffclt.V3   Dffclt.V4   Dffclt.V5   Dffclt.V6  
     0.992      -2.208      -1.615      -1.480       0.787       1.744  
 Dffclt.V7   Dffclt.V8   Dffclt.V9  Dffclt.V10      Dscrmn  
     0.768       2.187       0.699      -1.189       1.126  

Log.Lik: -2468.743
plot(result.1pl, type = "ICC")

plot(result.1pl, type = "IIC")

plot(result.1pl, type = "IIC", items = 0)

2plモデル

result.2pl <- ltm(dat~z1)
print(result.2pl)

Call:
ltm(formula = dat ~ z1)

Coefficients:
     Dffclt  Dscrmn
V1    1.602   0.603
V2   -2.078   1.228
V3   -1.213   1.892
V4   -1.199   1.620
V5    0.759   1.176
V6    1.698   1.175
V7    0.740   1.174
V8    4.133   0.516
V9    0.866   0.828
V10  -0.880   2.020

Log.Lik: -2446.104
plot(result.2pl, type = "ICC")

plot(result.2pl, type = "IIC")

plot(result.2pl, type = "IIC", items = 0)

3plモデル

result.3pl <- tpm(dat)
print(result.3pl)

Call:
tpm(data = dat)

Coefficients:
     Gussng  Dffclt  Dscrmn
V1    0.230   1.406  15.623
V2    0.638  -0.609   2.235
V3    0.231  -0.817   2.930
V4    0.321  -0.643   2.310
V5    0.149   0.931   2.994
V6    0.043   1.613   1.704
V7    0.074   0.879   1.509
V8    0.000   4.494   0.471
V9    0.132   1.144   1.254
V10   0.278  -0.438   3.088

Log.Lik: -2431.371
plot(result.3pl, type = "ICC")

plot(result.3pl, type = "IIC")

plot(result.3pl, type = "IIC", items = 0)

段階反応モデル

## サンプルデータ
dat <- bfi %>%
    dplyr::select(-gender, -education, -age) %>%
    dplyr::select(starts_with("N"))
head(dat)
      N1 N2 N3 N4 N5
61617  3  4  2  2  3
61618  3  3  3  5  5
61620  4  5  4  2  3
61621  2  5  2  4  1
61622  2  3  4  4  3
61623  3  5  2  2  3
result.grm <- ltm::grm(dat)
print(result.grm)

Call:
ltm::grm(data = dat)

Coefficients:
    Extrmt1  Extrmt2  Extrmt3  Extrmt4  Extrmt5  Dscrmn
N1   -0.810   -0.093    0.342    0.985    1.720   3.125
N2   -1.366   -0.555   -0.111    0.648    1.483   2.890
N3   -1.187   -0.298    0.123    0.876    1.767   2.026
N4   -1.564   -0.355    0.238    1.240    2.280   1.277
N5   -1.296   -0.125    0.494    1.479    2.530   1.112

Log.Lik: -21721.91
plot(result.grm, type = "ICC", items = 1)

plot(result.grm, type = "IIC", items = 1)

plot(result.grm, type = "ICC", items = 4)

plot(result.grm, type = "IIC", items = 4)

plot(result.grm, type = "IIC", items = 0)

因子分析

dat <- bfi %>%
    dplyr::select(-gender, -education, -age)
result.fa <- fa(dat, nfactors = 5, rotate = "promax")
Loading required namespace: GPArotation
print(result.fa, sort = TRUE, cut = 0.3)
Factor Analysis using method =  minres
Call: fa(r = dat, nfactors = 5, rotate = "promax")
Standardized loadings (pattern matrix) based upon correlation matrix
   item   MR2   MR1   MR3   MR5   MR4   h2   u2 com
N1   16  0.81                         0.65 0.35 1.3
N2   17  0.78                         0.60 0.40 1.2
N3   18  0.74                         0.55 0.45 1.0
N4   19  0.53                         0.49 0.51 1.7
N5   20  0.53                         0.35 0.65 1.5
E2   12       -0.71                   0.54 0.46 1.1
E4   14        0.66                   0.53 0.47 1.3
E1   11       -0.63                   0.35 0.65 1.1
E3   13        0.54                   0.44 0.56 1.6
E5   15        0.49                   0.40 0.60 1.8
C2    7              0.69             0.45 0.55 1.2
C4    9             -0.62             0.45 0.55 1.2
C3    8              0.59             0.32 0.68 1.1
C1    6              0.56             0.33 0.67 1.2
C5   10             -0.55             0.43 0.57 1.4
A3    3                    0.61       0.52 0.48 1.3
A2    2                    0.60       0.45 0.55 1.1
A5    5        0.33        0.49       0.46 0.54 1.8
A1    1                   -0.44       0.19 0.81 1.5
A4    4                    0.40       0.28 0.72 2.0
O3   23                          0.57 0.46 0.54 1.5
O5   25                         -0.54 0.30 0.70 1.1
O1   21                          0.48 0.31 0.69 1.4
O2   22                         -0.47 0.26 0.74 1.5
O4   24                          0.38 0.25 0.75 2.7

                       MR2  MR1  MR3  MR5  MR4
SS loadings           2.67 2.54 1.95 1.75 1.46
Proportion Var        0.11 0.10 0.08 0.07 0.06
Cumulative Var        0.11 0.21 0.29 0.36 0.41
Proportion Explained  0.26 0.24 0.19 0.17 0.14
Cumulative Proportion 0.26 0.50 0.69 0.86 1.00

 With factor correlations of 
      MR2   MR1   MR3   MR5  MR4
MR2  1.00 -0.24 -0.22 -0.01 0.02
MR1 -0.24  1.00  0.39  0.35 0.15
MR3 -0.22  0.39  1.00  0.25 0.19
MR5 -0.01  0.35  0.25  1.00 0.16
MR4  0.02  0.15  0.19  0.16 1.00

Mean item complexity =  1.4
Test of the hypothesis that 5 factors are sufficient.

df null model =  300  with the objective function =  7.23 with Chi Square =  20163.79
df of  the model are 185  and the objective function was  0.65 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.04 

The harmonic n.obs is  2762 with the empirical chi square  1392.16  with prob <  5.6e-184 
The total n.obs was  2800  with Likelihood Chi Square =  1808.94  with prob <  4.3e-264 

Tucker Lewis Index of factoring reliability =  0.867
RMSEA index =  0.056  and the 90 % confidence intervals are  0.054 0.058
BIC =  340.53
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                   MR2  MR1  MR3  MR5  MR4
Correlation of (regression) scores with factors   0.92 0.91 0.88 0.86 0.83
Multiple R square of scores with factors          0.85 0.83 0.78 0.74 0.69
Minimum correlation of possible factor scores     0.71 0.65 0.56 0.49 0.38

カテゴリカル

result.fa.poly <- fa.poly(dat, nfactors = 5, rotate = "promax")
print(result.fa.poly, sort = TRUE, cut = 0.3)
Factor Analysis using method =  minres
Call: fa.poly(x = dat, nfactors = 5, rotate = "promax")
Standardized loadings (pattern matrix) based upon correlation matrix
   item   MR2   MR1   MR3   MR5   MR4   h2   u2 com
N1   16  0.85                         0.71 0.29 1.3
N2   17  0.82                         0.65 0.35 1.2
N3   18  0.77                         0.59 0.41 1.0
N5   20  0.56                         0.40 0.60 1.5
N4   19  0.56 -0.31                   0.53 0.47 1.7
E2   12       -0.76                   0.61 0.39 1.1
E4   14        0.71                   0.59 0.41 1.2
E1   11       -0.67                   0.39 0.61 1.1
E3   13        0.57                   0.49 0.51 1.6
E5   15        0.52                   0.46 0.54 2.0
C2    7              0.73             0.50 0.50 1.2
C4    9             -0.67             0.52 0.48 1.2
C3    8              0.63             0.36 0.64 1.1
C1    6              0.59             0.38 0.62 1.2
C5   10             -0.59             0.48 0.52 1.4
A2    2                    0.65       0.52 0.48 1.1
A3    3                    0.63       0.59 0.41 1.4
A5    5        0.36        0.51       0.53 0.47 1.9
A1    1                   -0.50       0.24 0.76 1.4
A4    4                    0.42       0.33 0.67 2.2
O3   23                          0.61 0.53 0.47 1.5
O5   25                         -0.60 0.37 0.63 1.1
O1   21                          0.54 0.38 0.62 1.3
O2   22                         -0.50 0.29 0.71 1.5
O4   24                          0.45 0.35 0.65 2.6

                       MR2  MR1  MR3  MR5  MR4
SS loadings           2.94 2.86 2.23 1.98 1.79
Proportion Var        0.12 0.11 0.09 0.08 0.07
Cumulative Var        0.12 0.23 0.32 0.40 0.47
Proportion Explained  0.25 0.24 0.19 0.17 0.15
Cumulative Proportion 0.25 0.49 0.68 0.85 1.00

 With factor correlations of 
      MR2   MR1   MR3   MR5  MR4
MR2  1.00 -0.25 -0.23 -0.02 0.02
MR1 -0.25  1.00  0.40  0.35 0.16
MR3 -0.23  0.40  1.00  0.26 0.22
MR5 -0.02  0.35  0.26  1.00 0.17
MR4  0.02  0.16  0.22  0.17 1.00

Mean item complexity =  1.4
Test of the hypothesis that 5 factors are sufficient.

df null model =  300  with the objective function =  9.29 with Chi Square =  25908.7
df of  the model are 185  and the objective function was  0.93 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.04 

The harmonic n.obs is  2800 with the empirical chi square  1644.02  with prob <  4.5e-232 
The total n.obs was  2800  with Likelihood Chi Square =  2596.4  with prob <  0 

Tucker Lewis Index of factoring reliability =  0.847
RMSEA index =  0.068  and the 90 % confidence intervals are  0.066 0.071
BIC =  1127.99
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                   MR2  MR1  MR3  MR5  MR4
Correlation of (regression) scores with factors   0.94 0.93 0.90 0.89 0.87
Multiple R square of scores with factors          0.88 0.86 0.81 0.79 0.75
Minimum correlation of possible factor scores     0.76 0.72 0.63 0.57 0.50

別の関数

irt.fa(dat, nfactors = 5, plot = TRUE, rotate = "promax")

Item Response Analysis using Factor Analysis  

Call: irt.fa(x = dat, nfactors = 5, plot = TRUE, rotate = "promax")
Item Response Analysis using Factor Analysis  

 Summary information by factor and item
 Factor =  1 
              -3   -2   -1    0    1    2    3
N1          0.20 0.66 1.21 1.56 1.56 1.35 0.93
N2          0.47 0.95 1.29 1.35 1.19 0.93 0.50
N3          0.27 0.63 1.04 1.26 1.18 0.87 0.47
N4          0.22 0.34 0.45 0.51 0.49 0.40 0.28
N5          0.20 0.32 0.45 0.53 0.52 0.43 0.30
Test Info   1.36 2.91 4.45 5.22 4.94 3.97 2.48
SEM         0.86 0.59 0.47 0.44 0.45 0.50 0.63
Reliability 0.27 0.66 0.78 0.81 0.80 0.75 0.60

 Factor =  2 
              -3   -2   -1    0    1    2    3
A5          0.15 0.17 0.18 0.17 0.16 0.14 0.11
E1          0.39 0.64 0.84 0.85 0.67 0.41 0.21
E2          0.46 0.84 1.13 1.18 0.95 0.56 0.25
E3          0.31 0.43 0.50 0.50 0.43 0.33 0.22
E4          0.56 0.86 0.99 0.87 0.62 0.35 0.16
E5          0.30 0.38 0.42 0.40 0.34 0.25 0.17
N4          0.11 0.12 0.13 0.13 0.13 0.12 0.10
O3          0.10 0.11 0.11 0.11 0.11 0.10 0.09
Test Info   2.38 3.55 4.29 4.22 3.40 2.26 1.31
SEM         0.65 0.53 0.48 0.49 0.54 0.67 0.88
Reliability 0.58 0.72 0.77 0.76 0.71 0.56 0.23

 Factor =  3 
              -3   -2   -1    0    1    2     3
C1          0.41 0.53 0.58 0.53 0.42 0.29  0.17
C2          0.65 0.92 1.00 0.87 0.66 0.41  0.19
C3          0.43 0.58 0.66 0.62 0.49 0.34  0.20
C4          0.51 0.70 0.79 0.73 0.55 0.33  0.17
C5          0.29 0.43 0.55 0.59 0.52 0.38  0.24
Test Info   2.29 3.17 3.57 3.34 2.64 1.74  0.97
SEM         0.66 0.56 0.53 0.55 0.62 0.76  1.02
Reliability 0.56 0.68 0.72 0.70 0.62 0.43 -0.03

 Factor =  4 
              -3   -2   -1    0    1    2     3
A1          0.29 0.37 0.40 0.38 0.31 0.23  0.16
A2          0.56 0.71 0.72 0.60 0.43 0.26  0.14
A3          0.48 0.65 0.70 0.62 0.46 0.29  0.16
A4          0.21 0.24 0.26 0.25 0.22 0.18  0.13
A5          0.30 0.37 0.40 0.38 0.31 0.23  0.16
Test Info   1.84 2.33 2.47 2.23 1.74 1.19  0.74
SEM         0.74 0.65 0.64 0.67 0.76 0.92  1.16
Reliability 0.46 0.57 0.60 0.55 0.43 0.16 -0.35

 Factor =  5 
              -3   -2   -1    0    1    2     3
O1          0.36 0.43 0.44 0.40 0.31 0.22  0.14
O2          0.27 0.34 0.39 0.38 0.33 0.25  0.17
O3          0.43 0.57 0.62 0.57 0.45 0.31  0.18
O4          0.26 0.30 0.31 0.29 0.24 0.18  0.13
O5          0.42 0.55 0.61 0.56 0.44 0.29  0.17
Test Info   1.73 2.19 2.36 2.20 1.77 1.25  0.79
SEM         0.76 0.68 0.65 0.67 0.75 0.89  1.12
Reliability 0.42 0.54 0.58 0.55 0.44 0.20 -0.26

Factor analysis with Call: fa(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, 
    fm = fm)

Test of the hypothesis that 5 factors are sufficient.
The degrees of freedom for the model is 185  and the objective function was  0.93 
The number of observations was  2800  with Chi Square =  2596.4  with prob <  0 

The root mean square of the residuals (RMSA) is  0.03 
The df corrected root mean square of the residuals is  0.04 

Tucker Lewis Index of factoring reliability =  0.847
RMSEA index =  0.068  and the 10 % confidence intervals are  0.066 0.071
BIC =  1127.99
 With factor correlations of 
      MR2   MR1   MR3   MR5  MR4
MR2  1.00 -0.25 -0.23 -0.02 0.02
MR1 -0.25  1.00  0.40  0.35 0.16
MR3 -0.23  0.40  1.00  0.26 0.22
MR5 -0.02  0.35  0.26  1.00 0.17
MR4  0.02  0.16  0.22  0.17 1.00

構造方程式モデリング with R

## lavaanパッケージの持つサンプルデータ
dat <- HolzingerSwineford1939
head(dat)
  id sex ageyr agemo  school grade       x1   x2    x3       x4   x5        x6
1  1   1    13     1 Pasteur     7 3.333333 7.75 0.375 2.333333 5.75 1.2857143
2  2   2    13     7 Pasteur     7 5.333333 5.25 2.125 1.666667 3.00 1.2857143
3  3   2    13     1 Pasteur     7 4.500000 5.25 1.875 1.000000 1.75 0.4285714
4  4   1    13     2 Pasteur     7 5.333333 7.75 3.000 2.666667 4.50 2.4285714
5  5   2    12     2 Pasteur     7 4.833333 4.75 0.875 2.666667 4.00 2.5714286
6  6   2    14     1 Pasteur     7 5.333333 5.00 2.250 1.000000 3.00 0.8571429
        x7   x8       x9
1 3.391304 5.75 6.361111
2 3.782609 6.25 7.916667
3 3.260870 3.90 4.416667
4 3.000000 5.30 4.861111
5 3.695652 6.30 5.916667
6 4.347826 6.65 7.500000

SEMの実践

model <- '
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9

textual ~ visual + speed
speed ~ grade
'

result <- sem(model, data = dat)
summary(result, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6-18 ended normally after 30 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        21

                                                  Used       Total
  Number of observations                           300         301

Model Test User Model:
                                                      
  Test statistic                               131.495
  Degrees of freedom                                33
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               979.033
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.895
  Tucker-Lewis Index (TLI)                       0.856

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3718.668
  Loglikelihood unrestricted model (H1)      -3652.920
                                                      
  Akaike (AIC)                                7479.335
  Bayesian (BIC)                              7557.115
  Sample-size adjusted Bayesian (SABIC)       7490.515

Root Mean Square Error of Approximation:

  RMSEA                                          0.100
  90 Percent confidence interval - lower         0.082
  90 Percent confidence interval - upper         0.118
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.968

Standardized Root Mean Square Residual:

  SRMR                                           0.109

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                1.000                               0.899    0.770
    x2                0.573    0.109    5.249    0.000    0.515    0.437
    x3                0.724    0.124    5.846    0.000    0.651    0.576
  textual =~                                                            
    x4                1.000                               0.978    0.849
    x5                1.109    0.067   16.646    0.000    1.085    0.851
    x6                0.924    0.056   16.349    0.000    0.903    0.834
  speed =~                                                              
    x7                1.000                               0.727    0.667
    x8                1.022    0.130    7.837    0.000    0.744    0.737
    x9                0.782    0.108    7.273    0.000    0.569    0.564

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  textual ~                                                             
    visual            0.453    0.094    4.841    0.000    0.416    0.416
    speed             0.226    0.093    2.435    0.015    0.168    0.168
  speed ~                                                               
    grade             0.645    0.105    6.147    0.000    0.887    0.443

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .x1                0.554    0.132    4.187    0.000    0.554    0.407
   .x2                1.121    0.103   10.841    0.000    1.121    0.809
   .x3                0.851    0.097    8.769    0.000    0.851    0.668
   .x4                0.370    0.048    7.706    0.000    0.370    0.279
   .x5                0.448    0.059    7.635    0.000    0.448    0.276
   .x6                0.358    0.043    8.268    0.000    0.358    0.305
   .x7                0.658    0.080    8.178    0.000    0.658    0.554
   .x8                0.466    0.072    6.478    0.000    0.466    0.457
   .x9                0.695    0.069   10.021    0.000    0.695    0.682
    visual            0.807    0.161    5.029    0.000    1.000    1.000
   .textual           0.764    0.096    7.918    0.000    0.798    0.798
   .speed             0.425    0.083    5.130    0.000    0.804    0.804

修正指数とプロット

modificationindices(result) %>%
    arrange(-mi)
       lhs op     rhs     mi    epc sepc.lv sepc.all sepc.nox
1   visual =~      x9 41.862  0.442   0.397    0.394    0.394
2   visual  ~   speed 25.339  0.507   0.411    0.411    0.411
3   visual  ~ textual 25.338  2.244   2.442    2.442    2.442
4  textual =~      x1 16.625  0.490   0.479    0.411    0.411
5   visual ~~   speed 13.578  0.184   0.314    0.314    0.314
6    speed  ~  visual 13.578  0.228   0.282    0.282    0.282
7   visual  ~   grade 12.803  0.445   0.495    0.247    0.495
8    grade  ~  visual 12.803  0.137   0.123    0.247    0.247
9    speed =~      x1 11.107  0.313   0.227    0.195    0.195
10      x1 ~~      x9 11.012  0.169   0.169    0.272    0.272
11      x2 ~~      x3 10.772  0.291   0.291    0.298    0.298
12      x1 ~~      x2 10.762 -0.411  -0.411   -0.521   -0.521
13 textual =~      x9  8.223  0.168   0.165    0.163    0.163
14      x3 ~~      x5  7.949 -0.132  -0.132   -0.214   -0.214
15   grade  ~ textual  7.867  0.103   0.100    0.201    0.201
16      x2 ~~      x7  7.856 -0.163  -0.163   -0.190   -0.190
17  visual =~      x5  7.558 -0.206  -0.186   -0.146   -0.146
18  visual =~      x7  7.521 -0.193  -0.173   -0.159   -0.159
19      x4 ~~      x6  7.503 -0.275  -0.275   -0.754   -0.754
20 textual =~      x3  7.475 -0.248  -0.242   -0.215   -0.215
21      x8 ~~      x9  6.804  0.199   0.199    0.351    0.351
22      x4 ~~      x7  6.043  0.095   0.095    0.192    0.192
23      x3 ~~      x9  5.974  0.126   0.126    0.163    0.163
24      x4 ~~      x8  5.494 -0.082  -0.082   -0.197   -0.197
25   speed =~      x3  3.936  0.185   0.135    0.119    0.119
26      x7 ~~      x9  3.589 -0.139  -0.139   -0.206   -0.206
27      x1 ~~      x4  3.175  0.076   0.076    0.168    0.168
28  visual =~      x6  2.843  0.109   0.098    0.090    0.090
29      x4 ~~      x5  2.675  0.203   0.203    0.499    0.499
30  visual =~      x8  2.321  0.097   0.087    0.086    0.086
31 textual ~~   speed  2.218 -0.130  -0.228   -0.228   -0.228
32 textual  ~   grade  2.217  0.197   0.201    0.101    0.201
33      x5 ~~      x7  2.215 -0.063  -0.063   -0.117   -0.117
34      x1 ~~      x8  2.021  0.067   0.067    0.133    0.133
35      x2 ~~      x9  1.931  0.079   0.079    0.089    0.089
36      x3 ~~      x6  1.729  0.054   0.054    0.097    0.097
37      x1 ~~      x7  1.636 -0.067  -0.067   -0.111   -0.111
38   speed  ~ textual  1.378  0.099   0.133    0.133    0.133
39      x5 ~~      x6  1.343  0.129   0.129    0.323    0.323
40  visual =~      x4  1.257  0.076   0.068    0.059    0.059
41 textual =~      x8  0.985 -0.058  -0.057   -0.056   -0.056
42      x2 ~~      x6  0.731  0.038   0.038    0.060    0.060
43      x6 ~~      x8  0.722  0.028   0.028    0.070    0.070
44      x2 ~~      x4  0.640 -0.037  -0.037   -0.058   -0.058
45      x5 ~~      x9  0.587  0.032   0.032    0.057    0.057
46      x3 ~~      x8  0.494  0.034   0.034    0.053    0.053
47      x4 ~~      x9  0.296 -0.020  -0.020   -0.040   -0.040
48      x1 ~~      x5  0.282 -0.025  -0.025   -0.050   -0.050
49      x2 ~~      x8  0.260  0.027   0.027    0.037    0.037
50      x6 ~~      x7  0.188 -0.016  -0.016   -0.033   -0.033
51 textual =~      x7  0.181 -0.026  -0.026   -0.024   -0.024
52      x3 ~~      x4  0.148 -0.016  -0.016   -0.029   -0.029
53      x7 ~~      x8  0.115 -0.036  -0.036   -0.065   -0.065
54   speed =~      x5  0.076 -0.022  -0.016   -0.012   -0.012
55      x5 ~~      x8  0.062  0.010   0.010    0.021    0.021
56      x1 ~~      x6  0.042  0.008   0.008    0.019    0.019
57   speed =~      x4  0.042  0.015   0.011    0.009    0.009
58      x3 ~~      x7  0.037 -0.010  -0.010   -0.014   -0.014
59   speed =~      x2  0.031 -0.018  -0.013   -0.011   -0.011
60 textual =~      x2  0.014 -0.010  -0.010   -0.008   -0.008
61      x1 ~~      x3  0.007 -0.016  -0.016   -0.023   -0.023
62      x2 ~~      x5  0.007 -0.004  -0.004   -0.006   -0.006
63   speed =~      x6  0.006  0.005   0.004    0.003    0.003
64      x6 ~~      x9  0.005  0.002   0.002    0.005    0.005
semPlot::semPaths(result)