Выполните анализ фактора на экзаменационных оценках

В этом примере показов, как выполнить анализ фактора с помощью Statistics and Machine Learning Toolbox™.

Многомерные данные часто включают большое количество измеренных переменных, и иногда эти переменные «перекрываются» в том смысле, что группы из них могут быть зависимыми. Например, в десятиборье каждый спортсмен выступает в 10 видах, но несколько из них можно считать «скоростными» событиями, в то время как другие можно считать «сильными» событиями и т.д. Таким образом, 10 счета соревнований конкурента могут считаться в значительной степени зависимыми от меньшего набора из 3 или 4 типов спортивных способностей.

Факторный анализ является способом подгонки модели к многомерным данным для оценки только такого рода взаимозависимости.

Модель факторного анализа

В модели факторного анализа измеренные переменные зависят от меньшего числа ненаблюдаемых (латентных) факторов. Поскольку каждый фактор может влиять на несколько переменных в общем, они известны как «общие факторы». Каждая переменная определяется линейной комбинацией общих факторов, и коэффициенты известны как загрузок. Каждая измеренная переменная также включает компонент из-за независимой случайной изменчивости, известной как «специфическое отклонение», потому что она специфична для одной переменной.

В частности, факторный анализ принимает, что ковариационная матрица ваших данных имеет вид

  SigmaX = Lambda*Lambda' + Psi

где Lambda является матрицей загрузок, и элементами диагональной матрицы 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

The 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);

Быстрая проверка матрицы вращения варимакса, возвращенной 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');

Varimax жестко повернул оси в попытке приблизить все загрузки к нулю или единице. Первые два экзамена находятся ближе всего ко второй оси фактора, а третий и четвертый - ближе всего к первой оси, а пятый экзамен находится в промежуточном положении. Эти два вращенных фактора, вероятно, могут быть лучше всего интерпретированы как «количественная способность» и «качественная способность». Однако, поскольку ни одна из переменных не близка к оси фактора, биграфик показывает, что ортогональное вращение не преуспело в предоставлении простого набора факторов.

Поскольку ортогональное вращение было не совсем удовлетворительным, можно попробовать использовать 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');

Прогнозирующие счета фактора

Иногда полезно иметь возможность классифицировать наблюдение на основе его счетов. Например, если вы приняли двухфакторную модель и интерпретацию вращенных факторов промакса, вы, возможно, захотите предсказать, как хорошо студент будет делать на математическом экзамене в будущем.

Поскольку данные являются необработанными оценками экзамена, а не только их ковариационной матрицей, мы можем иметь 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. Оба являются методами уменьшения размерности в том смысле, что они могут использоваться, чтобы заменить большой набор наблюдаемых переменных на меньший набор новых переменных. Они также часто дают аналогичные результаты. Однако эти два метода различаются по своим целям и по базовым моделям. Грубо говоря, вы должны использовать PCA, когда вам просто нужно суммировать или аппроксимировать свои данные с помощью меньшего количества размерностей (чтобы визуализировать их, например), и вы должны использовать FA, когда вам нужна объяснительная модель для корреляций среди ваших данных.