The CALIS Procedure

Example 29.19 Fitting Direct Covariance Structures

(View the complete code for this example.)

In the section Direct Covariance Structures Analysis, the MSTRUCT modeling language is used to specify a model with direct covariance structures. In the model, four variables from the data set of Wheaton et al. (1977) are used. The analysis is carried out in this example to investigate the tenability of the hypothesized covariance structures.

The four variables used are: Anomie67, Powerless67, Anomie71, and Powerless71. The hypothesized covariance matrix is structured as:

where:

:

variance of anomie

:

variance of powerlessness

:

covariance between anomie and powerlessness

:

covariance between anomie measures

:

covariance between powerlessness measures

In this example, you hypothesize the covariance structures directly, as opposed to those models with implied covariance structures from path models (see Example 29.17), structural equations (see Example 29.18), or other types of models. The basic assumption of the direct covariance structures in this example is that Anomie and Powerless were invariant over the measurement periods employed. This implies that the time of measurement did not change the variances and covariances of the measures. Therefore, both Anomie67 and Anomie71 have the same variance parameter , and both Powerless67 and Powerless71 have the same variance parameter . These two parameters, and , are hypothesized on the diagonal of the covariance matrix . In the same structured covariance matrix, represents the covariance between Anomie and Powerless, without regard to the time of measurement. The parameter represents the covariance between the Anomie measures, or the reliability of the Anomie measure. Similarly, the parameter represents the covariance between the Powerless measures, or the reliability of the Anomie measure.

As explained in the section Direct Covariance Structures Analysis, you can use the MSTRUCT modeling language to specify the hypothesized covariance structures directly, as shown in the following statements:

proc calis nobs=932 data=Wheaton psummary;
   fitindex on(only)=[chisq df probchi] outfit=savefit;
   mstruct
      var = Anomie67 Powerless67 Anomie71 Powerless71;
   matrix _COV_ [1,1] = phi1,
                [2,2] = phi2,
                [3,3] = phi1,
                [4,4] = phi2,
                [2,1] = theta1,
                [3,1] = theta2,
                [3,2] = theta1,
                [4,1] = theta1,
                [4,2] = theta3,
                [4,3] = theta1;
run;

In the MSTRUCT statement you specify the variables in the VAR= list. The order of variables in this VAR= list is assumed to be the same as that in the row and column of the hypothesized covariance matrix. Next, in the MATRIX statement you specify parameters as entries in the hypothesized covariance matrix _COV_. Only the lower diagonal elements need to be specified because covariance matrices, by nature, are symmetric. Redundant specification of the upper triangular elements are unnecessary as PROC CALIS has the information accounted for. You can also set initial estimates by putting parenthesized numbers after the parameter names. But in this example you let PROC CALIS determine all the initial estimates.

In the PROC CALIS statement, the PSUMMARY option is used. As a global display option, this option suppresses a lot of displayed output and requests only the fit summary table be printed. This way you can eliminate quite a lot of displayed output that is not of your primary interest. In this example, the specification of the covariance structures is straightforward, and you do not need any output regarding the initial estimation or standardized solution. Suppose that you are not even concerned with the estimates of the parameters because you are not yet sure if this model is good enough for the data. All you want to know at this stage is whether the hypothesized covariance structures fit the data well. Therefore, the PSUMMARY option would serve your purpose well in this example.

In fact, even the fit summary table can be trimmed down quite a bit if you only want to look at certain specific fit indices. In the FITINDEX statement of this example, the ON(ONLY)= option turns on the printing of the model fit chi-square, its df, and p-value only. This does not mean that you must lose the information of all other fit indices. In addition to the printed output, you can save all fit indices in an output data set. To this end, you can use the OUTFIT= option in the FITINDEX statement. In this example, you save the results of all fit indices in a SAS data set called savefit.

Output 29.19.1 shows the entire printed output.

Output 29.19.1: Testing Direct Covariance Structures

Fit Summary
Chi-Square221.5798
Chi-Square DF5
Pr > Chi-Square<.0001


The displayed output is very concise. It contains only a fit summary table with three statistics. The p-value for the model fit chi-square test indicates that the hypothesized structures should be rejected at . Therefore, this rather restrictive direct covariance structure model does not fit the data well. A less restrictive covariance structure model is needed to explain the variances and covariances.

All fit indices are saved in the savefit data set. To view it, you can use the following statement:

