These are data from a clinical interview of personality pathology in a large mixed group of participants assessed in Pittsburgh (PI: Paul Pilkonis). We have 0/1/2 (absent, subthreshold, present) for diagnostic criteria of 10 DSM-IV personality disorders.

load("pdsymptoms_for_sem.RData")
psych::describe(allPD)
vars n mean sd median trimmed mad min max range skew kurtosis se
PTNUM 1 445 4616.052 2363.311 5082 4707.655 2987.4 1004 9011 8007 -0.297 -1.389 112.032
Par_1 2 445 0.151 0.411 0 0.039 0.0 0 2 2 2.777 7.341 0.019
Par_2 3 445 0.231 0.518 0 0.109 0.0 0 2 2 2.178 3.822 0.025
Par_3 4 445 0.178 0.458 0 0.059 0.0 0 2 2 2.603 6.130 0.022
Par_4 5 445 0.256 0.559 0 0.120 0.0 0 2 2 2.081 3.199 0.027
Par_5 6 445 0.294 0.590 0 0.157 0.0 0 2 2 1.854 2.239 0.028
Par_6 7 445 0.171 0.472 0 0.039 0.0 0 2 2 2.796 6.974 0.022
Par_7 8 445 0.052 0.268 0 0.000 0.0 0 2 2 5.625 33.143 0.013
Schizoid_1 9 445 0.029 0.181 0 0.000 0.0 0 2 2 6.660 48.514 0.009
Schizoid_2 10 445 0.130 0.426 0 0.000 0.0 0 2 2 3.368 10.653 0.020
Schizoid_3 11 445 0.117 0.402 0 0.000 0.0 0 2 2 3.587 12.361 0.019
Schizoid_4 12 445 0.025 0.169 0 0.000 0.0 0 2 2 7.431 60.895 0.008
Schizoid_5 13 445 0.198 0.546 0 0.036 0.0 0 2 2 2.642 5.527 0.026
Schizoid_6 14 445 0.013 0.115 0 0.000 0.0 0 1 1 8.408 68.856 0.005
Schizoid_7 15 445 0.045 0.228 0 0.000 0.0 0 2 2 5.462 32.307 0.011
Schizotypal_1 16 445 0.027 0.162 0 0.000 0.0 0 1 1 5.821 31.953 0.008
Schizotypal_2 17 445 0.065 0.273 0 0.000 0.0 0 2 2 4.459 21.091 0.013
Schizotypal_3 18 445 0.054 0.245 0 0.000 0.0 0 2 2 4.815 24.773 0.012
Schizotypal_4 19 445 0.029 0.205 0 0.000 0.0 0 2 2 7.682 62.769 0.010
Schizotypal_5 20 445 0.025 0.155 0 0.000 0.0 0 1 1 6.101 35.307 0.007
Schizotypal_6 21 445 0.022 0.188 0 0.000 0.0 0 2 2 9.037 85.172 0.009
Schizotypal_7 22 445 0.031 0.210 0 0.000 0.0 0 2 2 7.325 57.318 0.010
Schizotypal_8 23 445 0.036 0.239 0 0.000 0.0 0 2 2 7.091 51.540 0.011
Schizotypal_9 24 445 0.013 0.134 0 0.000 0.0 0 2 2 11.018 133.771 0.006
Histrionic_1 25 445 0.178 0.477 0 0.048 0.0 0 2 2 2.709 6.499 0.023
Histrionic_2 26 445 0.193 0.487 0 0.067 0.0 0 2 2 2.521 5.517 0.023
Histrionic_3 27 445 0.292 0.608 0 0.140 0.0 0 2 2 1.913 2.325 0.029
Histrionic_4 28 445 0.164 0.453 0 0.039 0.0 0 2 2 2.814 7.250 0.021
Histrionic_5 29 445 0.124 0.392 0 0.003 0.0 0 2 2 3.317 10.782 0.019
Histrionic_6 30 445 0.261 0.577 0 0.115 0.0 0 2 2 2.090 3.118 0.027
Histrionic_7 31 445 0.157 0.463 0 0.022 0.0 0 2 2 2.985 8.043 0.022
Histrionic_8 32 445 0.155 0.431 0 0.036 0.0 0 2 2 2.846 7.608 0.020
Narcissistic_1 33 445 0.207 0.518 0 0.070 0.0 0 2 2 2.467 5.035 0.025
Narcissistic_2 34 445 0.218 0.528 0 0.081 0.0 0 2 2 2.370 4.543 0.025
Narcissistic_3 35 445 0.166 0.469 0 0.034 0.0 0 2 2 2.857 7.312 0.022
Narcissistic_4 36 445 0.238 0.551 0 0.098 0.0 0 2 2 2.227 3.802 0.026
Narcissistic_5 37 445 0.375 0.668 0 0.221 0.0 0 2 2 1.522 0.886 0.032
Narcissistic_6 38 445 0.227 0.537 0 0.090 0.0 0 2 2 2.300 4.191 0.025
Narcissistic_7 39 445 0.348 0.639 0 0.199 0.0 0 2 2 1.615 1.274 0.030
Narcissistic_8 40 445 0.290 0.603 0 0.140 0.0 0 2 2 1.920 2.374 0.029
Narcissistic_9 41 445 0.283 0.590 0 0.140 0.0 0 2 2 1.939 2.518 0.028
Antisocial_1 42 445 0.285 0.631 0 0.112 0.0 0 2 2 1.998 2.455 0.030
Antisocial_2 43 445 0.110 0.402 0 0.000 0.0 0 2 2 3.773 13.574 0.019
Antisocial_3 44 445 0.065 0.281 0 0.000 0.0 0 2 2 4.650 22.912 0.013
Antisocial_4 45 445 0.130 0.431 0 0.000 0.0 0 2 2 3.392 10.721 0.020
Antisocial_5 46 445 0.184 0.513 0 0.036 0.0 0 2 2 2.738 6.284 0.024
Antisocial_6 47 445 0.274 0.627 0 0.098 0.0 0 2 2 2.072 2.722 0.030
Antisocial_7 48 445 0.213 0.534 0 0.070 0.0 0 2 2 2.439 4.782 0.025
Borderline_1 49 445 0.258 0.572 0 0.115 0.0 0 2 2 2.097 3.175 0.027
Borderline_2 50 445 0.443 0.697 0 0.305 0.0 0 2 2 1.259 0.159 0.033
Borderline_3 51 445 0.400 0.692 0 0.252 0.0 0 2 2 1.437 0.569 0.033
Borderline_4 52 445 0.526 0.770 0 0.409 0.0 0 2 2 1.038 -0.533 0.036
Borderline_5 53 445 0.270 0.607 0 0.106 0.0 0 2 2 2.078 2.874 0.029
Borderline_6 54 445 0.528 0.781 0 0.412 0.0 0 2 2 1.039 -0.575 0.037
Borderline_7 55 445 0.553 0.791 0 0.443 0.0 0 2 2 0.970 -0.719 0.038
Borderline_8 56 445 0.488 0.746 0 0.361 0.0 0 2 2 1.146 -0.259 0.035
Borderline_9 57 445 0.160 0.469 0 0.022 0.0 0 2 2 2.972 7.900 0.022
Avoidant_1 58 445 0.281 0.581 0 0.143 0.0 0 2 2 1.934 2.552 0.028
Avoidant_2 59 445 0.263 0.601 0 0.101 0.0 0 2 2 2.120 3.061 0.028
Avoidant_3 60 445 0.288 0.591 0 0.146 0.0 0 2 2 1.909 2.408 0.028
Avoidant_4 61 445 0.467 0.752 0 0.336 0.0 0 2 2 1.222 -0.138 0.036
Avoidant_5 62 445 0.429 0.709 0 0.289 0.0 0 2 2 1.330 0.258 0.034
Avoidant_6 63 445 0.535 0.760 0 0.420 0.0 0 2 2 1.002 -0.556 0.036
Avoidant_7 64 445 0.299 0.642 0 0.126 0.0 0 2 2 1.922 2.146 0.030
Dependent_1 65 445 0.146 0.434 0 0.020 0.0 0 2 2 3.059 8.768 0.021
Dependent_2 66 445 0.337 0.660 0 0.174 0.0 0 2 2 1.714 1.435 0.031
Dependent_3 67 445 0.213 0.486 0 0.101 0.0 0 2 2 2.229 4.208 0.023
Dependent_4 68 445 0.117 0.379 0 0.000 0.0 0 2 2 3.409 11.521 0.018
Dependent_5 69 445 0.144 0.432 0 0.017 0.0 0 2 2 3.096 9.001 0.020
Dependent_6 70 445 0.231 0.527 0 0.104 0.0 0 2 2 2.214 3.917 0.025
Dependent_7 71 445 0.384 0.693 0 0.232 0.0 0 2 2 1.511 0.742 0.033
Dependent_8 72 445 0.276 0.591 0 0.129 0.0 0 2 2 1.994 2.696 0.028
OC_1 73 445 0.292 0.597 0 0.148 0.0 0 2 2 1.888 2.311 0.028
OC_2 74 445 0.213 0.486 0 0.101 0.0 0 2 2 2.229 4.208 0.023
OC_3 75 445 0.326 0.622 0 0.179 0.0 0 2 2 1.716 1.642 0.029
OC_4 76 445 0.160 0.424 0 0.048 0.0 0 2 2 2.692 6.801 0.020
OC_5 77 445 0.227 0.545 0 0.084 0.0 0 2 2 2.325 4.227 0.026
OC_6 78 445 0.339 0.633 0 0.190 0.0 0 2 2 1.656 1.415 0.030
OC_7 79 445 0.054 0.245 0 0.000 0.0 0 2 2 4.815 24.773 0.012
OC_8 80 445 0.636 0.821 0 0.546 0.0 0 2 2 0.756 -1.101 0.039
GAS_Sx 81 267 57.408 11.531 55 55.916 10.4 40 99 59 1.144 0.848 0.706
GAS_Work 82 267 56.292 13.278 51 54.591 8.9 41 99 58 1.008 -0.057 0.813
GAS_Soc 83 267 57.438 10.998 55 56.270 8.9 41 99 58 1.007 0.617 0.673
SEV 84 418 61.900 13.789 65 63.393 13.3 10 85 75 -0.923 0.319 0.674
CON_PD* 85 418 1.646 0.479 2 1.682 0.0 1 2 1 -0.608 -1.634 0.023
totPD 86 445 17.616 11.699 16 16.669 11.9 0 55 55 0.684 -0.105 0.555
con_pd_num 87 418 0.646 0.479 1 0.682 0.0 0 1 1 -0.608 -1.634 0.023
bpd_only_syntax <- '
bpd =~ Borderline_6 + Borderline_1 + Borderline_2 + Borderline_3 + Borderline_4 + Borderline_5 + 
  Borderline_7 + Borderline_8 + Borderline_9
'

bpd_model <- sem(bpd_only_syntax, estimator="MLR", allPD)
summary(bpd_model, fit.measures=TRUE, standardized=TRUE)
## lavaan 0.6-3 ended normally after 26 iterations
## 
##   Optimization method                           NLMINB
##   Number of free parameters                         18
## 
##   Number of observations                           445
## 
##   Estimator                                         ML      Robust
##   Model Fit Test Statistic                     179.349     109.106
##   Degrees of freedom                                27          27
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  1.644
##     for the Yuan-Bentler correction (Mplus variant)
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic             1328.671     787.319
##   Degrees of freedom                                36          36
##   P-value                                        0.000       0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.882       0.891
##   Tucker-Lewis Index (TLI)                       0.843       0.854
## 
##   Robust Comparative Fit Index (CFI)                         0.894
##   Robust Tucker-Lewis Index (TLI)                            0.858
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -3510.958   -3510.958
##   Scaling correction factor                                  1.764
##     for the MLR correction
##   Loglikelihood unrestricted model (H1)      -3421.283   -3421.283
##   Scaling correction factor                                  1.692
##     for the MLR correction
## 
##   Number of free parameters                         18          18
##   Akaike (AIC)                                7057.916    7057.916
##   Bayesian (BIC)                              7131.681    7131.681
##   Sample-size adjusted Bayesian (BIC)         7074.557    7074.557
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.113       0.083
##   90 Percent Confidence Interval          0.097  0.129       0.070  0.095
##   P-value RMSEA <= 0.05                          0.000       0.000
## 
##   Robust RMSEA                                               0.106
##   90 Percent Confidence Interval                             0.086  0.127
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.062       0.062
## 
## Parameter Estimates:
## 
##   Information                                 Observed
##   Observed information based on                Hessian
##   Standard Errors                   Robust.huber.white
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   bpd =~                                                                
##     Borderline_6      1.000                               0.569    0.729
##     Borderline_1      0.445    0.080    5.566    0.000    0.253    0.443
##     Borderline_2      0.850    0.076   11.139    0.000    0.483    0.694
##     Borderline_3      0.710    0.089    7.970    0.000    0.404    0.584
##     Borderline_4      0.947    0.083   11.388    0.000    0.539    0.701
##     Borderline_5      0.721    0.076    9.513    0.000    0.410    0.677
##     Borderline_7      0.881    0.078   11.344    0.000    0.501    0.634
##     Borderline_8      0.777    0.075   10.426    0.000    0.442    0.593
##     Borderline_9      0.395    0.056    7.096    0.000    0.225    0.480
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .Borderline_6      0.285    0.032    8.806    0.000    0.285    0.468
##    .Borderline_1      0.262    0.026    9.983    0.000    0.262    0.804
##    .Borderline_2      0.251    0.025    9.935    0.000    0.251    0.518
##    .Borderline_3      0.315    0.030   10.628    0.000    0.315    0.659
##    .Borderline_4      0.301    0.032    9.322    0.000    0.301    0.509
##    .Borderline_5      0.199    0.024    8.322    0.000    0.199    0.542
##    .Borderline_7      0.374    0.035   10.719    0.000    0.374    0.598
##    .Borderline_8      0.360    0.032   11.195    0.000    0.360    0.648
##    .Borderline_9      0.169    0.024    7.158    0.000    0.169    0.770
##     bpd               0.324    0.040    8.112    0.000    1.000    1.000
semPaths_default(bpd_model)

