Compute reliability under target rota... PreviousNext
Mplus Discussion > Structural Equation Modeling >
Message/Author
 Gabriella Fu posted on Wednesday, November 07, 2018 - 1:12 am
Dear sir,

I was trying to use Mplus to calculate the composite reliability. The model was analyzed using ESEM and target rotation(oblique). I was wondering how to tell the software the parameters such as loadings. Should i use the following command?

f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10 x1-x5~0(*t);
f1 by x1-x10*(la1-la10);
f2 by x1-x10*(lb1-lb10);

Thank you so much!
 Gabriella Fu posted on Wednesday, November 07, 2018 - 6:14 am
Also, could I calculate the composite reliability under bi-factor ESEM structure? Thank you so much.
 Tihomir Asparouhov posted on Wednesday, November 07, 2018 - 6:23 pm
yes on both
 Gabriella Fu posted on Thursday, November 08, 2018 - 12:01 am
Thank you for your quick reply.

But when I use the above command to build a model, the software told me "
STANDARD ERRORS COULD NOT BE COMPUTED.
PROBLEM OCCURRED IN EXPLORATORY FACTOR ANALYSIS WITH 2 FACTOR(S).
PROBLEM OCCURRED IN THE COMPUTATION OF THE STANDARD ERRORS OF THE ROTATED SOLUTION."

This did not occur when I just use
f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10 x1-x5~0(*t);

How should I fix the problem? Thank you so much.
 Tihomir Asparouhov posted on Thursday, November 08, 2018 - 8:54 am
Use this
f1 by x1-x10*(la1-la10);
f2 by x1-x10*(lb1-lb10);
f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10 x1-x5~0(*t);
so the targets come in second and are not overwritten by the label statement.
 Gabriella Fu posted on Thursday, November 08, 2018 - 6:37 pm
Thank you for your reply. But it seems the above command could not run the model properly as following error occured:

*** ERROR in MODEL CONSTRAINT command
The following parameter label is ambiguous. Check that the corresponding
parameter has not been changed. Parameter label: LA1

is it because the label is given while analyzing the model, and the targets might cause confusion?
 Tihomir Asparouhov posted on Friday, November 09, 2018 - 10:07 am
I run your model using User's Guide data ex4.1b.dat in Mplus 8.2 and it doesn't produce this error message. Please provide full input or send your example to support@statmodel.com
 Jacob Marszalek posted on Sunday, February 09, 2020 - 12:14 pm
Hi Tihomir,

I encountered the same exact problem as Gabriella above. Like you, I was able to run the model just fine with the ex4.1b data, but when I added in the following MODEL CONSTRAINT lines, I received the same error message. Were you able to identify the issue?

DATA: File = ex4.1b.txt;
VARIABLE: Names are x1-x10;
ANALYSIS: ESTIMATOR = ML;
ROTATION = target(oblique);
MODEL:
f1 by x1-x10*(la1-la10);
f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10*(lb1-lb10);
f2 by x1-x10 x1-x5~0(*t);
x1-x10 (r1-r10);

MODEL CONSTRAINT:
NEW(load_f1 error_f1 omega_f1
load_f2 error_f2 omega_f2);

load_f1 = (la1+la2+la3+la4+la5+lb1+lb2+lb3+lb4+lb5)^2;
error_f1 = r1+r2+r3+r4+r5;
omega_f1 = load_f1/(load_f1 + error_f1);

load_f2 = (la6+la7+la8+la9+la10+lb6+lb7+lb8+lb9+lb10)^2;
error_f2 = r6+r7+r8+r9+r10;
omega_f2 = load_f2/(load_f2 + error_f2);

OUTPUT: sampstat standardized residual CINTERVAL(BCBOOTSTRAP);
 Jacob Marszalek posted on Monday, February 10, 2020 - 8:53 am
Hi Tihomir,

I encountered the same problem as Gabriella and was wondering if you found a solution. Like you, I ran her code with the example 4.1b data without any problems, but when I added a MODEL CONSTRAINT command to compute omega, I received the same error message as she did.

Any insight would be greatly appreciated!

My syntax is below:

DATA: File = ex4.1b.txt;
VARIABLE: Names are x1-x10;
MISSING ARE ALL (-99);
ANALYSIS: ESTIMATOR = ML;
ROTATION = target(oblique);

MODEL:
f1 by x1-x10*(la1-la10);
f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10*(lb1-lb10);
f2 by x1-x10 x1-x5~0(*t);
x1-x10 (r1-r10);

MODEL CONSTRAINT:
NEW(load_f1 error_f1 omega_f1
load_f2 error_f2 omega_f2);

load_f1 = (la1+la2+la3+la4+la5+lb1+lb2+lb3+lb4+lb5)^2;
error_f1 = r1+r2+r3+r4+r5;
omega_f1 = load_f1/(load_f1 + error_f1);

load_f2 = (la6+la7+la8+la9+la10+lb6+lb7+lb8+lb9+lb10)^2;
error_f2 = r6+r7+r8+r9+r10;
omega_f2 = load_f2/(load_f2 + error_f2);

OUTPUT: sampstat standardized residual;
 Jacob Marszalek posted on Monday, February 10, 2020 - 8:55 am
Sorry about the double posting! I didn't see my original post when I first looked this morning.
 Tihomir Asparouhov posted on Tuesday, February 11, 2020 - 9:16 am
The parameter label statements must come after the ESEM declaration:

f1 by x1-x10 x6-x10~0(*t);
f2 by x1-x10 x1-x5~0(*t);
f1 by x1-x10*(la1-la10);
f2 by x1-x10*(lb1-lb10);
 Jacob Marszalek posted on Wednesday, February 12, 2020 - 12:26 pm
