Online Appendix: Mplus syntax
1. Configural equivalence
We start by presenting the Mplus syntax for the configural equivalence model, i.e. a model in which factor loadings and thresholds are allowed to vary across time-points. In order to get the configural equivalence model, the Mplus default that all factor loadings and thresholds are equal across groups needs to be overridden. Measurement parameters can be set free across groups by mentioning them in group-specific model statements. Since we have 19 groups, and thus 19 group specific model statements, the Mplus syntax becomes lengthy and repetitive.
In Mplus, two model parameterizations—namely the theta- and delta-approaches—are possible. In the default delta parameterization, residual variances of the latent response variables are not model parameters, while scale factors (defining the metric of the latent response variables) are. In the theta parameterization, residual variances of the latent response variables are model parameters, while the scale factors are not (Muthén and Asparouhov 2002). For invariance testing, the theta parameterization is preferable (Millsap and Yun-Tein 2004: 489). We override the default delta approach in Mplus by explicitly requesting parameterization is theta in the analysisstatement. We use Mplus’ default Weighted Least Squares estimator for categorical variables.
To identify the configural equivalence model, we used the procedure proposed in the Mplus User’s Guide (Muthén and Muthén 1998-2010: 434). In this approach, all thresholds and factor loadings vary freely across groups. Residual variances and the variance of the latent factor are fixed to 1 in all groups. Additional, latent factor means are fixed to 0.
The notes below (preceded by ‘!’) explain how each of the abovementioned steps is specified in Mplus.
TITLE:
Configural equivalence
DATA:
File is TRUST_DATA.dta.dat;
FORMAT IS free;
LISTWISE=Off;
Variable:
NAMES ARE trust interest waste crooked year latent;
USEVARIABLES ARE trust interest waste crooked;
! The 4 political trust items are specified as ordered-categorical;
CATEGORICAL ARE trust interest waste crooked;
MISSING ARE all (-9999);
! The survey year is used as grouping variable;
GROUPING IS year (1964=1964 1968=1968 1970=1970
1972=1972 1974=1974 1976=1976 1978=1978
1980=1980 1984=1984 1988=1988
1990=1990 1992=1992 1994=1994
1996=1996 1998=1998 2000=2000
2002=2002 2004=2004 2008=2008);
ANALYSIS:
! The theta parameterization is requested;
PARAMETERIZATION IS theta;
TYPE IS missing;
ESTIMATORIS WLSMV;
MODEL:
index BY interest waste crooked trust;
model 1964:
!Thresholds are free
[interest$1*];
!Residuals are fixed at 1
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
!Factor mean is fixed at 0;
[index@0];
Factor variance is fixed 1;
index@1
index BY interest* waste* crooked* trust*;
model 1968:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1970:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1972:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1974:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1976:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1978:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1980:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1984:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1988:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1990:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1992:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1994:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1996:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 1998:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 2000:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 2002:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 2004:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
model 2008:
[interest$1*];
interest@1;
[waste$1* waste$2*];
waste@1;
[crooked$1* crooked$2*];
crooked@1;
[trust$1* trust$2*];
trust@1;
[index@0];
index@1
index BY interest* waste* crooked* trust*;
OUTPUT:
standardizedsampstatmodindices (all) tech1;
2.Full equivalence
Mplus by default constrains factor loadingsand thresholds to be equal across groups. As a result, the full (threshold) equivalence model has a relatively simple set-up as compared to the configural equivalence model.
In this model, the following defaults are implemented for reasons of model identification. Residual variances in the first (reference) group are fixed at unity, and residual variances in the other groups are estimated freely (Muthén and Muthén 1998-2010: 77). The latent meanis fixed to 0 in the reference group, and estimated freely in other groups. All item intercepts are fixed to 0. For a more detailed discussion of the complex issue of model identification in MGCFA for categorical data, see Millsap and Yun-Tein 2004; Temme 2006; Muthén and Asparouhov 2002).
TITLE:
Full equivalence
DATA:
File is trust.dta.dat;
FORMAT IS free;
LISTWISE=Off;
VARIABLE:
NAMES ARE year trust interest waste crooked resp;
USEVARIABLES ARE year trust interest waste crooked;
CATEGORICAL ARE trust interest waste crooked;
MISSING ARE all (-9999);
GROUPING IS year (1964=1964 1968=1968 1970=1970
1972=1972 1974=1974 1976=1976 1978=1978
1980=1980 1984=1984 1988=1988
1990=1990 1992=1992 1994=1994
1996=1996 1998=1998 2000=2000
2002=2002 2004=2004 2008=2008);
ANALYSIS:
PARAMETERIZATIONIS theta;
TYPEIS missing;
ESTIMATOR IS WLSMV;
MODEL:
index BY interest waste crooked trust;
OUTPUT:
standardizedsampstatmodindices (all) tech1;
3. Partial equivalence
In the fully equivalent model, all thresholds and loadings were held invariant. However, model diagnostics (comparison of the change in model statistics compare to the configurally equivalent model) suggest that the fully equivalent model does not fit the data adequately. This means that the assumption of the full invariance of all thresholds is untenable. Hence, we referred to the model modification indices to relax these assumptions for certain most problematic thresholds.
In the partially equivalent model we allow these problematic thresholds to be free across time-points.
TITLE:
Partial scalar equivalence model
DATA:
File is trust.dta.dat;
FORMAT IS free;
VARIABLE:
NAMES ARE year id trust interest waste crookedresp;
USEVARIABLES ARE year trust interest waste crooked;
CATEGORICAL ARE trust interest waste crooked;
!We specify the ID variable.
IDVARIABLE IS resp;
MISSING ARE all (-9999);
grouping is year (1964=1964 1968=1968 1970=1970
1972=1972 1974=1974 1976=1976 1978=1978
1980=1980 1984=1984 1988=1988
1990=1990 1992=1992 1994=1994
1996=1996 1998=1998 2000=2000
2002=2002 2004=2004 2008=2008);
ANALYSIS:
PARAMETERIZATION is theta;
ESTIMATOR=WLSMV;
TYPE IS MISSING H1;
MODEL:
index BY interest waste crooked trust;
model 1964:
!This specification set-up the 1st and the 2nd thresholds of the crooked item free in the 1964 sample;
[crooked$1];
[crooked$2];
model 1968:
[waste$1];
model 1970:
[waste$1];
model 1972:
[waste$1];
[crooked$1];
model 1974:
model 1976:
[waste$1];
[waste$2];
model 1978:
[waste$1];
[waste$2];
[crooked$1];
model 1980:
[waste$1];
model 1984:
[waste$1];
model 1988:
model 1990:
[waste$1];
model 1992:
[waste$1];
[crooked$1];
model 1994:
[waste$1];
[crooked$1];
model 1996:
[waste$1];
[waste$2];
model 1998:
[waste$1];
model 2000:
[waste$1];
model 2002:
[waste$1];
model 2004:
model 2008:
OUTPUT:
Standardized sampstatmodindices (all) tech1;
!Thisstep will generate the latent factor scores for the latent trust variable
Savedata:
file is scores.txt;
save = fscores;
The latent factor scores are provided in the file “Factor-scores”
The scores can be merged with the original ANES time-series using the ID variable or user-constructed respondents’ sequence “resp” (a sequence of integers from 1 to 35485 we generated as an alternative to the ANES ID variable).
Alternately, the preconstructed ANES id variable VCF00061 (coded as “id” in our dataset) could be as well used to generate the latent scores. We advise to merge the scores on the observed indicators (do what is right, interest, waste crooked) with the ANES dataset and check the correctness of data merge by correlating the observed scores in the original ANES data file and the merged Mplus data file.
1