You are here

mxCI() not providing the confidence intervals. Why?

3 posts / 0 new
Last post
Andre Achim's picture
Offline
Joined: 02/10/2021 - 16:56
mxCI() not providing the confidence intervals. Why?

mxCI() not providing the confidence intervals
I implemented the PARAFAC (exploratory Parallel Factor Analysis) model on a relatively simple example of two factors that each affect all six variables and that have non-parallel profiles of (factor) variances across a pair of conditions. My code (provided below) works well, except it does not produce the required confidence intervals. I think ML derived CI’s most useful to spot models that happen to be unidentified, which would be the case in PARAFAC if the factor variance profiles happened to actually be proportional across conditions. My question is: What am I missing about mxCI()?

OpenMx version: 2.18.1 [GIT v2.18.1]
R version: R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32
Default optimizer: SLSQP
NPSOL-enabled?: No
OpenMP-enabled?: No

In the code in the attached file, the mxModel objects P2 and P2r (before and after running) include the expected $intervals specifications but P2r does not seem to carry the intervals. Certainly, summary(P2r) does not report these.
The code defines two functions, one that creates the covariance matrices, here for two independent conditions, and one that implements PARAFAC (here for orthogonal factors, since correlated factors require at least three conditions for model identification). It then creates the data (object P) where one factor has variance of 2.08 and 3.08 in the two conditions while the other factor has variance 1.74 in each condition. The factor variances of 2.08 and 1.74 in condition 1 are those that produce the data correlation matrix, since the approach I am implementing scales the data in each condition by the means and standard deviations of the variables obtained in condition 1. The code below then gets the model (P2) and runs it to obtain the output P2r. Most comments and some variable names (e.g. 'titre' for 'title') are in French, but that should not impede comprehension. The following fails to provide the CI's.

vF1 <- c(2.08, 3.08)
vF2 <- c(1.74,1.74)
P <- fct2(vF1,vF2)
P2<-PARFCT(P,"PARAFAC_Example")
P2r <- mxRun(P2)
summary(P2r)

Summary of PARAFAC_Example , gr 1 a 2
free parameters:
name matrix row col Estimate
1 F11 PARAFAC_Example_1.A 1 1 0.69929937
2 F12 PARAFAC_Example_1.A 2 1 0.69929956
3 F13 PARAFAC_Example_1.A 3 1 0.69929983
4 F14 PARAFAC_Example_1.A 4 1 0.29970072
5 F15 PARAFAC_Example_1.A 5 1 0.29970046
6 F16 PARAFAC_Example_1.A 6 1 0.29970062
7 F21 PARAFAC_Example_1.A 1 2 0.09989919
8 F22 PARAFAC_Example_1.A 2 2 0.19979935
9 F23 PARAFAC_Example_1.A 3 2 0.29969900
10 F24 PARAFAC_Example_1.A 4 2 0.69929902
11 F25 PARAFAC_Example_1.A 5 2 0.79919932
12 F26 PARAFAC_Example_1.A 6 2 0.89909918
13 E1 PARAFAC_Example_1.U 1 1 0.49900034
14 E2 PARAFAC_Example_1.U 2 2 0.46906060
15 E3 PARAFAC_Example_1.U 3 3 0.41915974
16 E4 PARAFAC_Example_1.U 4 4 0.41916014
17 E5 PARAFAC_Example_1.U 5 5 0.26945998
18 E6 PARAFAC_Example_1.U 6 6 0.09979993
19 PARAFAC_Example_2.V[1,1] PARAFAC_Example_2.V 1 1 1.00000038
20 PARAFAC_Example_2.V[2,2] PARAFAC_Example_2.V 2 2 1.21686861
Std.Error A lbound ubound
1 0.04480739 0
2 0.05726203
3 0.07450717
4 0.15843717
5 0.18011823
6 0.20200567
7 0.13104163 0
8 0.13155408
9 0.13209237
10 0.06641628
11 0.06730594
12 0.06872903
13 0.03592151
14 0.03275167
15 0.02931945
16 0.02161594
17 0.01861318
18 0.01892141
19 0.06244518 0
20 0.06150312 0

Model Statistics:
| Parameters | Degrees of Freedom | Fit (-2lnL units)
Model: 20 16 3235.938
Saturated: NA NA NA
Independence: NA NA NA
Number of observations/statistics: 1000/36

Information Criteria:
| df Penalty | Parameters Penalty | Sample-Size Adjusted
AIC: NA NA NA
BIC: NA NA NA
CFI: NA
TLI: 1 (also known as NNFI)
RMSEA: 0 [95% CI (NA, NA)]
Prob(RMSEA <= 0.05): NA
To get additional fit indices, see help(mxRefModels)
timestamp: 2021-06-03 22:10:37
Wall clock time: 0.1176848 secs
optimizer: SLSQP
OpenMx version number: 2.18.1
Need help? See help(mxSummary)

AdminRobK's picture
Offline
Joined: 01/24/2014 - 12:15
intervals=TRUE

You need to pass argument intervals=TRUE to mxRun().

Andre Achim's picture
Offline
Joined: 02/10/2021 - 16:56
mxCI() not providing the confidence intervals. Why?

How simple! Thank you.
In the OpenMx manual, I searched occurrences of mxCI but failed to note the information on mxRun. Adding the info in the section describing mxCI might help other newcomers to OpenMx.
Now that it works, I get the intervals only for a few parameters, including the two for which a lower bound was set, but I get NA, with "active box constraint" for most other parameters (for which the bounded parameters are optimised). Forcing positive one factor loading for each factor is meant to prevent multiple solutions differing only by factor polarity. Also, I apply a constraint on the first loading of the first factor being larger than that of the other factor on the same variable to prevent solutions differing only by factor swapping.
I might have to accept multiple solutions that differ only trivially by factor polarity or by factor order, but this may yield huge CI occasionally. I will be looking for another solution. Any suggestion would be welcome.