Thank you, Tihomir. I reordered the command lines as recommended, but now get the messages below. Any insight would be greatly appreciated!

*** WARNING in MODEL command
Fewer than 2 loadings have been given target values in EFA set *t.
The model may not be identified.
1 WARNING(S) FOUND IN THE INPUT INSTRUCTIONS



Example of a 2 factor ESEM ML Omega - Target Rotation

*** FATAL ERROR
Internal Error Code: PR1002. Error in the constraints model.
An internal error has occurred. Please contact us about the error,
providing both the input and data files if possible.
 Tihomir Asparouhov posted on Wednesday, February 12, 2020 - 1:32 pm
I don't see anything obvious. I would suggest to upgrade to the latest Mplus version and if that doesn't fix the problem send it to support@statmodel.com
 Tihomir Asparouhov posted on Wednesday, February 12, 2020 - 2:04 pm
Actually never mind. This works only with other types of rotations. It currently doesn't work with the target rotation.
 Jacob Marszalek posted on Sunday, February 16, 2020 - 12:46 pm
Oh! Thank you! That helps tremendously.

Over on SEMNET, Andrew Johnson of Curtin University suggested an alternative approach using the EFA-within-CFA framework described in the Mplus Topic 1 handout. I used it and obtained somewhat different factor loading estimates, but the same model fit. I think this is acceptable for use of computing point and interval estimates for omega via Mplus.

Thanks again!
 Tihomir Asparouhov posted on Tuesday, February 18, 2020 - 10:16 am
Yes, this sounds like a reasonable solution. If you have done it all correctly and you specified the minimum number of fixed loadings then all the loadings should be identical (apart from round off error). To be honest ... getting the correct standard errors with this approach is a bit off since you essentially have zero standard errors for the loadings that are fixed.

We will eventually fix this but here are a couple of other ideas

1. Change the rotation - maybe you can find a rotation that yields similar outcome to the target rotation.

2. You could get the target rotation with BSEM where the targets have tiny prior

3. With a small amount of programming you can obtain the exact values using tech3. You would be performing the delta method manually and that would be what Mplus would have done if we didn't have the "issue".
 Andrew Johnson posted on Wednesday, February 19, 2020 - 4:19 pm
I hadn't thought about the standard errors, that's a good point. If it's just the standard errors (any by extension the confidence intervals for the omega) that are unreliable, would a workaround be to just used bootstrapped confidence intervals?
 Tihomir Asparouhov posted on Thursday, February 20, 2020 - 8:40 am
If you don't need standard errors you can compute the reliability by hand using the model results. Bootstrap will not resolve the target rotation model constraints issue.
 Andrew Johnson posted on Thursday, February 20, 2020 - 3:33 pm
Right, but if you want the point estimate and confidence intervals of the Omega, you could use EFA-within-CFA with bootstrapping, since the bootstrapping will give confidence intervals that aren't derived from the standard errors
 Tihomir Asparouhov posted on Thursday, February 20, 2020 - 4:57 pm
The EwC is a two stage procedure. I think the correct way to do bootstrap on such a thing is to repeat both steps for each draw. This looks much harder than method 3 I suggested earlier.
 Andrew Johnson posted on Thursday, February 20, 2020 - 5:45 pm
Oh of course, didn't think about the loadings changing between bootstrap replications sorry.

Would you mind clarifying the calculation of the Omega standard error? Using a simple 3-item model, the model constraint would be:

om = (l1+l2+l3)^2 / ((l1+l2+l3)^2 + r1+r2+r3)

How would the TECH3 variances/covariances for these parameters be combined?
 Tihomir Asparouhov posted on Friday, February 21, 2020 - 8:18 am
https://en.wikipedia.org/wiki/Delta_method#Multivariate_delta_method
 Andrew Johnson posted on Friday, February 21, 2020 - 7:28 pm
Thanks Tihomir! I found it easier to use the msm::deltamethod function in R:
MODEL:
F1 BY D1-D3* (L1-L3);
F2 BY D4-D6* (L4-L6);
F1-F2@1;
D1-D6 (R1-R6);
MODEL CONSTRAINT:
NEW(OMEGA1 OMEGA2);
OMEGA1 = (L1+L2+L3)^2 / ((L1+L2+L3)^2+R1+R2+R3);
OMEGA2 = (L4+L5+L6)^2 / ((L4+L5+L6)^2+R4+R5+R6);

With R code:
mod = readModels("Omega_test.out")
# Extract parameter numbers
params = cbind(mod$tech1$parameterSpecification$X$lambda,
diag(mod$tech1$parameterSpecification$X$theta))
# Extract covariances
covs = mod$tech3$paramCov[params[params > 0],params[params > 0]]
covs[upper.tri(covs)] = t(covs)[upper.tri(covs)]
# Extract coefficients (removing factor variances)
coeffs = coef(mod,params = c("loading","variability"))
coeffs = coeffs$est[coeffs$est != 1.000]
forms = list(
formula(~(x1+x2+x3)^2 / ((x1+x2+x3)^2+x7+x8+x9)),
formula(~(x4+x5+x6)^2 / ((x4+x5+x6)^2+x10+x11+x12)))
deltamethod(forms,coeffs,covs)

Mplus: 0.046 0.050
R: 0.0456 0.0495
 Tihomir Asparouhov posted on Saturday, February 22, 2020 - 7:05 am
Great
Back to top
Add Your Message Here
Post:
Username: Posting Information:
This is a private posting area. Only registered users and moderators may post messages here.
Password:
Options: Enable HTML code in message
Automatically activate URLs in message
Action: