This example illustrates the use of the FactorAnalysis class. The following data were originally analyzed by Emmett(1949). There are 211 observations on 9 variables. Following Lawley and Maxwell (1971), three factors will be obtained by the method of maximum likelihood.
import java.text.*;
import com.imsl.stat.*;
import com.imsl.math.PrintMatrix;
import com.imsl.math.PrintMatrixFormat;
public class FactorAnalysisEx2 {
public static void main(String args[]) throws Exception {
double[][] cov = {
{1.0, 0.523, 0.395, 0.471, 0.346, 0.426, 0.576, 0.434, 0.639},
{0.523, 1.0, 0.479, 0.506, 0.418, 0.462, 0.547, 0.283, 0.645},
{0.395, 0.479, 1.0, 0.355, 0.27, 0.254, 0.452, 0.219, 0.504},
{0.471, 0.506, 0.355, 1.0, 0.691, 0.791, 0.443, 0.285, 0.505},
{0.346, 0.418, 0.27, 0.691, 1.0, 0.679, 0.383, 0.149, 0.409},
{0.426, 0.462, 0.254, 0.791, 0.679, 1.0, 0.372, 0.314, 0.472},
{0.576, 0.547, 0.452, 0.443, 0.383, 0.372, 1.0, 0.385, 0.68},
{0.434, 0.283, 0.219, 0.285, 0.149, 0.314, 0.385, 1.0, 0.47},
{0.639, 0.645, 0.504, 0.505, 0.409, 0.472, 0.68, 0.47, 1.0}
};
FactorAnalysis fl =
new FactorAnalysis(cov, FactorAnalysis.VARIANCE_COVARIANCE_MATRIX, 3);
fl.setConvergenceCriterion1(.000001);
fl.setConvergenceCriterion2(.01);
fl.setFactorLoadingEstimationMethod(fl.MAXIMUM_LIKELIHOOD);
fl.setVarianceEstimationMethod(0);
fl.setMaxStep(10);
fl.setDegreesOfFreedom(210);
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(4);
PrintMatrixFormat pmf = new PrintMatrixFormat();
pmf.setNumberFormat(nf);
new PrintMatrix("Unique Error Variances").print
(pmf, fl.getVariances());
new PrintMatrix("Unrotated Factor Loadings").print
(pmf, fl.getFactorLoadings());
new PrintMatrix("Eigenvalues").print(pmf, fl.getValues());
new PrintMatrix("Statistics").print(pmf, fl.getStatistics());
}
}
Unique Error Variances
0
0 0.4505
1 0.4271
2 0.6166
3 0.2123
4 0.3805
5 0.1769
6 0.3995
7 0.4615
8 0.2309
Unrotated Factor Loadings
0 1 2
0 0.6642 -0.3209 0.0735
1 0.6888 -0.2471 -0.1933
2 0.4926 -0.3022 -0.2224
3 0.8372 0.2924 -0.0354
4 0.7050 0.3148 -0.1528
5 0.8187 0.3767 0.1045
6 0.6615 -0.3960 -0.0777
7 0.4579 -0.2955 0.4913
8 0.7657 -0.4274 -0.0117
Eigenvalues
0
0 0.0626
1 0.2295
2 0.5413
3 0.8650
4 0.8937
5 0.9736
6 1.0802
7 1.1172
8 1.1401
Statistics
0
0 0.0350
1 1.0000
2 7.1494
3 12.0000
4 0.8476
5 5.0000
Link to Java source.