В этом примере показано, как выполнять факторный анализ с использованием Toolbox™ статистики и машинного обучения.
Многомерные данные часто включают большое количество измеряемых переменных, и иногда эти переменные «перекрываются» в том смысле, что группы из них могут быть зависимыми. Например, в десятиборье каждый спортсмен соревнуется в 10 мероприятиях, но несколько из них можно рассматривать как события «скорости», а другие - как события «силы» и т. д. Таким образом, 10 баллов конкурента могут рассматриваться как в значительной степени зависящие от меньшего набора из 3 или 4 типов спортивных способностей.
Факторный анализ - это способ подгонки модели к многомерным данным для оценки именно такого рода взаимозависимости.
В модели факторного анализа измеренные переменные зависят от меньшего числа ненаблюдаемых (скрытых) факторов. Поскольку каждый фактор может влиять на несколько общих переменных, они известны как «общие факторы». Предполагается, что каждая переменная зависит от линейной комбинации общих факторов, а коэффициенты известны как нагрузки. Каждая измеренная переменная также включает в себя компонент, обусловленный независимой случайной изменчивостью, известной как «специфическая дисперсия», поскольку она специфична для одной переменной.
В частности, факторный анализ предполагает, что ковариационная матрица данных имеет форму
SigmaX = Lambda*Lambda' + Psi
где Лямбда - матрица нагрузок, а элементы диагональной матрицы Psi - специфические дисперсии. Функция factoran подходит для модели факторного анализа с использованием максимального правдоподобия.
120 учащихся сдали по пять экзаменов, первые два - по математике, следующие два - по литературе и комплексный пятый экзамен. Представляется разумным, что пять оценок для данного ученика должны быть связаны. Некоторые студенты хороши в обоих предметах, некоторые хороши только в одном и т.д. Цель этого анализа состоит в том, чтобы определить, имеются ли количественные доказательства того, что оценки учащихся на пяти различных экзаменах в значительной степени определяются только двумя типами способностей.
Сначала загрузите данные, а затем вызовите factoran и запросить модель, соответствующую единому общему фактору.
load examgrades
[Loadings1,specVar1,T,stats] = factoran(grades,1);
factoranПервыми двумя аргументами возврата являются расчетные нагрузки и расчетные конкретные отклонения. Из расчетных нагрузок видно, что один общий фактор в этой модели придает большой положительный вес всем пяти переменным, но больше всего вес пятому, комплексному экзамену.
Loadings1
Loadings1 =
0.6021
0.6686
0.7704
0.7204
0.9153
Одна из интерпретаций этого соответствия заключается в том, что о студенте можно думать с точки зрения его «общей способности», для которой комплексный экзамен будет наилучшим доступным измерением. Оценка ученика по более предметному тесту будет зависеть от его общей способности, а также от того, был ли ученик сильным в этой области. Это объясняет более низкие нагрузки для первых четырех экзаменов.
Из расчетных конкретных отклонений можно видеть, что модель указывает на то, что оценка конкретного ученика по определенному тесту значительно отличается от вариации из-за общего фактора.
specVar1
specVar1 =
0.6375
0.5530
0.4065
0.4810
0.1623
Конкретная дисперсия 1 указывает, что в этой переменной нет общей факторной составляющей, в то время как конкретная дисперсия 0 указывает, что переменная полностью определяется общими факторами. Эти оценки ЕГЭ, кажется, где-то между ними, хотя есть наименьшее количество конкретных вариаций для комплексного экзамена. Это соответствует приведенной выше интерпретации единого общего фактора в этой модели.
Значение p, возвращенное в stats структура отвергает нулевую гипотезу одного общего фактора, поэтому мы переформулируем модель.
stats.p
ans =
0.0332
Затем используйте два общих фактора, чтобы попытаться лучше объяснить результаты экзамена. С более чем одним фактором, вы можете вращать предполагаемые нагрузки, чтобы попытаться сделать их интерпретацию проще, но на данный момент, попросите невращенное решение.
[Loadings2,specVar2,T,stats] = factoran(grades,2,'rotate','none');
Из расчетных нагрузок видно, что первый невращаемый фактор придает примерно одинаковый вес всем пяти переменным, в то время как второй фактор контрастирует первые две переменные со вторыми двумя.
Loadings2
Loadings2 =
0.6289 0.3485
0.6992 0.3287
0.7785 -0.2069
0.7246 -0.2070
0.8963 -0.0473
Вы можете интерпретировать эти факторы как «общую способность» и «количественную или качественную способность», расширяя интерпретацию однофакторной подгонки, сделанную ранее.
График переменных, где каждая нагрузка является координатой вдоль оси соответствующего фактора, графически иллюстрирует эту интерпретацию. Первые два экзамена имеют положительную нагрузку на второй фактор, предполагая, что они зависят от «количественных» способностей, тогда как вторые два экзамена, видимо, зависят от обратного. Пятый экзамен имеет лишь небольшую нагрузку на этот второй фактор.
biplot(Loadings2, 'varlabels',num2str((1:5)')); title('Unrotated Solution'); xlabel('Latent Factor 1'); ylabel('Latent Factor 2');

Из расчетных конкретных отклонений можно видеть, что эта двухфакторная модель показывает несколько меньшую вариацию за пределами, обусловленную общими факторами, чем однофакторная модель. Опять же, наименьшая величина специфической дисперсии возникает для пятого экзамена.
specVar2
specVar2 =
0.4829
0.4031
0.3512
0.4321
0.1944
stats структура показывает, что в этой двухфакторной модели существует только одна степень свободы.
stats.dfe
ans =
1
При использовании только пяти измеренных переменных модель не может соответствовать двум факторам.
Вы сделали посадки выше, используя необработанные баллы теста, но иногда у вас может быть только образец ковариационной матрицы, которая суммирует ваши данные. factoran принимает либо ковариационную, либо корреляционную матрицу, используя 'Xtype' и дает результат, идентичный результату из необработанных данных.
Sigma = cov(grades); [LoadingsCov,specVarCov] = ... factoran(Sigma,2,'Xtype','cov','rotate','none'); LoadingsCov
LoadingsCov =
0.6289 0.3485
0.6992 0.3287
0.7785 -0.2069
0.7246 -0.2070
0.8963 -0.0473
Иногда расчетные нагрузки из модели анализа факторов могут дать большой вес нескольким факторам для некоторых измеряемых переменных, что затрудняет интерпретацию того, что представляют собой эти факторы. Цель вращения фактора состоит в том, чтобы найти решение, для которого каждая переменная имеет только небольшое число больших нагрузок, то есть на нее влияет небольшое количество факторов, предпочтительно только один.
Если считать каждую строку матрицы нагрузок координатами точки в M-мерном пространстве, то каждый коэффициент соответствует координатной оси. Поворот коэффициента эквивалентен повороту этих осей и вычислению новых нагрузок в повернутой системе координат. Есть различные способы сделать это. Некоторые методы оставляют оси ортогональными, в то время как другие являются наклонными методами, которые меняют углы между ними.
Варимакс является одним из общих критериев ортогонального вращения. factoran выполняет поворот varimax по умолчанию, поэтому нет необходимости запрашивать его явным образом.
[LoadingsVM,specVarVM,rotationVM] = factoran(grades,2);
Быстрая проверка матрицы вращения varimax, возвращенной factoran подтверждает, что он ортогональен. Варимакс, по сути, вращает факторные оси на рисунке выше, но держит их под прямым углом.
rotationVM'*rotationVM
ans =
1.0000 0.0000
0.0000 1.0000
Биплот из пяти переменных на повернутых факторах показывает влияние вращения варимакса.
biplot(LoadingsVM, 'varlabels',num2str((1:5)')); title('Varimax Solution'); xlabel('Latent Factor 1'); ylabel('Latent Factor 2');

Варимакс жестко повернул оси в попытке сделать все нагрузки близкими к нулю или единице. Первые два экзамена наиболее близки ко второй факторной оси, в то время как третий и четвертый наиболее близки к первой оси и пятый экзамен находится в промежуточном положении. Эти два повернутых фактора, вероятно, лучше всего интерпретировать как «количественную способность» и «качественную способность». Однако, поскольку ни одна из переменных не находится вблизи оси коэффициента, биплот показывает, что ортогональное вращение не удалось обеспечить простой набор факторов.
Поскольку ортогональное вращение было не совсем удовлетворительным, можно попробовать использовать promax, общий критерий наклонного вращения.
[LoadingsPM,specVarPM,rotationPM] = ... factoran(grades,2,'rotate','promax');
Проверка матрицы ротации промакса, возвращенной factoran показывает, что он не является ортогональным. Promax, по сути, поворачивает факторные оси на первом рисунке отдельно, позволяя им иметь наклонный угол между ними.
rotationPM'*rotationPM
ans =
1.9405 -1.3509
-1.3509 1.9405
Биплот переменных на новых повернутых факторах показывает влияние вращения промакса.
biplot(LoadingsPM, 'varlabels',num2str((1:5)')); title('Promax Solution'); xlabel('Latent Factor 1'); ylabel('Latent Factor 2');

Promax выполнил нежесткое вращение осей, и проделал гораздо лучшую работу, чем varimax по созданию «простой структуры». Первые два экзамена близки ко второй факторной оси, в то время как третий и четвертый близки к первой оси, а пятый экзамен находится в промежуточном положении. Это делает более точной интерпретацию этих ротированных факторов как «количественной способности» и «качественной способности».
Вместо печати переменных на различных наборах повернутых осей можно наложить повернутые оси на неоповоротный биплот, чтобы получить лучшее представление о том, как связаны повернутые и неповоротные решения.
h1 = biplot(Loadings2, 'varlabels',num2str((1:5)')); xlabel('Latent Factor 1'); ylabel('Latent Factor 2'); hold on invRotVM = inv(rotationVM); h2 = line([-invRotVM(1,1) invRotVM(1,1) NaN -invRotVM(2,1) invRotVM(2,1)], ... [-invRotVM(1,2) invRotVM(1,2) NaN -invRotVM(2,2) invRotVM(2,2)],'Color',[1 0 0]); invRotPM = inv(rotationPM); h3 = line([-invRotPM(1,1) invRotPM(1,1) NaN -invRotPM(2,1) invRotPM(2,1)], ... [-invRotPM(1,2) invRotPM(1,2) NaN -invRotPM(2,2) invRotPM(2,2)],'Color',[0 1 0]); hold off axis square lgndHandles = [h1(1) h1(end) h2 h3]; lgndLabels = {'Variables','Unrotated Axes','Varimax Rotated Axes','Promax Rotated Axes'}; legend(lgndHandles, lgndLabels, 'location','northeast', 'fontname','arial narrow');

Иногда полезно иметь возможность классифицировать наблюдение на основе его факторных показателей. Например, если вы приняли двухфакторную модель и интерпретацию ротированных коэффициентов promax, вы можете предсказать, насколько хорошо студент будет делать на экзамене по математике в будущем.
Поскольку данные являются необработанными оценками экзамена, а не только их ковариационной матрицей, мы можем иметь factoran возвращать прогнозы значения каждого из двух повернутых общих факторов для каждого учащегося.
[Loadings,specVar,rotation,stats,preds] = ... factoran(grades,2,'rotate','promax','maxit',200); biplot(Loadings, 'varlabels',num2str((1:5)'), 'Scores',preds); title('Predicted Factor Scores for Promax Solution'); xlabel('Ability In Literature'); ylabel('Ability In Mathematics');

Этот график показывает соответствие модели в терминах как исходных переменных (векторов), так и прогнозируемых баллов для каждого наблюдения (точек). Подгонка говорит о том, что, хотя некоторые студенты хорошо справляются с одним предметом, но не с другим (второй и четвертый квадранты), большинство студентов либо хорошо, либо плохо справляются как с математикой, так и с литературой (первый и третий квадранты). Вы можете подтвердить это, посмотрев на оценочную корреляционную матрицу двух факторов.
inv(rotation'*rotation)
ans =
1.0000 0.6962
0.6962 1.0000
Существует значительное совпадение терминологии и целей между анализом основных компонентов (PCA) и анализом факторов (FA). Большая часть литературы по двум методам не различает их, и некоторые алгоритмы для подгонки модели FA включают PCA. Оба метода являются методами уменьшения размеров в том смысле, что они могут быть использованы для замены большого набора наблюдаемых переменных меньшим набором новых переменных. Они также часто дают схожие результаты. Однако эти два метода различаются по своим целям и базовым моделям. Грубо говоря, РСА следует использовать тогда, когда нужно просто суммировать или аппроксимировать данные, используя меньшее количество измерений (например, для их визуализации), а FA следует использовать, когда нужна объяснительная модель для корреляций между данными.