The CALIS Procedure

Example 29.31 Linear Relations among Factor Loadings: COSAN Model Specification

This example reanalyzes the models in Example 29.27 by using the COSAN modeling language. The correlation matrix of six variables from Kinzer and Kinzer (N=326) is used (see Guttman 1957). McDonald (1980) uses this data set to demonstrate the fitting of a factor analysis model with linear constraints on factor loadings. Two factors are assumed for the data. The factor loading matrix $\mb {B}$ is shown in the following:

\[  \mb {B} = \begin{pmatrix} b_{11}  & b_{12}  \\ b_{21}  & b_{22}  \\ b_{31}  & b_{32}  \\ b_{41}  & b_{42}  \\ b_{51}  & b_{52}  \\ b_{61}  & b_{62}   \end{pmatrix}  \]

The loadings on the second factor are linearly related to the loadings on the first factor, as described by the following formula:

\[  b_{j2} = \alpha - b_{j1},\quad j = 1, \ldots , 6  \]

The correlation structures are represented by

\[  \mb {P} = \mb {B} \mb {B}^{\prime } + \bPsi  \]

where $\Psi = \mr {diag}(\psi _{11},\psi _{22},\psi _{33},\psi _{44},\psi _{55},\psi _{66})$ represents the diagonal matrix of unique variances for the variables. Because matrix $\mb {P}$ is a correlation matrix, its diagonal elements are fixed constants 1. This means that the diagonal elements of the correlation structures must also satisfy the following condition:

\[  \bPsi _{jj} = 1. - b_{j1}^2 - b_{j2}^2, \quad j = 1, \ldots , 6  \]

To analyze the correlation structures by using PROC CALIS, you formulate a covariance structure model with such correlation structures embedded in the model. That is, you want to fit the following covariance structure model to the Kinzer data:

\[  \bSigma = \mb {D} \mb {P} \mb {D}^{\prime } = \mb {D} (\mb {B} \mb {B}^{\prime } + \bPsi ) \mb {D}^{\prime } = \mb {D} \mb {B} \mb {B}^{\prime } \mb {D}^{\prime } + \mb {D} \bPsi \mb {D}^{\prime }  \]

where $\mb {D}$ is a 6 x 6 diagonal matrix that contains the population standard deviations of the observed variables.

The following statements use the COSAN modeling language to specify this covariance structure model:

proc calis data=Kinzer nobs=326 nose;
   cosan
      var= var1-var6,
      D(6,DIA) * B(2,GEN) + D(6,DIA) * Psi(6,DIA);
   matrix B
      [ ,1] = b11 b21 b31 b41 b51 b61,
      [ ,2] = b12 b22 b32 b42 b52 b62;
   matrix Psi
      [1,1] = psi1-psi6;
   matrix D
      [1,1] = d1-d6;
   parameters alpha (1.);

   /* SAS Programming Statements to Define Dependent Parameters*/
   /* 6 constraints on the factor loadings */
   b12  = alpha - b11;
   b22  = alpha - b21;
   b32  = alpha - b31;
   b42  = alpha - b41;
   b52  = alpha - b51;
   b62  = alpha - b61;

   /* 6 Constraints on Correlation structures */
   psi1 = 1. - b11 * b11 - b12 * b12;
   psi2 = 1. - b21 * b21 - b22 * b22;
   psi3 = 1. - b31 * b31 - b32 * b32;
   psi4 = 1. - b41 * b41 - b42 * b42;
   psi5 = 1. - b51 * b51 - b52 * b52;
   psi6 = 1. - b61 * b61 - b62 * b62;
   vnames
      D   = [var1-var6],
      B   = [factor1 factor2],
      Psi = D;
run;

In the PROC CALIS statement, you specify the data set by the DATA= option and the number of observations by the NOBS= option. You also use the NOSE option to suppress the printing of the standard error estimates.

In the COSAN statement, you specify the variables for the covariance structure analysis in the VAR= option. Next, you specify the covariance structure formula for the variables. When generating the covariance structure expressions for the terms, PROC CALIS examines the matrix type of the last matrix in each term to determine how the expression is generated. If the last matrix in a term is not a symmetric matrix (including diagonal or identity matrix), the transpose of the last matrix would be included in the expression. This ensures that a symmetric matrix expression is formed for the covariance structures. For example, the first term in the current covariance structure formula is D(6,DIA)*B(2,GEN). Because $\mb {B}$ is not a symmetric matrix, the expression generated by PROC CALIS is

\[  \mb {D} * \mb {B} * \mb {B}^{\prime } * \mb {D}^{\prime }  \]

However, for the second term D(6,DIA)* Psi(6,DIA), matrix $\mb {Psi}$ is a symmetric matrix so that the expression generated by PROC CALIS is

\[  \mb {D} * \mb {Psi} * \mb {D}^{\prime }  \]

Output 29.31.1 shows the covariance structure model and the model matrices. With $\mb {Psi}$ representing the unique variance matrix $\bPsi $, the printed covariance structure formula for $\mb {Sigma}$ is clearly what you intend to specify.

Output 29.31.1: The Covariance Structures and Model Matrices: Linearly Constrained Loadings

