Factor Analysis Action Set

Extracting and Interpreting Solutions in Exploratory Factor Analysis

This section contains PROC CAS code.

Note: Input data must be accessible in your CAS session, either as a CAS table or as a transient-scope table. A CAS table has a two-level name: the first level is your CAS engine libref, and the second level is the table name. You refer to this table in the CAS procedure by specifying only the second level. For more information about two-level names, see Chapter 2, Shared Concepts. A transient-scope table is called directly from the action and exists in memory for the duration of the action. For more information about accessing data, see SAS Viya: System Programming Guide. For more information about PROC CAS and programming in CASL, see SAS Cloud Analytic Services: CASL Programmer’s Guide and SAS Cloud Analytic Services: CASL Reference.

This example uses the jobratings data set that is described in the examples for the FACTOR procedure in SAS/STAT software. These are the same data that are described and analyzed in Example 10.2: Using Multiple Criteria to Determine the Number of Factors.

To create the jobratings data table in your CAS session, you can modify the DATA step that is used to create the data set to create the data table in your CAS engine libref. For this example, it is assumed that your CAS engine libref is named mycas, but you can substitute any appropriately defined CAS engine libref.

In Example 10.2, the jobratings data set is analyzed to determine the number of latent factors that are likely to explain the available ratings data. The results of that analysis indicate that two or three factors are likely to explain the observed covariance among the variables. In this example, the faExtract action is used to extract and rotate a factor pattern that has either two or three common factors.

First, you can use the following code to extract and rotate a factor pattern that has two factors:

proc cas;
factorAnalysis.faExtract /
    fuzz="0.4",
    method={name="ml"},
    nFactors={2},
    reorder="true",
    rotate={type="quartimin"},
    table="jobratings";
run;

When you use the faExtract action, you must specify values for the table and nFactors parameters. You specify the input data table to use for the analysis in the table parameter. You use the nFactors parameter to specify the number of factors to extract in the analysis. In this example, you use the method parameter to request maximum likelihood factor analysis. The factors that are initially extracted by the maximum likelihood method are orthogonal. To facilitate the interpretation of these factors, you use the rotate parameter to request factor rotation by the quartimin method. This is an oblique rotation, so the rotated factors might not be orthogonal. Finally, you specify the reorder and fuzz parameters to further facilitate the interpretation of the factor solution. The reorder parameter orders the rows of the various factor matrices such that variables whose highest absolute loading is on the first factor are displayed first, followed by variables whose highest absolute loading is on the second factor, and so on. The fuzz parameter causes all factor loadings less than 0.4 in magnitude to be printed as missing.

The first outputs that the faExtract action prints are the "Model Information" table and a table that summarizes the number of observations in the input data table. These are shown in Output 10.5.1. Together, these tables summarize important information about the input data that are analyzed as well as the primary analysis parameters that you specified. Next, the "Simple Statistics" table in Output 10.5.2 summarizes the means and standard deviations of the analysis variables.

Output 10.5.1: Model Information and Number of Observations

Results from factorAnalysis.faExtract

Model Information
Data SourceJOBRATINGS
Data TypeRaw
Prior CommunalitiesSquared Multiple Correlations
Factor ExtractionMaximum Likelihood Method
Factor RotationQuartimin

Number of Observations Read103
Number of Observations Used103


Output 10.5.2: Simple Statistics

Simple Statistics
VariableMeanStandard
Deviation
Communication Skills6.650491.76407
Problem Solving6.631071.59035
Learning Ability6.990291.33941
Judgment under Pressure6.737861.73183
Observational Skills6.932041.76158
Willingness to Confront Problems7.291261.52516
Interest in People6.708741.89235
Interpersonal Sensitivity6.621361.76077
Desire for Self-Improvement6.572821.72980
Appearance7.000001.79869
Dependability6.825241.91704
Physical Ability7.203881.55525
Integrity7.213591.84524


Prior communality estimates are shown in the "Prior Communality Estimates" table in Output 10.5.3. For this analysis, the prior communalities are the squared multiple correlations of each analysis variable with the other variables. This is the default setting in the faExtract action. You can use the priors parameter to change this default.

Output 10.5.3: Prior Communalities

Results from factorAnalysis.faExtract

Prior Communality Estimates
Communication SkillsProblem SolvingLearning AbilityJudgment under
Pressure
Observational SkillsWillingness to
Confront Problems
Interest in PeopleInterpersonal SensitivityDesire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
0.629813940.586574310.610098710.637660210.671875830.647798050.756415190.755848910.574601760.455053040.634490450.422453240.68195454


The prior communalities represent initial estimates of the common variance for each analysis variable. (For more information about communalities and common variance, see the section The Common Factor Model.) The prior communalities are used to compute the reduced correlation matrix.

Next, the eigenvalues of the reduced correlation matrix are computed. In fact, for maximum likelihood factor analysis, the eigenvalues of the weighted reduced correlation matrix are computed. The weights that are used are the reciprocals of the unique error variances (that is, one minus the communalities). These eigenvalues are summarized in the "Preliminary Eigenvalues" table in Output 10.5.4. This table suggests that two factors are sufficient to explain approximately 96.6% of the common variance in the original data, whereas three factors are required so that the cumulative variance explained exceeds 1.0. For a more detailed investigation of the tools that you can use to investigate the number of factors in the jobratings data set, see Example 10.2.

Output 10.5.4: Preliminary Eigenvalues

Preliminary Eigenvalues: Total = 23.3301805 Average = 1.79462927
 EigenvalueDifferenceProportionCumulative
117.71272212.8781270.75920.7592
24.8345953.4559870.20720.9664
31.3786080.7399740.05911.0255
40.6386340.0969880.02741.0529
50.5416460.3557710.02321.0761
60.1858750.1973060.00801.0841
7-0.0114310.109243-0.00051.0836
8-0.1206740.119664-0.00521.0784
9-0.2403380.063988-0.01031.0681
10-0.3043260.056731-0.01301.0551
11-0.3610570.029331-0.01551.0396
12-0.3903890.143296-0.01671.0229
13-0.533685 -0.02291.0000


Maximum likelihood factor analysis is an iterative procedure in which the prior communality estimates are used to compute the reduced the correlation matrix, then common factors are extracted from the reduced correlation matrix, and then those common factors are used to compute updated communalities. This process is repeated until the communalities converge. A summary of this iterative process is shown in Output 10.5.5.

Output 10.5.5: Iteration History

IterationCriterionRidgeChangeCommunalities
11.14327500.00000.16240.567310.458390.548230.569270.699720.677800.803410.827300.564930.346890.633500.260050.68041
21.14136090.00000.01620.559650.445710.539170.566060.715910.680630.802060.824310.569100.345560.637590.271060.68382
31.14127550.00000.00300.557780.442680.537300.564800.717390.683360.802610.823510.569540.344640.638590.272630.68463
41.14127080.00000.00070.557370.442200.536590.564560.717920.683680.802820.823210.569530.344650.638730.273110.68489


The faExtract action computes several significance tests and measures of fit when you specify a maximum likelihood factor analysis. These are shown in Output 10.5.6.

Output 10.5.6: Significance Tests and Measures of Fit (Two-Factor Model)

Significance Tests Based on 103 Observations
TestDFChi-SquarePr >
ChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor   
H0: 2 Factors are sufficient53108.9914<.0001
HA: More factors are needed   

Chi-Square without Bartlett's Correction116.40962
Akaike's Information Criterion10.40962
Schwarz's Bayesian Criterion-129.23102
Tucker and Lewis's Reliability Coefficient0.89361


Output 10.5.7: Canonical Correlations

Squared Canonical Correlations
Factor1Factor2
0.948490330.85059176


The final weighted reduced correlation matrix is formed by placing the final communalities on the diagonal of the data correlation matrix. The eigenvalues of this final correlation matrix are shown in the "Eigenvalues of the Weighted Reduced Correlation Matrix" table in Output 10.5.8.

Output 10.5.8: Final Eigenvalues

Eigenvalues of the Weighted Reduced Correlation Matrix: Total = 24.1069015 Average = 1.85437704
 EigenvalueDifferenceProportionCumulative
118.41383212.7207600.76380.7638
25.6930714.6229580.23621.0000
31.0701130.6134540.04441.0444
40.4566590.0585890.01891.0633
50.3980700.2418290.01651.0798
60.1562410.1478850.00651.0863
70.0083560.1166530.00031.0867
8-0.1082980.144262-0.00451.0822
9-0.2525600.047610-0.01051.0717
10-0.3001690.082954-0.01251.0593
11-0.3831240.094605-0.01591.0434
12-0.4777290.089831-0.01981.0235
13-0.567560 -0.02351.0000


The factor pattern that corresponds to these communalities is shown in Output 10.5.9. The missing values indicate that the absolute value of the corresponding element in the pattern does not exceed 0.4, as specified by the fuzz parameter. The variance explained by the extracted factors is summarized in Output 10.5.10, and the final communality estimates are shown in Output 10.5.11.

Output 10.5.9: Factor Pattern

Factor Pattern
 Factor1Factor2
Integrity0.80231.
Interest in People0.80035-0.40283
Dependability0.79336.
Interpersonal Sensitivity0.75439-0.50407
Judgment under Pressure0.74785.
Communication Skills0.72073.
Desire for Self-Improvement0.70799.
Problem Solving0.64047.
Observational Skills0.611180.58687
Learning Ability0.575320.45334
Appearance0.51787.
Physical Ability0.48446.
Willingness to Confront Problems0.571560.59756

Values less than 0.4 are not printed.



Output 10.5.10: Variance Explained (Initial Solution)

Variance Explained by Each Factor
FactorWeightedUnweighted
Factor118.4138326.007072
Factor25.6930711.632118


Output 10.5.11: Final Communalities (Initial Solution)

Final Communality Estimates and Variable Weights
Total Communality: Weighted = 24.106903 Unweighted = 7.639189
VariableCommunalityWeight
Communication Skills0.557279592.25920908
Problem Solving0.442071531.79275764
Learning Ability0.536504472.15791760
Judgment under Pressure0.564503492.29653380
Observational Skills0.717958683.54514379
Willingness to Confront Problems0.683752203.16130592
Interest in People0.802830895.07138167
Interpersonal Sensitivity0.823191435.65640994
Desire for Self-Improvement0.569535392.32303202
Appearance0.344633111.52589948
Dependability0.638773792.76805050
Physical Ability0.273209061.37572027
Integrity0.684945683.17353979


To facilitate the interpretation of the factor solution, it is often helpful to rotate the initial factor pattern. For the current analysis, a factor rotation by the quartimin method was specified. This is an oblique rotation, so the rotated factors are likely to be correlated. The oblique transformation matrix (that is, the matrix that maps the initial factor pattern into the rotated factor pattern) is shown in Output 10.5.12, as is the "Interfactor Correlations" table, which summarizes the correlations between the rotated factors. For this analysis, the two factors are moderately correlated with each other.

Output 10.5.12: Oblique Transformation Matrix

Results from factorAnalysis.faExtract

Oblique Transformation Matrix
 12
10.509330.64767
21.02518-0.94389

Interfactor Correlations
 Factor1Factor2
Factor11.000000.48670
Factor20.486701.00000


The rotated factor pattern is shown in Output 10.5.13. Again, the fuzz parameter causes factor loadings whose absolute values are less than 0.4 to be printed as missing. Such smaller factor loadings are not considered to be salient, and printing the values as missing makes it easier to distinguish the relationships between the analysis variables and the computed factors. In the rotated factor pattern, almost all variables load primarily on one factor (the Dependability variable is the exception). The factor pattern can be interpreted as the standardized regression coefficients for predicting the effects of the factors on the variables.

Output 10.5.13: Rotated Factor Pattern

Rotated Factor Pattern (Standardized Regression Coefficients)
 Factor1Factor2
Observational Skills0.91294.
Willingness to Confront Problems0.90372.
Learning Ability0.75778.
Desire for Self-Improvement0.62848.
Communication Skills0.56648.
Appearance0.54721.
Problem Solving0.50924.
Dependability0.503230.42255
Physical Ability0.44792.
Interpersonal Sensitivity.0.96438
Interest in People.0.89859
Integrity.0.71131
Judgment under Pressure.0.55262

Values less than 0.4 are not printed.



The factor structure is shown in Output 10.5.14. The factor structure represents the correlation between the factors and the variables. This can be an important aid for interpretation when factors are correlated, as in the current example.

Output 10.5.14: Factor Structure

Factor Structure (Correlations)
 Factor1Factor2
Observational Skills0.83599.
Willingness to Confront Problems0.80937.
Learning Ability0.73087.
Desire for Self-Improvement0.731620.51779
Communication Skills0.704320.55893
Appearance0.58344.
Problem Solving0.629110.49414
Dependability0.708890.66747
Physical Ability0.51049.
Interpersonal Sensitivity.0.89988
Interest in People0.432020.89600
Integrity0.546660.80888
Judgment under Pressure0.575720.70192

Values less than 0.4 are not printed.



When factors are correlated, the common variance explained by each factor is not as straightforward as it is in the case when the factors are uncorrelated. The contributions from the other factors must be either eliminated or ignored. Both computations are shown in Output 10.5.15.

Output 10.5.15: Variance Explained

Variance Explained by Each Factor, Ignoring
Other Factors
FactorWeightedUnweighted
Factor114.3417505.349164
Factor215.8955794.506741

Variance Explained by Each Factor, Eliminating
Other Factors
FactorWeightedUnweighted
Factor18.2113243.132449
Factor29.7651532.290025


Finally, the final communality estimates for the rotated solution are shown in Output 10.5.16.

Output 10.5.16: Variance Explained

Final Communality Estimates and Variable Weights
Total Communality: Weighted = 24.106903 Unweighted = 7.639189
VariableCommunalityWeight
Communication Skills0.557279592.25920908
Problem Solving0.442071531.79275764
Learning Ability0.536504472.15791760
Judgment under Pressure0.564503492.29653380
Observational Skills0.717958683.54514379
Willingness to Confront Problems0.683752203.16130592
Interest in People0.802830895.07138167
Interpersonal Sensitivity0.823191435.65640994
Desire for Self-Improvement0.569535392.32303202
Appearance0.344633111.52589948
Dependability0.638773792.76805050
Physical Ability0.273209061.37572027
Integrity0.684945683.17353979


To fully investigate the possibility that three factors rather than just two should be extracted, you can repeat the preceding analysis and change only the number of factors. The following code requests such an analysis:

proc cas;
factorAnalysis.faExtract /
    fuzz="0.4",
    method={name="ml"},
    nFactors={3},
    reorder="true",
    rotate={type="quartimin"},
    table="jobratings";
run;

Much of the initial analysis is the same as when two factors are extracted. First, the prior communalities are computed and used to form the reduced correlation matrix. This reduced correlation matrix is the input for an iterative process in which the final communalities and the initial factor pattern are computed.

Output 10.5.17 shows the tests of significance and measures of fit tables when three factors are extracted from the jobratings data set. You can see that Akaike’s information criterion obtains a lower value for the three-factor model when you compare it to the two-factor model. On the other hand, Schwarz’s Bayesian criterion obtains a lower value for the two-factor model. Thus there is still ambiguity regarding the number of factors that should be estimated from the data.

Output 10.5.17: Significance Tests and Measures of Fit (Three-Factor Model)

Results from factorAnalysis.faExtract

Significance Tests Based on 103 Observations
TestDFChi-SquarePr >
ChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor   
H0: 3 Factors are sufficient4263.39310.0181
HA: More factors are needed   

Chi-Square without Bartlett's Correction68.18380
Akaike's Information Criterion-15.81620
Schwarz's Bayesian Criterion-126.47482
Tucker and Lewis's Reliability Coefficient0.94870


The initial factor pattern for the three-factor solution is shown in Output 10.5.18. As before, the quartimin rotation is applied to this initial factor pattern. The "Oblique Transformation Matrix" and the "Interfactor Correlations" are shown in Output 10.5.19. For the three-factor solution, the first and third factors are moderately correlated with each other.

Output 10.5.18: Factor Pattern

Factor Pattern
 Factor1Factor2Factor3
Integrity0.79639..
Interest in People0.79293-0.42170.
Dependability0.78828..
Judgment under Pressure0.76129..
Interpersonal Sensitivity0.75185-0.50923.
Communication Skills0.73337..
Desire for Self-Improvement0.70353..
Problem Solving0.67936.-0.48758
Observational Skills0.610880.57367.
Learning Ability0.589350.46440.
Appearance0.51770..
Physical Ability0.48145..
Willingness to Confront Problems0.575380.58409.

Values less than 0.4 are not printed.



Output 10.5.19: Oblique Transformation Matrix

Results from factorAnalysis.faExtract

Oblique Transformation Matrix
 123
10.419090.580670.27177
20.82170-0.920040.17477
30.798670.17078-1.14008

Interfactor Correlations
 Factor1Factor2Factor3
Factor11.000000.395100.52069
Factor20.395101.000000.32454
Factor30.520690.324541.00000


The rotated factor pattern is shown in Output 10.5.20. This factor pattern is qualitatively similar to the rotated factor pattern for the two-factor solution. Each factor explains a subset of the analysis variables, and each analysis variable loads primarily on one or two of the common factors.

Output 10.5.20: Rotated Factor Pattern

Rotated Factor Pattern (Standardized Regression Coefficients)
 Factor1Factor2Factor3
Observational Skills0.88114..
Willingness to Confront Problems0.77606..
Desire for Self-Improvement0.65025..
Dependability0.548780.41841.
Physical Ability0.52291..
Learning Ability0.52041..
Appearance0.51472..
Interpersonal Sensitivity.0.89025.
Interest in People.0.86708.
Integrity.0.71002.
Judgment under Pressure.0.467140.44509
Problem Solving..0.77844
Communication Skills..0.45834

Values less than 0.4 are not printed.



Finally, the common variance explained by the factors is summarized in the tables in Output 10.5.15.

Output 10.5.21: Variance Explained

Variance Explained by Each Factor, Ignoring
Other Factors
FactorWeightedUnweighted
Factor115.1844885.030941
Factor216.5195404.038321
Factor311.1573553.441515

Variance Explained by Each Factor, Eliminating
Other Factors
FactorWeightedUnweighted
Factor16.1257592.123909
Factor210.2287932.177506
Factor33.0432140.904367


In this example, even after extracting and rotating a two-factor model and a three-factor model, there remains some ambiguity about which solution should be preferred. In this case, the decision might be justified by determining which solution is easier to interpret or is more consistent with existing theory or future experiments. You should also consider the possibility that the common factor model is not appropriate for the current data. In that case, you might consider a more complex model, such as a structural equation model.

Extracting and Interpreting Solutions in Exploratory Factor Analysis

This section contains Lua code that creates the same jobratings table and performs the same analysis as shown in the CASL version of this example. For more information about coding in Lua, see Getting Started with SAS Viya for Lua and SAS Viya: System Programming Guide.

Because this example uses simulated data that are produced from DATA step code, you can submit the runCode action on your Lua client to create the simulated data in your CAS session.

This example uses the jobratings data set that is described in the examples for the FACTOR procedure in SAS/STAT software. These are the same data that are described and analyzed in Example 10.2: Using Multiple Criteria to Determine the Number of Factors.

To run this example code, you must make the jobratings data accessible to the CAS server. One way to do this is to convert the jobratings data set from the PROC FACTOR documentation to a comma-separated-value (CSV) file and then load the CSV file into CAS.

In Example 10.2, the jobratings data set is analyzed to determine the number of latent factors that are likely to explain the available ratings data. The results of that analysis indicate that two or three factors are likely to explain the observed covariance among the variables. In this example, the faExtract action is used to extract and rotate a factor pattern that has either two or three common factors.

First, you can use the following code to extract and rotate a factor pattern that has two factors:

s:loadactionset{actionset="factorAnalysis"}
s:factorAnalysis_faExtract{
table='jobratings',
nFactors={2},
method={name='ml'},
rotate={type='quartimin'},
reorder=true,
fuzz=0.4
}

When you use the faExtract action, you must specify values for the table and nFactors parameters. You specify the input data table to use for the analysis in the table parameter. You use the nFactors parameter to specify the number of factors to extract in the analysis. In this example, you use the method parameter to request maximum likelihood factor analysis. The factors that are initially extracted by the maximum likelihood method are orthogonal. To facilitate the interpretation of these factors, you use the rotate parameter to request factor rotation by the quartimin method. This is an oblique rotation, so the rotated factors might not be orthogonal. Finally, you specify the reorder and fuzz parameters to further facilitate the interpretation of the factor solution. The reorder parameter orders the rows of the various factor matrices such that variables whose highest absolute loading is on the first factor are displayed first, followed by variables whose highest absolute loading is on the second factor, and so on. The fuzz parameter causes all factor loadings less than 0.4 in magnitude to be printed as missing.

The first outputs that the faExtract action prints are the "Model Information" table and a table that summarizes the number of observations in the input data table. These are shown in Output 10.5.22. Together, these tables summarize important information about the input data that are analyzed as well as the primary analysis parameters that you specified. Next, the "Simple Statistics" table in Output 10.5.23 summarizes the means and standard deviations of the analysis variables.

Output 10.5.22: Model Information and Number of Observations

RowIdDescriptioncValueValue
TABLEData SourceJOBRATINGS.
TYPEData TypeRaw.
PRIORSPrior CommunalitiesSquared Multiple Correlations.
EXTRACTFactor ExtractionMaximum Likelihood Method.
ROTATEFactor RotationQuartimin.

RowIdDescriptionValue
NREADNumber of Observations Read103
NUSEDNumber of Observations Used103


Output 10.5.23: Simple Statistics

VariableMeanStdDev
Communication Skills6.650491.76407
Problem Solving6.631071.59035
Learning Ability6.990291.33941
Judgment under Pressure6.737861.73183
Observational Skills6.932041.76158
Willingness to Confront Problems7.291261.52516
Interest in People6.708741.89235
Interpersonal Sensitivity6.621361.76077
Desire for Self-Improvement6.572821.72980
Appearance7.000001.79869
Dependability6.825241.91704
Physical Ability7.203881.55525
Integrity7.213591.84524


Prior communality estimates are shown in the "Prior Communality Estimates" table in Output 10.5.24. For this analysis, the prior communalities are the squared multiple correlations of each analysis variable with the other variables. This is the default setting in the faExtract action. You can use the priors parameter to change this default.

Output 10.5.24: Prior Communalities

Communication SkillsProblem SolvingLearning AbilityJudgment under
Pressure
Observational SkillsWillingness to
Confront Problems
Interest in PeopleInterpersonal SensitivityDesire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
0.629813940.586574310.610098710.637660210.671875830.647798050.756415190.755848910.574601760.455053040.634490450.422453240.68195454


The prior communalities represent initial estimates of the common variance for each analysis variable. (For more information about communalities and common variance, see the section The Common Factor Model.) The prior communalities are used to compute the reduced correlation matrix.

Next, the eigenvalues of the reduced correlation matrix are computed. In fact, for maximum likelihood factor analysis, the eigenvalues of the weighted reduced correlation matrix are computed. The weights that are used are the reciprocals of the unique error variances (that is, one minus the communalities). These eigenvalues are summarized in the "Preliminary Eigenvalues" table in Output 10.5.25. This table suggests that two factors are sufficient to explain approximately 96.6% of the common variance in the original data, whereas three factors are required so that the cumulative variance explained exceeds 1.0. For a more detailed investigation of the tools that you can use to investigate the number of factors in the jobratings data set, see Example 10.2.

Output 10.5.25: Preliminary Eigenvalues

NumberEigenvalueDifferenceProportionCumulative
117.71272212.8781270.75920.7592
24.8345953.4559870.20720.9664
31.3786080.7399740.05911.0255
40.6386340.0969880.02741.0529
50.5416460.3557710.02321.0761
60.1858750.1973060.00801.0841
7-0.0114310.109243-0.00051.0836
8-0.1206740.119664-0.00521.0784
9-0.2403380.063988-0.01031.0681
10-0.3043260.056731-0.01301.0551
11-0.3610570.029331-0.01551.0396
12-0.3903890.143296-0.01671.0229
13-0.533685_-0.02291.0000


Maximum likelihood factor analysis is an iterative procedure in which the prior communality estimates are used to compute the reduced the correlation matrix, then common factors are extracted from the reduced correlation matrix, and then those common factors are used to compute updated communalities. This process is repeated until the communalities converge. A summary of this iterative process is shown in Output 10.5.26.

Output 10.5.26: Iteration History

IterationCriterionRidgeChangeCommunication
Skills
Problem SolvingLearning AbilityJudgment under
Pressure
Observational
Skills
Willingness
to Confront
Problems
Interest in
People
Interpersonal
Sensitivity
Desire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
11.14327500.00000.16240.567310.458390.548230.569270.699720.677800.803410.827300.564930.346890.633500.260050.68041
21.14136090.00000.01620.559650.445710.539170.566060.715910.680630.802060.824310.569100.345560.637590.271060.68382
31.14127550.00000.00300.557780.442680.537300.564800.717390.683360.802610.823510.569540.344640.638590.272630.68463
41.14127080.00000.00070.557370.442200.536590.564560.717920.683680.802820.823210.569530.344650.638730.273110.68489


The faExtract action computes several significance tests and measures of fit when you specify a maximum likelihood factor analysis. These are shown in Output 10.5.27.