proc print data=savefit;
run;

Output 29.19.2 shows all indices, their types and values of all fit indices and information.

Output 29.19.2: Saved Fit Indices

Analysis of Direct Covariance Structures
Testing Model by the MSTRUCT Language

Obs_TYPE_IndexCodeFitIndexFitValuePrintChar
1ModelInfo101Number of Observations932.00932
2ModelInfo103Number of Variables4.004
3ModelInfo104Number of Moments10.0010
4ModelInfo105Number of Parameters5.005
5ModelInfo106Number of Active Constraints0.000
6ModelInfo111Baseline Model Function Value1.681.6799
7ModelInfo113Baseline Model Chi-Square1563.941563.9442
8ModelInfo114Baseline Model Chi-Square DF6.006
9ModelInfo115Pr > Baseline Model Chi-Square0.00<.0001
10Absolute201Fit Function0.240.2380
11Absolute203Chi-Square221.58221.5798
12Absolute204Chi-Square DF5.005
13Absolute205Pr > Chi-Square0.00<.0001
14Absolute211Z-Test of Wilson & Hilferty12.2512.2533
15Absolute212Hoelter Critical N47.0047
16Absolute213Root Mean Square Residual (RMR)0.760.7649
17Absolute214Standardized RMR (SRMR)0.070.0701
18Absolute215Goodness of Fit Index (GFI)0.900.9036
19Parsimony301Adjusted GFI (AGFI)0.810.8071
20Parsimony302Parsimonious GFI0.750.7530
21Parsimony303RMSEA Estimate0.220.2157
22Parsimony304RMSEA Lower 90% Confidence Limit0.190.1920
23Parsimony305RMSEA Upper 90% Confidence Limit0.240.2404
24Parsimony306Probability of Close Fit0.00<.0001
25Parsimony307ECVI Estimate0.250.2488
26Parsimony308ECVI Lower 90% Confidence Limit0.200.2003
27Parsimony309ECVI Upper 90% Confidence Limit0.310.3053
28Parsimony310Akaike Information Criterion231.58231.5798
29Parsimony311Bozdogan CAIC260.77260.7665
30Parsimony312Schwarz Bayesian Criterion255.77255.7665
31Parsimony313McDonald Centrality0.890.8903
32Incremental401Bentler Comparative Fit Index0.860.8610
33Incremental403Bentler-Bonett NFI0.860.8583
34Incremental402Bentler-Bonett Non-normed Index0.830.8332
35Incremental405Bollen Normed Index Rho10.830.8300
36Incremental406Bollen Non-normed Index Delta20.860.8611
37Incremental404James et al. Parsimonious NFI0.720.7153


The results of various fit indices from this output data set confirm that the hypothesized model does not fit the data well.

As an aside, it is noted with some shorthand notation, the specification of the MSTRUCT model parameters that use the MATRIX statements can be made a little more precise for the current example. This is shown as follows:

proc calis nobs=932 data=Wheaton psummary;
   mstruct
      var = Anomie67 Powerless67 Anomie71 Powerless71;
   matrix _COV_ [1,1] = phi1 phi2 phi1 phi2,
                [2, ] = theta1,
                [3, ] = theta2 theta1,
                [4, ] = theta1 theta3 theta1;
   fitindex on(only)=[chisq df probchi] outfit=savefit;
run;

In the first entry of the MATRIX statement, the notation [1,1] represents that the parameter list specified after the equal sign starts with the [1,1] element of the _COV_ matrix and proceeds down the diagonal. In the next three entries, the notations [2,], [3,], and [4,] represent that parameter lists start with the first elements of the second, third, and fourth rows, respectively, and proceed to the next (right) elements on the same rows. See the syntax of the MATRIX statement for more details about this kind of shorthand notation.

This example shows how you can use the MSTRUCT modeling language to test specific covariance patterns. You need to define the parameters of the covariance patterns explicitly by the MATRIX statements. See Example 29.4 and Example 29.21 for more applications.

However, some commonly-used covariance and mean patterns are built into PROC CALIS. For these covariance and mean patterns, you can simply use the COVPATTERN= and the MEANPATTERN= options without the need to specify the parameters in the MATRIX statements. See the COVPATTERN= and the MEANPATTERN= options for the supported covariance and mean patterns. See Example 29.5 and Example 29.22 for applications.

Last updated: February 13, 2019