Attachment | Size |
---|---|

commands used to illustrate mxCI() nor producing the intervals | 2.95 KB |

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)

You need to pass argument

`intervals=TRUE`

to`mxRun()`

.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.