Output 10.5.27: Significance Tests and Measures of Fit (Two-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 2 Factors are sufficient53108.9914<.0001
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction116.40962
Akaike's Information Criterion10.40962
Schwarz's Bayesian Criterion-129.23102
Tucker and Lewis's Reliability Coefficient0.89361


Output 10.5.28: Canonical Correlations

Factor1Factor2
0.948490330.85059176


The final weighted reduced correlation matrix is formed by placing the final communalities on the diagonal of the data correlation matrix. The eigenvalues of this final correlation matrix are shown in the "Eigenvalues of the Weighted Reduced Correlation Matrix" table in Output 10.5.29.

Output 10.5.29: Final Eigenvalues

Factor1Factor2
0.948490330.85059176


The factor pattern that corresponds to these communalities is shown in Output 10.5.30. The missing values indicate that the absolute value of the corresponding element in the pattern does not exceed 0.4, as specified by the fuzz parameter. The variance explained by the extracted factors is summarized in Output 10.5.31, and the final communality estimates are shown in Output 10.5.32.

Output 10.5.30: Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Integrity0.80231.0.80231-0.20307
Interest in People0.80035-0.402830.80035-0.40283
Dependability0.79336.0.793360.09671
Interpersonal Sensitivity0.75439-0.504070.75439-0.50407
Judgment under Pressure0.74785.0.74785-0.07232
Communication Skills0.72073.0.720730.19449
Desire for Self-Improvement0.70799.0.707990.26130
Problem Solving0.64047.0.640470.17854
Observational Skills0.611180.586870.611180.58687
Learning Ability0.575320.453340.575320.45334
Appearance0.51787.0.517870.27648
Physical Ability0.48446.0.484460.19623
Willingness to Confront Problems0.571560.597560.571560.59756


Output 10.5.31: Variance Explained (Initial Solution)

FactorWeightedUnweightedSolution
Factor118.4138326.007072Initial
Factor25.6930711.632118Initial


Output 10.5.32: Final Communalities (Initial Solution)

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Initial
Problem Solving0.442071531.79275764Initial
Learning Ability0.536504472.15791760Initial
Judgment under Pressure0.564503492.29653380Initial
Observational Skills0.717958683.54514379Initial
Willingness to Confront Problems0.683752203.16130592Initial
Interest in People0.802830895.07138167Initial
Interpersonal Sensitivity0.823191435.65640994Initial
Desire for Self-Improvement0.569535392.32303202Initial
Appearance0.344633111.52589948Initial
Dependability0.638773792.76805050Initial
Physical Ability0.273209061.37572027Initial
Integrity0.684945683.17353979Initial


To facilitate the interpretation of the factor solution, it is often helpful to rotate the initial factor pattern. For the current analysis, a factor rotation by the quartimin method was specified. This is an oblique rotation, so the rotated factors are likely to be correlated. The oblique transformation matrix (that is, the matrix that maps the initial factor pattern into the rotated factor pattern) is shown in Output 10.5.33, as is the "Interfactor Correlations" table, which summarizes the correlations between the rotated factors. For this analysis, the two factors are moderately correlated with each other.

Output 10.5.33: Oblique Transformation Matrix

RowLabel12
10.509330.64767
21.02518-0.94389

RowNameFactor1Factor2
Factor11.000000.48670
Factor20.486701.00000


The rotated factor pattern is shown in Output 10.5.34. Again, the fuzz parameter causes factor loadings whose absolute values are less than 0.4 to be printed as missing. Such smaller factor loadings are not considered to be salient, and printing the values as missing makes it easier to distinguish the relationships between the analysis variables and the computed factors. In the rotated factor pattern, almost all variables load primarily on one factor (the Dependability variable is the exception). The factor pattern can be interpreted as the standardized regression coefficients for predicting the effects of the factors on the variables.

Output 10.5.34: Rotated Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.91294.0.91294-0.15810
Willingness to Confront Problems0.90372.0.90372-0.19385
Learning Ability0.75778.0.75778-0.05528
Desire for Self-Improvement0.62848.0.628480.21191
Communication Skills0.56648.0.566480.28322
Appearance0.54721.0.547210.07444
Problem Solving0.50924.0.509240.24629
Dependability0.503230.422550.503230.42255
Physical Ability0.44792.0.447920.12855
Interpersonal Sensitivity.0.96438-0.132530.96438
Interest in People.0.89859-0.005330.89859
Integrity.0.711310.200460.71131
Judgment under Pressure.0.552620.306760.55262


The factor structure is shown in Output 10.5.35. The factor structure represents the correlation between the factors and the variables. This can be an important aid for interpretation when factors are correlated, as in the current example.

Output 10.5.35: Factor Structure

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.83599.0.835990.28623
Willingness to Confront Problems0.80937.0.809370.24599
Learning Ability0.73087.0.730870.31353
Desire for Self-Improvement0.731620.517790.731620.51779
Communication Skills0.704320.558930.704320.55893
Appearance0.58344.0.583440.34077
Problem Solving0.629110.494140.629110.49414
Dependability0.708890.667470.708890.66747
Physical Ability0.51049.0.510490.34655
Interpersonal Sensitivity.0.899880.336840.89988
Interest in People0.432020.896000.432020.89600
Integrity0.546660.808880.546660.80888
Judgment under Pressure0.575720.701920.575720.70192


When factors are correlated, the common variance explained by each factor is not as straightforward as it is in the case when the factors are uncorrelated. The contributions from the other factors must be either eliminated or ignored. Both computations are shown in Output 10.5.36.

Output 10.5.36: Variance Explained

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated


Finally, the final communality estimates for the rotated solution are shown in Output 10.5.37.

Output 10.5.37: Variance Explained

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Rotated
Problem Solving0.442071531.79275764Rotated
Learning Ability0.536504472.15791760Rotated
Judgment under Pressure0.564503492.29653380Rotated
Observational Skills0.717958683.54514379Rotated
Willingness to Confront Problems0.683752203.16130592Rotated
Interest in People0.802830895.07138167Rotated
Interpersonal Sensitivity0.823191435.65640994Rotated
Desire for Self-Improvement0.569535392.32303202Rotated
Appearance0.344633111.52589948Rotated
Dependability0.638773792.76805050Rotated
Physical Ability0.273209061.37572027Rotated
Integrity0.684945683.17353979Rotated


To fully investigate the possibility that three factors rather than just two should be extracted, you can repeat the preceding analysis and change only the number of factors. The following code requests such an analysis:

s:factorAnalysis_faExtract{
table='jobratings',
nFactors={3},
method={name='ml'},
rotate={type='quartimin'},
reorder=true,
fuzz=0.4
}

Much of the initial analysis is the same as when two factors are extracted. First, the prior communalities are computed and used to form the reduced correlation matrix. This reduced correlation matrix is the input for an iterative process in which the final communalities and the initial factor pattern are computed.

Output 10.5.38 shows the tests of significance and measures of fit tables when three factors are extracted from the jobratings data set. You can see that Akaike’s information criterion obtains a lower value for the three-factor model when you compare it to the two-factor model. On the other hand, Schwarz’s Bayesian criterion obtains a lower value for the two-factor model. Thus there is still ambiguity regarding the number of factors that should be estimated from the data.

Output 10.5.38: Significance Tests and Measures of Fit (Three-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 3 Factors are sufficient4263.39310.0181
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction68.18380
Akaike's Information Criterion-15.81620
Schwarz's Bayesian Criterion-126.47482
Tucker and Lewis's Reliability Coefficient0.94870


The initial factor pattern for the three-factor solution is shown in Output 10.5.39. As before, the quartimin rotation is applied to this initial factor pattern. The "Oblique Transformation Matrix" and the "Interfactor Correlations" are shown in Output 10.5.40. For the three-factor solution, the first and third factors are moderately correlated with each other.

Output 10.5.39: Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Integrity0.79639..0.79639-0.229070.21566
Interest in People0.79293-0.42170.0.79293-0.421700.10935
Dependability0.78828..0.788280.078510.19271
Judgment under Pressure0.76129..0.76129-0.06798-0.21935
Interpersonal Sensitivity0.75185-0.50923.0.75185-0.50923-0.08691
Communication Skills0.73337..0.733370.20269-0.19613
Desire for Self-Improvement0.70353..0.703530.243400.19459
Problem Solving0.67936.-0.487580.679360.21704-0.48758
Observational Skills0.610880.57367.0.610880.573670.19250
Learning Ability0.589350.46440.0.589350.46440-0.13545
Appearance0.51770..0.517700.266110.09903
Physical Ability0.48145..0.481450.177830.21914
Willingness to Confront Problems0.575380.58409.0.575380.584090.06884


Output 10.5.40: Oblique Transformation Matrix

RowLabel123
10.419090.580670.27177
20.82170-0.920040.17477
30.798670.17078-1.14008

RowNameFactor1Factor2Factor3
Factor11.000000.395100.52069
Factor20.395101.000000.32454
Factor30.520690.324541.00000


The rotated factor pattern is shown in Output 10.5.41. This factor pattern is qualitatively similar to the rotated factor pattern for the two-factor solution. Each factor explains a subset of the analysis variables, and each analysis variable loads primarily on one or two of the common factors.

Output 10.5.41: Rotated Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Observational Skills0.88114..0.88114-0.140200.04681
Willingness to Confront Problems0.77606..0.77606-0.191520.17997
Desire for Self-Improvement0.65025..0.650250.217810.01189
Dependability0.548780.41841.0.548780.418410.00825
Physical Ability0.52291..0.522910.15338-0.08792
Learning Ability0.52041..0.52041-0.108190.39575
Appearance0.51472..0.514720.072690.07430
Interpersonal Sensitivity.0.89025.-0.172760.890250.21442
Interest in People.0.86708.0.073130.867080.01713
Integrity.0.71002.0.317770.71002-0.06947
Judgment under Pressure.0.467140.445090.088000.467140.44509
Problem Solving..0.778440.073640.111530.77844
Communication Skills..0.458340.317250.205870.45834


Finally, the common variance explained by the factors is summarized in the tables in Output 10.5.36.

Output 10.5.42: Variance Explained

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated


In this example, even after extracting and rotating a two-factor model and a three-factor model, there remains some ambiguity about which solution should be preferred. In this case, the decision might be justified by determining which solution is easier to interpret or is more consistent with existing theory or future experiments. You should also consider the possibility that the common factor model is not appropriate for the current data. In that case, you might consider a more complex model, such as a structural equation model.

Extracting and Interpreting Solutions in Exploratory Factor Analysis

This section contains Python code that creates the same jobratings table and performs the same analysis as shown in the CASL version of this example. For more information about coding in Python, see Getting Started with SAS Viya for Python and SAS Viya: System Programming Guide.

Because this example uses simulated data that are produced from DATA step code, you can submit the runCode action on your Python client to create the simulated data in your CAS session.

This example uses the jobratings data set that is described in the examples for the FACTOR procedure in SAS/STAT software. These are the same data that are described and analyzed in Example 10.2: Using Multiple Criteria to Determine the Number of Factors.

To run this example code, you must make the jobratings data accessible to the CAS server. One way to do this is to convert the jobratings data set from the PROC FACTOR documentation to a comma-separated-value (CSV) file and then load the CSV file into CAS.

In Example 10.2, the jobratings data set is analyzed to determine the number of latent factors that are likely to explain the available ratings data. The results of that analysis indicate that two or three factors are likely to explain the observed covariance among the variables. In this example, the faExtract action is used to extract and rotate a factor pattern that has either two or three common factors.

First, you can use the following code to extract and rotate a factor pattern that has two factors:

s.loadactionset(actionset='factorAnalysis')
s.factoranalysis.faextract(
    fuzz='0.4',
    method=dict(name='ml'),
    nFactors=[2],
    reorder='true',
    rotate=dict(type='quartimin'),
    table='jobratings')

When you use the faExtract action, you must specify values for the table and nFactors parameters. You specify the input data table to use for the analysis in the table parameter. You use the nFactors parameter to specify the number of factors to extract in the analysis. In this example, you use the method parameter to request maximum likelihood factor analysis. The factors that are initially extracted by the maximum likelihood method are orthogonal. To facilitate the interpretation of these factors, you use the rotate parameter to request factor rotation by the quartimin method. This is an oblique rotation, so the rotated factors might not be orthogonal. Finally, you specify the reorder and fuzz parameters to further facilitate the interpretation of the factor solution. The reorder parameter orders the rows of the various factor matrices such that variables whose highest absolute loading is on the first factor are displayed first, followed by variables whose highest absolute loading is on the second factor, and so on. The fuzz parameter causes all factor loadings less than 0.4 in magnitude to be printed as missing.

The first outputs that the faExtract action prints are the "Model Information" table and a table that summarizes the number of observations in the input data table. These are shown in Output 10.5.43. Together, these tables summarize important information about the input data that are analyzed as well as the primary analysis parameters that you specified. Next, the "Simple Statistics" table in Output 10.5.44 summarizes the means and standard deviations of the analysis variables.

Output 10.5.43: Model Information and Number of Observations

RowIdDescriptioncValueValue
TABLEData SourceJOBRATINGS.
TYPEData TypeRaw.
PRIORSPrior CommunalitiesSquared Multiple Correlations.
EXTRACTFactor ExtractionMaximum Likelihood Method.
ROTATEFactor RotationQuartimin.

RowIdDescriptionValue
NREADNumber of Observations Read103
NUSEDNumber of Observations Used103


Output 10.5.44: Simple Statistics

VariableMeanStdDev
Communication Skills6.650491.76407
Problem Solving6.631071.59035
Learning Ability6.990291.33941
Judgment under Pressure6.737861.73183
Observational Skills6.932041.76158
Willingness to Confront Problems7.291261.52516
Interest in People6.708741.89235
Interpersonal Sensitivity6.621361.76077
Desire for Self-Improvement6.572821.72980
Appearance7.000001.79869
Dependability6.825241.91704
Physical Ability7.203881.55525
Integrity7.213591.84524


Prior communality estimates are shown in the "Prior Communality Estimates" table in Output 10.5.45. For this analysis, the prior communalities are the squared multiple correlations of each analysis variable with the other variables. This is the default setting in the faExtract action. You can use the priors parameter to change this default.

Output 10.5.45: Prior Communalities

Communication SkillsProblem SolvingLearning AbilityJudgment under
Pressure
Observational SkillsWillingness to
Confront Problems
Interest in PeopleInterpersonal SensitivityDesire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
0.629813940.586574310.610098710.637660210.671875830.647798050.756415190.755848910.574601760.455053040.634490450.422453240.68195454


The prior communalities represent initial estimates of the common variance for each analysis variable. (For more information about communalities and common variance, see the section The Common Factor Model.) The prior communalities are used to compute the reduced correlation matrix.

Next, the eigenvalues of the reduced correlation matrix are computed. In fact, for maximum likelihood factor analysis, the eigenvalues of the weighted reduced correlation matrix are computed. The weights that are used are the reciprocals of the unique error variances (that is, one minus the communalities). These eigenvalues are summarized in the "Preliminary Eigenvalues" table in Output 10.5.46. This table suggests that two factors are sufficient to explain approximately 96.6% of the common variance in the original data, whereas three factors are required so that the cumulative variance explained exceeds 1.0. For a more detailed investigation of the tools that you can use to investigate the number of factors in the jobratings data set, see Example 10.2.

Output 10.5.46: Preliminary Eigenvalues

NumberEigenvalueDifferenceProportionCumulative
117.71272212.8781270.75920.7592
24.8345953.4559870.20720.9664
31.3786080.7399740.05911.0255
40.6386340.0969880.02741.0529
50.5416460.3557710.02321.0761
60.1858750.1973060.00801.0841
7-0.0114310.109243-0.00051.0836
8-0.1206740.119664-0.00521.0784
9-0.2403380.063988-0.01031.0681
10-0.3043260.056731-0.01301.0551
11-0.3610570.029331-0.01551.0396
12-0.3903890.143296-0.01671.0229
13-0.533685_-0.02291.0000


Maximum likelihood factor analysis is an iterative procedure in which the prior communality estimates are used to compute the reduced the correlation matrix, then common factors are extracted from the reduced correlation matrix, and then those common factors are used to compute updated communalities. This process is repeated until the communalities converge. A summary of this iterative process is shown in Output 10.5.47.

Output 10.5.47: Iteration History

IterationCriterionRidgeChangeCommunication
Skills
Problem SolvingLearning AbilityJudgment under
Pressure
Observational
Skills
Willingness
to Confront
Problems
Interest in
People
Interpersonal
Sensitivity
Desire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
11.14327500.00000.16240.567310.458390.548230.569270.699720.677800.803410.827300.564930.346890.633500.260050.68041
21.14136090.00000.01620.559650.445710.539170.566060.715910.680630.802060.824310.569100.345560.637590.271060.68382
31.14127550.00000.00300.557780.442680.537300.564800.717390.683360.802610.823510.569540.344640.638590.272630.68463
41.14127080.00000.00070.557370.442200.536590.564560.717920.683680.802820.823210.569530.344650.638730.273110.68489


The faExtract action computes several significance tests and measures of fit when you specify a maximum likelihood factor analysis. These are shown in Output 10.5.48.

Output 10.5.48: Significance Tests and Measures of Fit (Two-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 2 Factors are sufficient53108.9914<.0001
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction116.40962
Akaike's Information Criterion10.40962
Schwarz's Bayesian Criterion-129.23102
Tucker and Lewis's Reliability Coefficient0.89361


Output 10.5.49: Canonical Correlations

Factor1Factor2
0.948490330.85059176


The final weighted reduced correlation matrix is formed by placing the final communalities on the diagonal of the data correlation matrix. The eigenvalues of this final correlation matrix are shown in the "Eigenvalues of the Weighted Reduced Correlation Matrix" table in Output 10.5.50.

Output 10.5.50: Final Eigenvalues

Factor1Factor2
0.948490330.85059176


The factor pattern that corresponds to these communalities is shown in Output 10.5.51. The missing values indicate that the absolute value of the corresponding element in the pattern does not exceed 0.4, as specified by the fuzz parameter. The variance explained by the extracted factors is summarized in Output 10.5.52, and the final communality estimates are shown in Output 10.5.53.

Output 10.5.51: Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Integrity0.80231.0.80231-0.20307
Interest in People0.80035-0.402830.80035-0.40283
Dependability0.79336.0.793360.09671
Interpersonal Sensitivity0.75439-0.504070.75439-0.50407
Judgment under Pressure0.74785.0.74785-0.07232
Communication Skills0.72073.0.720730.19449
Desire for Self-Improvement0.70799.0.707990.26130
Problem Solving0.64047.0.640470.17854
Observational Skills0.611180.586870.611180.58687
Learning Ability0.575320.453340.575320.45334
Appearance0.51787.0.517870.27648
Physical Ability0.48446.0.484460.19623
Willingness to Confront Problems0.571560.597560.571560.59756


Output 10.5.52: Variance Explained (Initial Solution)

FactorWeightedUnweightedSolution
Factor118.4138326.007072Initial
Factor25.6930711.632118Initial


Output 10.5.53: Final Communalities (Initial Solution)

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Initial
Problem Solving0.442071531.79275764Initial
Learning Ability0.536504472.15791760Initial
Judgment under Pressure0.564503492.29653380Initial
Observational Skills0.717958683.54514379Initial
Willingness to Confront Problems0.683752203.16130592Initial
Interest in People0.802830895.07138167Initial
Interpersonal Sensitivity0.823191435.65640994Initial
Desire for Self-Improvement0.569535392.32303202Initial
Appearance0.344633111.52589948Initial
Dependability0.638773792.76805050Initial
Physical Ability0.273209061.37572027Initial
Integrity0.684945683.17353979Initial


To facilitate the interpretation of the factor solution, it is often helpful to rotate the initial factor pattern. For the current analysis, a factor rotation by the quartimin method was specified. This is an oblique rotation, so the rotated factors are likely to be correlated. The oblique transformation matrix (that is, the matrix that maps the initial factor pattern into the rotated factor pattern) is shown in Output 10.5.54, as is the "Interfactor Correlations" table, which summarizes the correlations between the rotated factors. For this analysis, the two factors are moderately correlated with each other.

Output 10.5.54: Oblique Transformation Matrix

RowLabel12
10.509330.64767
21.02518-0.94389

RowNameFactor1Factor2
Factor11.000000.48670
Factor20.486701.00000


The rotated factor pattern is shown in Output 10.5.55. Again, the fuzz parameter causes factor loadings whose absolute values are less than 0.4 to be printed as missing. Such smaller factor loadings are not considered to be salient, and printing the values as missing makes it easier to distinguish the relationships between the analysis variables and the computed factors. In the rotated factor pattern, almost all variables load primarily on one factor (the Dependability variable is the exception). The factor pattern can be interpreted as the standardized regression coefficients for predicting the effects of the factors on the variables.

Output 10.5.55: Rotated Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.91294.0.91294-0.15810
Willingness to Confront Problems0.90372.0.90372-0.19385
Learning Ability0.75778.0.75778-0.05528
Desire for Self-Improvement0.62848.0.628480.21191
Communication Skills0.56648.0.566480.28322
Appearance0.54721.0.547210.07444
Problem Solving0.50924.0.509240.24629
Dependability0.503230.422550.503230.42255
Physical Ability0.44792.0.447920.12855
Interpersonal Sensitivity.0.96438-0.132530.96438
Interest in People.0.89859-0.005330.89859
Integrity.0.711310.200460.71131
Judgment under Pressure.0.552620.306760.55262


The factor structure is shown in Output 10.5.56. The factor structure represents the correlation between the factors and the variables. This can be an important aid for interpretation when factors are correlated, as in the current example.

Output 10.5.56: Factor Structure

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.83599.0.835990.28623
Willingness to Confront Problems0.80937.0.809370.24599
Learning Ability0.73087.0.730870.31353
Desire for Self-Improvement0.731620.517790.731620.51779
Communication Skills0.704320.558930.704320.55893
Appearance0.58344.0.583440.34077
Problem Solving0.629110.494140.629110.49414
Dependability0.708890.667470.708890.66747
Physical Ability0.51049.0.510490.34655
Interpersonal Sensitivity.0.899880.336840.89988
Interest in People0.432020.896000.432020.89600
Integrity0.546660.808880.546660.80888
Judgment under Pressure0.575720.701920.575720.70192


When factors are correlated, the common variance explained by each factor is not as straightforward as it is in the case when the factors are uncorrelated. The contributions from the other factors must be either eliminated or ignored. Both computations are shown in Output 10.5.57.

Output 10.5.57: Variance Explained

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated


Finally, the final communality estimates for the rotated solution are shown in Output 10.5.58.

Output 10.5.58: Variance Explained

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Rotated
Problem Solving0.442071531.79275764Rotated
Learning Ability0.536504472.15791760Rotated
Judgment under Pressure0.564503492.29653380Rotated
Observational Skills0.717958683.54514379Rotated
Willingness to Confront Problems0.683752203.16130592Rotated
Interest in People0.802830895.07138167Rotated
Interpersonal Sensitivity0.823191435.65640994Rotated
Desire for Self-Improvement0.569535392.32303202Rotated
Appearance0.344633111.52589948Rotated
Dependability0.638773792.76805050Rotated
Physical Ability0.273209061.37572027Rotated
Integrity0.684945683.17353979Rotated


To fully investigate the possibility that three factors rather than just two should be extracted, you can repeat the preceding analysis and change only the number of factors. The following code requests such an analysis:

s.factoranalysis.faextract(
    fuzz='0.4',
    method=dict(name='ml'),
    nFactors=[3],
    reorder='true',
    rotate=dict(type='quartimin'),
    table='jobratings')

Much of the initial analysis is the same as when two factors are extracted. First, the prior communalities are computed and used to form the reduced correlation matrix. This reduced correlation matrix is the input for an iterative process in which the final communalities and the initial factor pattern are computed.

Output 10.5.59 shows the tests of significance and measures of fit tables when three factors are extracted from the jobratings data set. You can see that Akaike’s information criterion obtains a lower value for the three-factor model when you compare it to the two-factor model. On the other hand, Schwarz’s Bayesian criterion obtains a lower value for the two-factor model. Thus there is still ambiguity regarding the number of factors that should be estimated from the data.

Output 10.5.59: Significance Tests and Measures of Fit (Three-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 3 Factors are sufficient4263.39310.0181
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction68.18380
Akaike's Information Criterion-15.81620
Schwarz's Bayesian Criterion-126.47482
Tucker and Lewis's Reliability Coefficient0.94870


The initial factor pattern for the three-factor solution is shown in Output 10.5.60. As before, the quartimin rotation is applied to this initial factor pattern. The "Oblique Transformation Matrix" and the "Interfactor Correlations" are shown in Output 10.5.61. For the three-factor solution, the first and third factors are moderately correlated with each other.

Output 10.5.60: Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Integrity0.79639..0.79639-0.229070.21566
Interest in People0.79293-0.42170.0.79293-0.421700.10935
Dependability0.78828..0.788280.078510.19271
Judgment under Pressure0.76129..0.76129-0.06798-0.21935
Interpersonal Sensitivity0.75185-0.50923.0.75185-0.50923-0.08691
Communication Skills0.73337..0.733370.20269-0.19613
Desire for Self-Improvement0.70353..0.703530.243400.19459
Problem Solving0.67936.-0.487580.679360.21704-0.48758
Observational Skills0.610880.57367.0.610880.573670.19250
Learning Ability0.589350.46440.0.589350.46440-0.13545
Appearance0.51770..0.517700.266110.09903
Physical Ability0.48145..0.481450.177830.21914
Willingness to Confront Problems0.575380.58409.0.575380.584090.06884


Output 10.5.61: Oblique Transformation Matrix

RowLabel123
10.419090.580670.27177
20.82170-0.920040.17477
30.798670.17078-1.14008

RowNameFactor1Factor2Factor3
Factor11.000000.395100.52069
Factor20.395101.000000.32454
Factor30.520690.324541.00000


The rotated factor pattern is shown in Output 10.5.62. This factor pattern is qualitatively similar to the rotated factor pattern for the two-factor solution. Each factor explains a subset of the analysis variables, and each analysis variable loads primarily on one or two of the common factors.

Output 10.5.62: Rotated Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Observational Skills0.88114..0.88114-0.140200.04681
Willingness to Confront Problems0.77606..0.77606-0.191520.17997
Desire for Self-Improvement0.65025..0.650250.217810.01189
Dependability0.548780.41841.0.548780.418410.00825
Physical Ability0.52291..0.522910.15338-0.08792
Learning Ability0.52041..0.52041-0.108190.39575
Appearance0.51472..0.514720.072690.07430
Interpersonal Sensitivity.0.89025.-0.172760.890250.21442
Interest in People.0.86708.0.073130.867080.01713
Integrity.0.71002.0.317770.71002-0.06947
Judgment under Pressure.0.467140.445090.088000.467140.44509
Problem Solving..0.778440.073640.111530.77844
Communication Skills..0.458340.317250.205870.45834


Finally, the common variance explained by the factors is summarized in the tables in Output 10.5.57.

Output 10.5.63: Variance Explained

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated


In this example, even after extracting and rotating a two-factor model and a three-factor model, there remains some ambiguity about which solution should be preferred. In this case, the decision might be justified by determining which solution is easier to interpret or is more consistent with existing theory or future experiments. You should also consider the possibility that the common factor model is not appropriate for the current data. In that case, you might consider a more complex model, such as a structural equation model.

Extracting and Interpreting Solutions in Exploratory Factor Analysis

This section contains R code that creates the same jobratings table and performs the same analysis as shown in the CASL version of this example. For more information about coding in R, see Getting Started with SAS Viya for R and SAS Viya: System Programming Guide.

Because this example uses simulated data that are produced from DATA step code, you can submit the runCode action on your R client to create the simulated data in your CAS session.

This example uses the jobratings data set that is described in the examples for the FACTOR procedure in SAS/STAT software. These are the same data that are described and analyzed in Example 10.2: Using Multiple Criteria to Determine the Number of Factors.

To run this example code, you must make the jobratings data accessible to the CAS server. One way to do this is to convert the jobratings data set from the PROC FACTOR documentation to a comma-separated-value (CSV) file and then load the CSV file into CAS.

In Example 10.2, the jobratings data set is analyzed to determine the number of latent factors that are likely to explain the available ratings data. The results of that analysis indicate that two or three factors are likely to explain the observed covariance among the variables. In this example, the faExtract action is used to extract and rotate a factor pattern that has either two or three common factors.

First, you can use the following code to extract and rotate a factor pattern that has two factors:

m <- cas.builtins.loadActionSet(s, actionset='factorAnalysis')
cas.factorAnalysis.faExtract(s,
    fuzz='0.4',
    method=list(name='ml'),
    nFactors=c(2),
    reorder='true',
    rotate=list(type='quartimin'),
    table='jobratings')

When you use the faExtract action, you must specify values for the table and nFactors parameters. You specify the input data table to use for the analysis in the table parameter. You use the nFactors parameter to specify the number of factors to extract in the analysis. In this example, you use the method parameter to request maximum likelihood factor analysis. The factors that are initially extracted by the maximum likelihood method are orthogonal. To facilitate the interpretation of these factors, you use the rotate parameter to request factor rotation by the quartimin method. This is an oblique rotation, so the rotated factors might not be orthogonal. Finally, you specify the reorder and fuzz parameters to further facilitate the interpretation of the factor solution. The reorder parameter orders the rows of the various factor matrices such that variables whose highest absolute loading is on the first factor are displayed first, followed by variables whose highest absolute loading is on the second factor, and so on. The fuzz parameter causes all factor loadings less than 0.4 in magnitude to be printed as missing.

The first outputs that the faExtract action prints are the "Model Information" table and a table that summarizes the number of observations in the input data table. These are shown in Output 10.5.64. Together, these tables summarize important information about the input data that are analyzed as well as the primary analysis parameters that you specified. Next, the "Simple Statistics" table in Output 10.5.65 summarizes the means and standard deviations of the analysis variables.

Output 10.5.64: Model Information and Number of Observations

RowIdDescriptioncValueValue
TABLEData SourceJOBRATINGS.
TYPEData TypeRaw.
PRIORSPrior CommunalitiesSquared Multiple Correlations.
EXTRACTFactor ExtractionMaximum Likelihood Method.
ROTATEFactor RotationQuartimin.

RowIdDescriptionValue
NREADNumber of Observations Read103
NUSEDNumber of Observations Used103


Output 10.5.65: Simple Statistics

VariableMeanStdDev
Communication Skills6.650491.76407
Problem Solving6.631071.59035
Learning Ability6.990291.33941
Judgment under Pressure6.737861.73183
Observational Skills6.932041.76158
Willingness to Confront Problems7.291261.52516
Interest in People6.708741.89235
Interpersonal Sensitivity6.621361.76077
Desire for Self-Improvement6.572821.72980
Appearance7.000001.79869
Dependability6.825241.91704
Physical Ability7.203881.55525
Integrity7.213591.84524


Prior communality estimates are shown in the "Prior Communality Estimates" table in Output 10.5.66. For this analysis, the prior communalities are the squared multiple correlations of each analysis variable with the other variables. This is the default setting in the faExtract action. You can use the priors parameter to change this default.

Output 10.5.66: Prior Communalities

Communication SkillsProblem SolvingLearning AbilityJudgment under
Pressure
Observational SkillsWillingness to
Confront Problems
Interest in PeopleInterpersonal SensitivityDesire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
0.629813940.586574310.610098710.637660210.671875830.647798050.756415190.755848910.574601760.455053040.634490450.422453240.68195454


The prior communalities represent initial estimates of the common variance for each analysis variable. (For more information about communalities and common variance, see the section The Common Factor Model.) The prior communalities are used to compute the reduced correlation matrix.

Next, the eigenvalues of the reduced correlation matrix are computed. In fact, for maximum likelihood factor analysis, the eigenvalues of the weighted reduced correlation matrix are computed. The weights that are used are the reciprocals of the unique error variances (that is, one minus the communalities). These eigenvalues are summarized in the "Preliminary Eigenvalues" table in Output 10.5.67. This table suggests that two factors are sufficient to explain approximately 96.6% of the common variance in the original data, whereas three factors are required so that the cumulative variance explained exceeds 1.0. For a more detailed investigation of the tools that you can use to investigate the number of factors in the jobratings data set, see Example 10.2.

Output 10.5.67: Preliminary Eigenvalues

NumberEigenvalueDifferenceProportionCumulative
117.71272212.8781270.75920.7592
24.8345953.4559870.20720.9664
31.3786080.7399740.05911.0255
40.6386340.0969880.02741.0529
50.5416460.3557710.02321.0761
60.1858750.1973060.00801.0841
7-0.0114310.109243-0.00051.0836
8-0.1206740.119664-0.00521.0784
9-0.2403380.063988-0.01031.0681
10-0.3043260.056731-0.01301.0551
11-0.3610570.029331-0.01551.0396
12-0.3903890.143296-0.01671.0229
13-0.533685_-0.02291.0000


Maximum likelihood factor analysis is an iterative procedure in which the prior communality estimates are used to compute the reduced the correlation matrix, then common factors are extracted from the reduced correlation matrix, and then those common factors are used to compute updated communalities. This process is repeated until the communalities converge. A summary of this iterative process is shown in Output 10.5.68.

Output 10.5.68: Iteration History

IterationCriterionRidgeChangeCommunication
Skills
Problem SolvingLearning AbilityJudgment under
Pressure
Observational
Skills
Willingness
to Confront
Problems
Interest in
People
Interpersonal
Sensitivity
Desire for Self-ImprovementAppearanceDependabilityPhysical AbilityIntegrity
11.14327500.00000.16240.567310.458390.548230.569270.699720.677800.803410.827300.564930.346890.633500.260050.68041
21.14136090.00000.01620.559650.445710.539170.566060.715910.680630.802060.824310.569100.345560.637590.271060.68382
31.14127550.00000.00300.557780.442680.537300.564800.717390.683360.802610.823510.569540.344640.638590.272630.68463
41.14127080.00000.00070.557370.442200.536590.564560.717920.683680.802820.823210.569530.344650.638730.273110.68489


The faExtract action computes several significance tests and measures of fit when you specify a maximum likelihood factor analysis. These are shown in Output 10.5.69.

Output 10.5.69: Significance Tests and Measures of Fit (Two-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 2 Factors are sufficient53108.9914<.0001
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction116.40962
Akaike's Information Criterion10.40962
Schwarz's Bayesian Criterion-129.23102
Tucker and Lewis's Reliability Coefficient0.89361


Output 10.5.70: Canonical Correlations

Factor1Factor2
0.948490330.85059176


The final weighted reduced correlation matrix is formed by placing the final communalities on the diagonal of the data correlation matrix. The eigenvalues of this final correlation matrix are shown in the "Eigenvalues of the Weighted Reduced Correlation Matrix" table in Output 10.5.71.

Output 10.5.71: Final Eigenvalues

Factor1Factor2
0.948490330.85059176


The factor pattern that corresponds to these communalities is shown in Output 10.5.72. The missing values indicate that the absolute value of the corresponding element in the pattern does not exceed 0.4, as specified by the fuzz parameter. The variance explained by the extracted factors is summarized in Output 10.5.73, and the final communality estimates are shown in Output 10.5.74.

Output 10.5.72: Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Integrity0.80231.0.80231-0.20307
Interest in People0.80035-0.402830.80035-0.40283
Dependability0.79336.0.793360.09671
Interpersonal Sensitivity0.75439-0.504070.75439-0.50407
Judgment under Pressure0.74785.0.74785-0.07232
Communication Skills0.72073.0.720730.19449
Desire for Self-Improvement0.70799.0.707990.26130
Problem Solving0.64047.0.640470.17854
Observational Skills0.611180.586870.611180.58687
Learning Ability0.575320.453340.575320.45334
Appearance0.51787.0.517870.27648
Physical Ability0.48446.0.484460.19623
Willingness to Confront Problems0.571560.597560.571560.59756


Output 10.5.73: Variance Explained (Initial Solution)

FactorWeightedUnweightedSolution
Factor118.4138326.007072Initial
Factor25.6930711.632118Initial


Output 10.5.74: Final Communalities (Initial Solution)

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Initial
Problem Solving0.442071531.79275764Initial
Learning Ability0.536504472.15791760Initial
Judgment under Pressure0.564503492.29653380Initial
Observational Skills0.717958683.54514379Initial
Willingness to Confront Problems0.683752203.16130592Initial
Interest in People0.802830895.07138167Initial
Interpersonal Sensitivity0.823191435.65640994Initial
Desire for Self-Improvement0.569535392.32303202Initial
Appearance0.344633111.52589948Initial
Dependability0.638773792.76805050Initial
Physical Ability0.273209061.37572027Initial
Integrity0.684945683.17353979Initial


To facilitate the interpretation of the factor solution, it is often helpful to rotate the initial factor pattern. For the current analysis, a factor rotation by the quartimin method was specified. This is an oblique rotation, so the rotated factors are likely to be correlated. The oblique transformation matrix (that is, the matrix that maps the initial factor pattern into the rotated factor pattern) is shown in Output 10.5.75, as is the "Interfactor Correlations" table, which summarizes the correlations between the rotated factors. For this analysis, the two factors are moderately correlated with each other.

Output 10.5.75: Oblique Transformation Matrix

RowLabel12
10.509330.64767
21.02518-0.94389

RowNameFactor1Factor2
Factor11.000000.48670
Factor20.486701.00000


The rotated factor pattern is shown in Output 10.5.76. Again, the fuzz parameter causes factor loadings whose absolute values are less than 0.4 to be printed as missing. Such smaller factor loadings are not considered to be salient, and printing the values as missing makes it easier to distinguish the relationships between the analysis variables and the computed factors. In the rotated factor pattern, almost all variables load primarily on one factor (the Dependability variable is the exception). The factor pattern can be interpreted as the standardized regression coefficients for predicting the effects of the factors on the variables.

Output 10.5.76: Rotated Factor Pattern

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.91294.0.91294-0.15810
Willingness to Confront Problems0.90372.0.90372-0.19385
Learning Ability0.75778.0.75778-0.05528
Desire for Self-Improvement0.62848.0.628480.21191
Communication Skills0.56648.0.566480.28322
Appearance0.54721.0.547210.07444
Problem Solving0.50924.0.509240.24629
Dependability0.503230.422550.503230.42255
Physical Ability0.44792.0.447920.12855
Interpersonal Sensitivity.0.96438-0.132530.96438
Interest in People.0.89859-0.005330.89859
Integrity.0.711310.200460.71131
Judgment under Pressure.0.552620.306760.55262


The factor structure is shown in Output 10.5.77. The factor structure represents the correlation between the factors and the variables. This can be an important aid for interpretation when factors are correlated, as in the current example.

Output 10.5.77: Factor Structure

VariableFzFactor1FzFactor2Factor1Factor2
Observational Skills0.83599.0.835990.28623
Willingness to Confront Problems0.80937.0.809370.24599
Learning Ability0.73087.0.730870.31353
Desire for Self-Improvement0.731620.517790.731620.51779
Communication Skills0.704320.558930.704320.55893
Appearance0.58344.0.583440.34077
Problem Solving0.629110.494140.629110.49414
Dependability0.708890.667470.708890.66747
Physical Ability0.51049.0.510490.34655
Interpersonal Sensitivity.0.899880.336840.89988
Interest in People0.432020.896000.432020.89600
Integrity0.546660.808880.546660.80888
Judgment under Pressure0.575720.701920.575720.70192


When factors are correlated, the common variance explained by each factor is not as straightforward as it is in the case when the factors are uncorrelated. The contributions from the other factors must be either eliminated or ignored. Both computations are shown in Output 10.5.78.

Output 10.5.78: Variance Explained

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated

FactorWeightedUnweightedSolution
Factor114.3417505.349164Rotated
Factor215.8955794.506741Rotated


Finally, the final communality estimates for the rotated solution are shown in Output 10.5.79.

Output 10.5.79: Variance Explained

VariableCommunalityWeightSolution
Communication Skills0.557279592.25920908Rotated
Problem Solving0.442071531.79275764Rotated
Learning Ability0.536504472.15791760Rotated
Judgment under Pressure0.564503492.29653380Rotated
Observational Skills0.717958683.54514379Rotated
Willingness to Confront Problems0.683752203.16130592Rotated
Interest in People0.802830895.07138167Rotated
Interpersonal Sensitivity0.823191435.65640994Rotated
Desire for Self-Improvement0.569535392.32303202Rotated
Appearance0.344633111.52589948Rotated
Dependability0.638773792.76805050Rotated
Physical Ability0.273209061.37572027Rotated
Integrity0.684945683.17353979Rotated


To fully investigate the possibility that three factors rather than just two should be extracted, you can repeat the preceding analysis and change only the number of factors. The following code requests such an analysis:

cas.factorAnalysis.faExtract(s,
    fuzz='0.4',
    method=list(name='ml'),
    nFactors=c(3),
    reorder='true',
    rotate=list(type='quartimin'),
    table='jobratings')

Much of the initial analysis is the same as when two factors are extracted. First, the prior communalities are computed and used to form the reduced correlation matrix. This reduced correlation matrix is the input for an iterative process in which the final communalities and the initial factor pattern are computed.

Output 10.5.80 shows the tests of significance and measures of fit tables when three factors are extracted from the jobratings data set. You can see that Akaike’s information criterion obtains a lower value for the three-factor model when you compare it to the two-factor model. On the other hand, Schwarz’s Bayesian criterion obtains a lower value for the two-factor model. Thus there is still ambiguity regarding the number of factors that should be estimated from the data.

Output 10.5.80: Significance Tests and Measures of Fit (Three-Factor Model)

TestDFChiSqProbChiSq
H0: No common factors78852.5129<.0001
HA: At least one common factor___
H0: 3 Factors are sufficient4263.39310.0181
HA: More factors are needed___

DescriptionValue
Chi-Square without Bartlett's Correction68.18380
Akaike's Information Criterion-15.81620
Schwarz's Bayesian Criterion-126.47482
Tucker and Lewis's Reliability Coefficient0.94870


The initial factor pattern for the three-factor solution is shown in Output 10.5.81. As before, the quartimin rotation is applied to this initial factor pattern. The "Oblique Transformation Matrix" and the "Interfactor Correlations" are shown in Output 10.5.82. For the three-factor solution, the first and third factors are moderately correlated with each other.

Output 10.5.81: Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Integrity0.79639..0.79639-0.229070.21566
Interest in People0.79293-0.42170.0.79293-0.421700.10935
Dependability0.78828..0.788280.078510.19271
Judgment under Pressure0.76129..0.76129-0.06798-0.21935
Interpersonal Sensitivity0.75185-0.50923.0.75185-0.50923-0.08691
Communication Skills0.73337..0.733370.20269-0.19613
Desire for Self-Improvement0.70353..0.703530.243400.19459
Problem Solving0.67936.-0.487580.679360.21704-0.48758
Observational Skills0.610880.57367.0.610880.573670.19250
Learning Ability0.589350.46440.0.589350.46440-0.13545
Appearance0.51770..0.517700.266110.09903
Physical Ability0.48145..0.481450.177830.21914
Willingness to Confront Problems0.575380.58409.0.575380.584090.06884


Output 10.5.82: Oblique Transformation Matrix

RowLabel123
10.419090.580670.27177
20.82170-0.920040.17477
30.798670.17078-1.14008

RowNameFactor1Factor2Factor3
Factor11.000000.395100.52069
Factor20.395101.000000.32454
Factor30.520690.324541.00000


The rotated factor pattern is shown in Output 10.5.83. This factor pattern is qualitatively similar to the rotated factor pattern for the two-factor solution. Each factor explains a subset of the analysis variables, and each analysis variable loads primarily on one or two of the common factors.

Output 10.5.83: Rotated Factor Pattern

VariableFzFactor1FzFactor2FzFactor3Factor1Factor2Factor3
Observational Skills0.88114..0.88114-0.140200.04681
Willingness to Confront Problems0.77606..0.77606-0.191520.17997
Desire for Self-Improvement0.65025..0.650250.217810.01189
Dependability0.548780.41841.0.548780.418410.00825
Physical Ability0.52291..0.522910.15338-0.08792
Learning Ability0.52041..0.52041-0.108190.39575
Appearance0.51472..0.514720.072690.07430
Interpersonal Sensitivity.0.89025.-0.172760.890250.21442
Interest in People.0.86708.0.073130.867080.01713
Integrity.0.71002.0.317770.71002-0.06947
Judgment under Pressure.0.467140.445090.088000.467140.44509
Problem Solving..0.778440.073640.111530.77844
Communication Skills..0.458340.317250.205870.45834


Finally, the common variance explained by the factors is summarized in the tables in Output 10.5.78.

Output 10.5.84: Variance Explained

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated

FactorWeightedUnweightedSolution
Factor115.1844885.030941Rotated
Factor216.5195404.038321Rotated
Factor311.1573553.441515Rotated


In this example, even after extracting and rotating a two-factor model and a three-factor model, there remains some ambiguity about which solution should be preferred. In this case, the decision might be justified by determining which solution is easier to interpret or is more consistent with existing theory or future experiments. You should also consider the possibility that the common factor model is not appropriate for the current data. In that case, you might consider a more complex model, such as a structural equation model.

Last updated: May 21, 2026