COSAN Model Structures
Sigma = D*B*B`*D` + D*Psi*D`

Summary of Model Matrices
Matrix N Row N Col Matrix Type
B 6 2 GEN: Rectangular
D 6 6 DIA: Diagonal
Psi 6 6 DIA: Diagonal


In the MATRIX statements, you specify the parameters in the model matrices. You use parameters with the b prefix to name the two columns of loadings of the factor matrix $\mb {B}$. You use free parameters psi1psi6 for the diagonal elements of the $\mb {Psi}$ matrix, and free parameters d1d6 for the diagonal elements of the $\mb {D}$ matrix. Next, you use a PARAMETERS statement to define an independent parameter alpha in the model. This parameter takes an initial value of 1.0. Using this independent parameter and six SAS programming statements, you define the loadings in the second column of matrix $\mb {B}$ as functions of the loadings in the first column of the same matrix.

You use six more SAS programming statements to define the unique variance parameters psi1psi6 as dependent parameters of the factor loadings. These constraints ensure that the embedded correlation structures have diagonal elements fixed at 1.0.

Lastly, you use the VNAMES statement to label the column names of the model matrices. The column names of the diagonal matrix $\mb {D}$ are the same as the observed variables. The column names of matrix $\mb {B}$ are for the factor names.

As compared with the covariance structure specification (that is, the second specification) by the LINEQS model in Example 29.27, the current COSAN specification seems to be more direct and concise in specifying the parameter constraints. Because of the direct references to the matrix elements in the COSAN modeling language, you can set the required 12 constraints in a very straightforward way as the 12 SAS programming statements in the preceding specification. However, with the LINEQS model specification language in Example 29.27, you need 18 more SAS programming statements to define the correct constraints for the same covariance structure model.

Output 29.31.2 shows the fit summary table. The chi-square test statistic is 14.63 with df = 8 (p = 0.067). These are the same model fitting results as using the LINEQS model specification, as shown in Output 29.27.4 of Example 29.27.

Output 29.31.2: Model Fit: Linearly Constrained Loadings with Embedded Correlation Structures

Fit Summary
Chi-Square 14.6269
Chi-Square DF 8
Pr > Chi-Square 0.0668


Output 29.31.3 shows the estimation of the loading matrix $\mb {B}$. These estimates of factor loadings are essentially the same as those obtained from the LINEQS model specification, as shown in Output 29.27.6, except that the two columns of the loading matrix $\mb {B}$ are switched. The column switching is not a concern because the factor labels are arbitrary.

Output 29.31.3: Estimation of the $\mb {B}$ Matrix by the COSAN Model Specification

Model Matrix B
(6 x 2 General Rectangular Matrix)
  factor1 factor2
var1
0.6318
[b11]
0.3422
[b12]
var2
0.6531
[b21]
0.3210
[b22]
var3
0.4822
[b31]
0.4918
[b32]
var4
0.3985
[b41]
0.5755
[b42]
var5
0.1971
[b51]
0.7769
[b52]
var6
0.3074
[b61]
0.6666
[b62]


Output 29.31.4 shows the estimation of the scaling matrix $\mb {D}$. All these standard deviation estimates for the observed variables match those obtained from the LINEQS model specification, as shown in Output 29.27.6.

Output 29.31.4: Estimation of the $\mb {D}$ Matrix by the COSAN Model Specification

Model Matrix D
(6 x 6 Diagonal Matrix)
  var1 var2 var3 var4 var5 var6
var1
1.0077
[d1]
0
 
0
 
0
 
0
 
0
 
var2
0
 
0.9971
[d2]
0
 
0
 
0
 
0
 
var3
0
 
0
 
0.9908
[d3]
0
 
0
 
0
 
var4
0
 
0
 
0
 
0.9909
[d4]
0
 
0
 
var5
0
 
0
 
0
 
0
 
0.9964
[d5]
0
 
var6
0
 
0
 
0
 
0
 
0
 
1.0169
[d6]


Output 29.31.5 shows the estimation of the unique covariance matrix $\mb {Psi}$. All these unique variance parameter estimates match those obtained from the LINEQS model specification, as shown in Output 29.27.6.

Output 29.31.5: Estimation of the $\mb {Psi}$ Matrix by the COSAN Model Specification

Model Matrix Psi
(6 x 6 Diagonal Matrix)
  var1 var2 var3 var4 var5 var6
var1
0.4837
[psi1]
0
 
0
 
0
 
0
 
0
 
var2
0
 
0.4705
[psi2]
0
 
0
 
0
 
0
 
var3
0
 
0
 
0.5256
[psi3]
0
 
0
 
0
 
var4
0
 
0
 
0
 
0.5100
[psi4]
0
 
0
 
var5
0
 
0
 
0
 
0
 
0.3576
[psi5]
0
 
var6
0
 
0
 
0
 
0
 
0
 
0.4612
[psi6]


Finally, Output 29.31.6 shows the estimation of the independent parameter alpha. The same estimate of alpha is shown in Output 29.27.6.

Output 29.31.6: Estimation of the Independent Parameter alpha by the COSAN Model Specification

Additional Parameters
Type Parameter Estimate
Independent alpha 0.97400