modificationindices(bpd_model, minimum.value = 5)
lhs op rhs mi epc sepc.lv sepc.all sepc.nox
20 Borderline_6 ~~ Borderline_1 8.70 -0.044 -0.044 -0.161 -0.161
26 Borderline_6 ~~ Borderline_8 15.97 0.073 0.073 0.228 0.228
29 Borderline_1 ~~ Borderline_3 56.57 0.110 0.110 0.383 0.383
34 Borderline_1 ~~ Borderline_9 21.58 -0.049 -0.049 -0.231 -0.231
38 Borderline_2 ~~ Borderline_7 8.44 -0.050 -0.050 -0.164 -0.164
44 Borderline_3 ~~ Borderline_8 35.88 -0.106 -0.106 -0.316 -0.316
49 Borderline_4 ~~ Borderline_9 5.93 -0.030 -0.030 -0.131 -0.131
52 Borderline_5 ~~ Borderline_9 13.72 0.036 0.036 0.197 0.197
bpd_mod_syntax <- '
bpd =~ Borderline_6 + Borderline_1 + Borderline_2 + Borderline_3 + Borderline_4 + Borderline_5 + Borderline_7 + Borderline_8 + Borderline_9

Borderline_1 ~~ Borderline_3
'

bpd_model_mod <- sem(bpd_mod_syntax, estimator="MLR", allPD)
resid(bpd_model_mod, "cor")
## $type
## [1] "cor.bollen"
## 
## $cov
##              Brdr_6 Brdr_1 Brdr_2 Brdr_3 Brdr_4 Brdr_5 Brdr_7 Brdr_8
## Borderline_6  0.000                                                 
## Borderline_1 -0.047  0.000                                          
## Borderline_2 -0.023  0.058  0.000                                   
## Borderline_3 -0.031  0.000  0.071  0.000                            
## Borderline_4  0.003  0.073 -0.018  0.064  0.000                     
## Borderline_5 -0.034  0.014  0.046 -0.023 -0.026  0.000              
## Borderline_7  0.022  0.022 -0.063  0.020  0.004  0.012  0.000       
## Borderline_8  0.072 -0.047  0.032 -0.156  0.029 -0.031 -0.014  0.000
## Borderline_9  0.016 -0.148 -0.038  0.045 -0.068  0.093  0.034 -0.036
##              Brdr_9
## Borderline_6       
## Borderline_1       
## Borderline_2       
## Borderline_3       
## Borderline_4       
## Borderline_5       
## Borderline_7       
## Borderline_8       
## Borderline_9  0.000

The maximum-likelihood approach assumes that indicators are normally distributed. But here, we have trichotmous data, which are unlikely to satisfy this assumption. The typical approach would be to estimate the model with an explicit categorical threshold structure that captures the distance between adjacent ordinal indicators.

bpd_model_cat <- sem(bpd_only_syntax, estimator="WLSMV", allPD, ordered = paste0("Borderline_", 1:9))
summary(bpd_model_cat, fit.measures=TRUE)
## lavaan 0.6-3 ended normally after 21 iterations
## 
##   Optimization method                           NLMINB
##   Number of free parameters                         27
## 
##   Number of observations                           445
## 
##   Estimator                                       DWLS      Robust
##   Model Fit Test Statistic                      72.056     108.554
##   Degrees of freedom                                27          27
##   P-value (Chi-square)                           0.000       0.000
##   Scaling correction factor                                  0.691
##   Shift parameter                                            4.238
##     for simple second-order correction (Mplus variant)
## 
## Model test baseline model:
## 
##   Minimum Function Test Statistic             3882.434    2611.156
##   Degrees of freedom                                36          36
##   P-value                                        0.000       0.000
## 
## User model versus baseline model:
## 
##   Comparative Fit Index (CFI)                    0.988       0.968
##   Tucker-Lewis Index (TLI)                       0.984       0.958
## 
##   Robust Comparative Fit Index (CFI)                            NA
##   Robust Tucker-Lewis Index (TLI)                               NA
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.061       0.082
##   90 Percent Confidence Interval          0.044  0.079       0.067  0.099
##   P-value RMSEA <= 0.05                          0.129       0.001
## 
##   Robust RMSEA                                                  NA
##   90 Percent Confidence Interval                                NA     NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.085       0.085
## 
## Parameter Estimates:
## 
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
##   Standard Errors                           Robust.sem
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   bpd =~                                              
##     Borderline_6      1.000                           
##     Borderline_1      0.745    0.068   11.013    0.000
##     Borderline_2      0.936    0.051   18.323    0.000
##     Borderline_3      0.886    0.058   15.255    0.000
##     Borderline_4      0.950    0.055   17.325    0.000
##     Borderline_5      1.006    0.056   17.873    0.000
##     Borderline_7      0.883    0.058   15.295    0.000
##     Borderline_8      0.829    0.058   14.172    0.000
##     Borderline_9      0.840    0.059   14.349    0.000
## 
## Intercepts:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .Borderline_6      0.000                           
##    .Borderline_1      0.000                           
##    .Borderline_2      0.000                           
##    .Borderline_3      0.000                           
##    .Borderline_4      0.000                           
##    .Borderline_5      0.000                           
##    .Borderline_7      0.000                           
##    .Borderline_8      0.000                           
##    .Borderline_9      0.000                           
##     bpd               0.000                           
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     Borderlin_6|t1    0.390    0.061    6.376    0.000
##     Borderlin_6|t2    0.916    0.070   13.182    0.000
##     Borderlin_1|t1    0.874    0.069   12.757    0.000
##     Borderlin_1|t2    1.495    0.091   16.390    0.000
##     Borderlin_2|t1    0.458    0.062    7.406    0.000
##     Borderlin_2|t2    1.179    0.077   15.268    0.000
##     Borderlin_3|t1    0.580    0.063    9.171    0.000
##     Borderlin_3|t2    1.179    0.077   15.268    0.000
##     Borderlin_4|t1    0.372    0.061    6.094    0.000
##     Borderlin_4|t2    0.951    0.070   13.516    0.000
##     Borderlin_5|t1    0.899    0.069   13.013    0.000
##     Borderlin_5|t2    1.370    0.085   16.126    0.000
##     Borderlin_7|t1    0.348    0.061    5.718    0.000
##     Borderlin_7|t2    0.882    0.069   12.843    0.000
##     Borderlin_8|t1    0.427    0.061    6.938    0.000
##     Borderlin_8|t2    1.024    0.072   14.162    0.000
##     Borderlin_9|t1    1.191    0.078   15.335    0.000
##     Borderlin_9|t2    1.720    0.106   16.289    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .Borderline_6      0.301                           
##    .Borderline_1      0.612                           
##    .Borderline_2      0.387                           
##    .Borderline_3      0.451                           
##    .Borderline_4      0.369                           
##    .Borderline_5      0.292                           
##    .Borderline_7      0.454                           
##    .Borderline_8      0.519                           
##    .Borderline_9      0.507                           
##     bpd               0.699    0.053   13.154    0.000
## 
## Scales y*:
##                    Estimate  Std.Err  z-value  P(>|z|)
##     Borderline_6      1.000                           
##     Borderline_1      1.000                           
##     Borderline_2      1.000                           
##     Borderline_3      1.000                           
##     Borderline_4      1.000                           
##     Borderline_5      1.000                           
##     Borderline_7      1.000                           
##     Borderline_8      1.000                           
##     Borderline_9      1.000

We still see some evidence of misfit.

modificationIndices(bpd_model_cat, minimum.value = 5)
lhs op rhs mi epc sepc.lv sepc.all sepc.nox
66 Borderline_1 ~~ Borderline_3 34.53 0.338 0.338 0.644 0.644
70 Borderline_1 ~~ Borderline_8 5.07 -0.177 -0.177 -0.313 -0.313
71 Borderline_1 ~~ Borderline_9 10.22 -0.351 -0.351 -0.631 -0.631
81 Borderline_3 ~~ Borderline_8 13.50 -0.280 -0.280 -0.579 -0.579

The model suggests freeing conditional independence for some items. Here are the diagnostic criteria from DSM-IV

  1. frantic efforts to avoid real or imagined abandonment.

  2. a pattern of unstable and intense interpersonal relationships characterised by alternating between extremes of idealization and devaluation.

  3. identity disturbance: markedly and persistently unstable self-image or sense of self.

  4. impulsivity in at least two areas that are potentially self-damaging (e.g. spending, sex, substance abuse, reckless driving, binge eating). This does not include suicidal or self-harming behaviour.

  5. recurrent suicidal behaviour, gestures, or threats, or self-mutilating behaviour.

  6. affective instability due to a marked reactivity of mood - intense feelings that can last from a few hours to a few days.

  7. chronic feelings of emptiness.

  8. inappropriate intense anger or difficulty controlling anger.

  9. transient, stress-related paranoid ideas or severe dissociative symptoms.