factoran

Факторный анализ

Описание

factoran вычисляет максимальную оценку правдоподобия (MLE) матрицы загрузок в модели факторного анализа

x=μ+Λf+e

где x - вектор наблюдаемых переменных, μ - постоянный вектор средств, Λ - константа d-by- m матрица факторных загрузок, f является вектором независимых, стандартизированных общих факторов, а e является вектором независимых конкретных факторов. x, μ и e каждый имеет длину d. f имеет длину m.

Кроме того, модель факторного анализа может быть задана как

cov(x)=ΛΛT+Ψ

где Ψ=cov(e) является d-by- d диагональная матрица конкретных отклонений.

Для использования factoran и его отношение к pca, см. «Выполнение анализа фактора на экзаменационных оценках».

пример

lambda = factoran(X,m) возвращает матрицу загрузок lambda для матрицы данных X с m общие факторы.

пример

[lambda,psi] = factoran(X,m) также возвращает максимальные оценки правдоподобия конкретных отклонений.

пример

[lambda,psi,T] = factoran(X,m) также возвращает m-by- m матрица вращения загрузок T.

пример

[lambda,psi,T,stats] = factoran(X,m) также возвращает структуру stats содержащая информацию, относящуюся к нулевой гипотезе, H0, что количество общих факторов m.

пример

[lambda,psi,T,stats,F] = factoran(X,m) также возвраты прогнозы общих факторов (множитель счетов).

пример

___ = factoran(X,m,Name,Value) изменяет подгонку модели и выходы, используя один или несколько аргументы пары "имя-значение" для любых выходных аргументов в предыдущих синтаксисах. Например, можно задать, что X данные являются ковариационной матрицей.

Примеры

свернуть все

Создайте некоторые псевдослучайные необработанные данные.

rng default % For reproducibility
n = 100;
X1 = 5 + 3*rand(n,1); % Factor 1
X2 = 20 - 5*rand(n,1); % Factor 2

Создайте шесть векторов данных из необработанных данных и добавьте случайный шум.

Y1 = 2*X1 + 3*X2 + randn(n,1);
Y2 = 4*X1 + X2 + 2*randn(n,1);
Y3 = X1 - X2 + 3*randn(n,1);
Y4 = -2*X1 + 4*X2 + 4*randn(n,1);
Y5 = 3*(X1 + X2) + 5*randn(n,1);
Y6 = X1 - X2/2 + 6*randn(n,1);

Создайте матрицу данных из векторов данных.

X = [Y1,Y2,Y3,Y4,Y5,Y6];

Извлеките два фактора из матрицы зашумленных данных X использование factoran. Отобразите выходы.

m = 2;
[lambda,psi,T,stats,F] = factoran(X,m);
disp(lambda)
    0.8666    0.4828
    0.8688   -0.0998
   -0.0131   -0.5412
    0.2150    0.8458
    0.7040    0.2678
   -0.0806   -0.2883
disp(psi)
    0.0159
    0.2352
    0.7070
    0.2385
    0.4327
    0.9104
disp(T)
    0.8728    0.4880
    0.4880   -0.8728
disp(stats)
    loglike: -0.0531
        dfe: 4
      chisq: 5.0335
          p: 0.2839
disp(F(1:10,:))
    1.8845   -0.6568
   -0.1714   -0.8113
   -1.0534    2.0743
    1.0390   -1.1784
    0.4309    0.9907
   -1.1823    0.6570
   -0.2129    1.1898
   -0.0844   -0.7421
    0.5854   -1.1379
    0.8279   -1.9624

Просмотрите матрицу корреляции данных.

corrX = corr(X)
corrX = 6×6

    1.0000    0.7047   -0.2710    0.5947    0.7391   -0.2126
    0.7047    1.0000    0.0203    0.1032    0.5876    0.0289
   -0.2710    0.0203    1.0000   -0.4793   -0.1495    0.1450
    0.5947    0.1032   -0.4793    1.0000    0.3752   -0.2134
    0.7391    0.5876   -0.1495    0.3752    1.0000   -0.2030
   -0.2126    0.0289    0.1450   -0.2134   -0.2030    1.0000

Сравнение corrX к соответствующим значениям, возвращаемым factoran, lambda*lambda' + diag(psi).

C0 = lambda*lambda' + diag(psi)
C0 = 6×6

    1.0000    0.7047   -0.2726    0.5946    0.7394   -0.2091
    0.7047    1.0000    0.0426    0.1023    0.5849   -0.0413
   -0.2726    0.0426    1.0000   -0.4605   -0.1542    0.1571
    0.5946    0.1023   -0.4605    1.0000    0.3779   -0.2611
    0.7394    0.5849   -0.1542    0.3779    1.0000   -0.1340
   -0.2091   -0.0413    0.1571   -0.2611   -0.1340    1.0000

factoran получает lambda и psi которые тесно соответствуют корреляционной матрице исходных данных.

Просмотр результатов без использования вращения.

[lambda,psi,T,stats,F] = factoran(X,m,'Rotate','none');
disp(lambda)
    0.9920    0.0015
    0.7096    0.5111
   -0.2755    0.4659
    0.6004   -0.6333
    0.7452    0.1098
   -0.2111    0.2123
disp(psi)
    0.0159
    0.2352
    0.7070
    0.2385
    0.4327
    0.9104
disp(T)
     1     0
     0     1
disp(stats)
    loglike: -0.0531
        dfe: 4
      chisq: 5.0335
          p: 0.2839
disp(F(1:10,:))
    1.3243    1.4929
   -0.5456    0.6245
    0.0928   -2.3246
    0.3318    1.5356
    0.8596   -0.6544
   -0.7114   -1.1504
    0.3947   -1.1424
   -0.4358    0.6065
   -0.0444    1.2789
   -0.2350    2.1169

Вычислите коэффициенты, используя только ковариация матрицу X.

X2 = cov(X);
[lambda2,psi2,T2,stats2] = factoran(X2,m,'Xtype','covariance','Nobs',n)
lambda2 = 6×2

    0.8666    0.4828
    0.8688   -0.0998
   -0.0131   -0.5412
    0.2150    0.8458
    0.7040    0.2678
   -0.0806   -0.2883

psi2 = 6×1

    0.0159
    0.2352
    0.7070
    0.2385
    0.4327
    0.9104

T2 = 2×2

    0.8728    0.4880
    0.4880   -0.8728

stats2 = struct with fields:
    loglike: -0.0531
        dfe: 4
      chisq: 5.0335
          p: 0.2839

Результаты те же, что и с необработанными данными, кроме factoran невозможно вычислить матрицу счетов фактора F для ковариационных данных.

Загрузите выборочные данные.

load carbig

Задайте матрицу переменных.

X = [Acceleration Displacement Horsepower MPG Weight]; 
X = X(all(~isnan(X),2),:);

Оцените загрузки с помощью минимального среднего предсказания квадратичной невязки для факторного анализа с двумя общими факторами.

[Lambda,Psi,T,stats,F] = factoran(X,2,'Scores','regression');
inv(T'*T);   % Estimated correlation matrix of F, == eye(2)
Lambda*Lambda' + diag(Psi); % Estimated correlation matrix
Lambda*inv(T);              % Unrotate the loadings
F*T';                       % Unrotate the factor scores

Создайте биплот двух факторов.

biplot(Lambda,'LineWidth',2,'MarkerSize',20)

Figure contains an axes. The axes contains 11 objects of type line.

Оцените загрузки с помощью ковариационной (или корреляционной) матрицы.

[Lambda,Psi,T] = factoran(cov(X),2,'Xtype','covariance')
Lambda = 5×2

   -0.2432   -0.8500
    0.8773    0.3871
    0.7618    0.5930
   -0.7978   -0.2786
    0.9692    0.2129

Psi = 5×1

    0.2184
    0.0804
    0.0680
    0.2859
    0.0152

T = 2×2

    0.9476    0.3195
    0.3195   -0.9476

(Можно вместо этого использовать corrcoef(X) вместо cov(X) для создания данных для factoran.) Хотя оценки те же самые, использование ковариационной матрицы, а не необработанных данных препятствует вам запрашивать счета или уровень значимости.

Используйте вращение промакса.

[Lambda,Psi,T,stats,F] = factoran(X,2,'Rotate','promax','power',4);
inv(T'*T)                            % Estimated correlation of F, no longer eye(2)
ans = 2×2

    1.0000   -0.6391
   -0.6391    1.0000

Lambda*inv(T'*T)*Lambda'+diag(Psi)   % Estimated correlation of X
ans = 5×5

    1.0000   -0.5424   -0.6893    0.4309   -0.4167
   -0.5424    1.0000    0.8979   -0.8078    0.9328
   -0.6893    0.8979    1.0000   -0.7730    0.8647
    0.4309   -0.8078   -0.7730    1.0000   -0.8326
   -0.4167    0.9328    0.8647   -0.8326    1.0000

Постройте график неограниченных переменных с наложенными наклонными осями.

invT = inv(T);
Lambda0 = Lambda*invT;
figure()
line([-invT(1,1) invT(1,1) NaN -invT(2,1) invT(2,1)], ...
     [-invT(1,2) invT(1,2) NaN -invT(2,2) invT(2,2)], ...
     'Color','r','LineWidth',2)
grid on
hold on
biplot(Lambda0,'LineWidth',2,'MarkerSize',20)       
xlabel('Loadings for unrotated Factor 1')
ylabel('Loadings for unrotated Factor 2')

Figure contains an axes. The axes contains 11 objects of type line.

Постройте график повернутых переменных относительно наклонных осей.

figure()
biplot(Lambda,'LineWidth',2,'MarkerSize',20)

Figure contains an axes. The axes contains 11 objects of type line.

Входные параметры

свернуть все

Данные, заданные как n-by- d матрица, где каждая строка является наблюдением d переменные.

Типы данных: double

Количество общих факторов, заданное в виде положительного целого числа.

Пример: 3

Типы данных: double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: lambda = factoran(X,m,'Start',10,'Scores','Thomson') задает использование начальной точки для определенных отклонений 10 и метода Томсона для предсказания счетов фактора.

Тип входных данных X, заданная как разделенная разделенными запятой парами, состоящая из 'Xtype' и одно из следующих:

  • 'data'X является необработанными данными.

  • 'covariance'X является положительно определенной ковариационной или корреляционной матрицей.

Пример: 'Xtype','covariance'

Типы данных: char | string

Метод предсказания счетов фактора, заданный как разделенная разделенными запятой парами, состоящая из 'Scores' и одно из следующих:

  • 'wls' или эквивалентное 'Bartlett' - Взвешенная оценка методом обработки методом наименьших квадратов F как фиксированный

  • 'regression' или эквивалентное 'Thomson' - Минимальное среднее квадратичное предсказание ошибки, которое эквивалентно регрессии хребта

Пример: 'Scores','regression'

Типы данных: char | string

Начальная точка для определенных отклонений psi в оптимизации максимальной вероятности, заданной как разделенная разделенными запятой парами, состоящая из 'Start' и одно из следующих:

  • 'Rsquared' - Выбирает стартовый вектор в качестве масштабного фактора diag(inv(corrcoef(X))) (по умолчанию). Для примеров см. Jöreskog [2].

  • 'random' - Выбирает d равномерно распределенные значения на интервале [0,1].

  • Положительное целое число - Выполняет заданное количество максимальных правдоподобий, каждое инициализировано так же, как 'random'. factoran возвращает подгонку с наивысшей вероятностью.

  • Матрица с d Строки - Выполняют по одной максимальной подгонке правдоподобия для каждого столбца указанной матрицы. factoran инициализирует ith-ая оптимизация со значениями из ith столбца.

Пример: 'Start',5

Типы данных: double | char | string

Метод, используемый для поворота загрузок и счетов, заданный как разделенная разделенными запятой парами, состоящая из 'Rotate' и одно из значений в следующей таблице. Вы можете управлять поворотом, задавая дополнительные аргументы пары "имя-значение" rotatefactors функция, как описано в таблице. Для получения дополнительной информации см. rotatefactors.

ЗначениеОписание

'none'

Вращение не выполняется

'equamax'

Особый случай 'orthomax' вращение. Используйте 'normalize', 'reltol', и 'maxit' аргументы для управления деталями вращения.

'orthomax'

Ортогональное вращение, которое максимизирует критерий, основанный на отклонении загрузок. Используйте 'coeff', 'normalize', 'reltol', и 'maxit' аргументы для управления деталями вращения.

'parsimax'

Частный случай вращения ортомакса. Используйте 'normalize', 'reltol', и 'maxit' аргументы для управления деталями вращения.

'pattern'

Выполняет либо наклонное вращение (по умолчанию), либо ортогональное вращение, чтобы наилучшим образом соответствовать заданной матрице шаблона. Используйте 'type' аргумент для выбора типа вращения. Используйте 'target' аргумент для задания матрицы шаблона.

'procrustes'

Выполняет либо наклонное вращение (по умолчанию), либо ортогональное вращение, чтобы наилучшим образом соответствовать заданной целевой матрице в смысле наименьших квадратов. Используйте 'type' аргумент для выбора типа вращения. Используйте 'target' аргумент для задания целевой матрицы.

'promax'

Выполняет вращение наклонных проволочек к целевой матрице, определяемой factoran как функцию решения ортомакса. Используйте 'power' аргумент для задания степени для создания целевой матрицы. Потому что 'promax' использует 'orthomax' внутренне можно также задать аргументы, которые применяются к 'orthomax'.

'quartimax'

Особый случай 'orthomax' вращение. Используйте 'normalize', 'reltol', и 'maxit' аргументы для управления деталями вращения.

'varimax'

Особый случай 'orthomax' вращение (по умолчанию). Используйте 'normalize', 'reltol', и 'maxit' аргументы для управления деталями вращения.

указатель на функцию

Указатель на функцию вращения вида

[B,T] = myrotation(A,...)

где A является d-by- m матрица неограниченных факторных загрузок, B является d-by- m матрица повернутых загрузок и T является соответствующим m-by- m матрица поворота.

Используйте factoran аргумент 'UserArgs' для передачи дополнительных аргументов в эту функцию вращения. См. Пользовательская функция вращения.

Пример: [lambda,psi,T] = factoran(X,m,'Rotate','promax','power',5,'maxit',100)

Типы данных: char | string | function_handle

Нижняя граница для psi аргумент во время оптимизации максимальной вероятности, заданный как разделенная разделенными запятой парами, состоящая из 'Delta' и скалярное значение от 0 до 1 (0 < Delta < 1).

Пример: 0.02

Типы данных: double

Опции максимальной оптимизации правдоподобия, заданные как разделенная разделенными запятой парами, состоящая из 'OptimOpts' и структуру, созданную statset. Можно ввести statset('factoran') для списка опций, которые также описаны в следующей таблице.

Имя поля (statset аргумент)ЗначениеЗначение {по умолчанию}
'Display'

Количество информации, отображаемой алгоритмом

  • {'off'} - Не отображает никакой информации

  • 'final' - Отображает окончательный выход

  • 'iter' - Отображает итерационный выход в командное окно для некоторых функций; в противном случае отображается окончательный выход

MaxFunEvals

Максимально допустимое количество вычислений целевой функции

Положительное целое число, {400}
MaxIter

Максимально допустимое количество итераций

Положительное целое число, {100}
TolFun

Допуск завершения для значения целевой функции. Решатель останавливается, когда последующие значения функции меньше TolFun отдельно.

Положительная скалярная величина, {1e-8}
TolX

Допуск завершения для параметров. Решатель останавливается, когда последующие значения параметров меньше TolX отдельно.

Положительная скалярная величина, {1e-8}

Пример: statset('Display','iter')

Типы данных: struct

Количество наблюдений, используемых для оценки X, заданная как разделенная разделенными запятой парами, состоящая из 'Nobs' и положительное целое число. Nobs применяется только тогда, когда Xtype является 'covariance'. Определение 'Nobs' позволяет вам получить stats структуры output chisq и p.

Пример: 50

Типы данных: double

Выходные аргументы

свернуть все

Факторные загрузки, возвращенные как d-by- m матрица. d количество столбцов матрицы данных X, и m является вторым входным параметром factoran.

The (i,j)первый элемент lambda - коэффициент, или загрузка, j1й коэффициент для ith переменная. По умолчанию factoran вызывает функцию rotatefactors для поворота расчетных факторных загрузок с помощью 'varimax' опция. Для получения информации о вращении см. «Вращение факторных нагрузок и счетов».

Определенные отклонения, возвращенные как d-by- 1 вектор. d количество столбцов матрицы данных X. Записи psi являются оценками максимальной вероятности.

Вращение загрузок, возвращаемое как m-by- m матрица. m является вторым входным параметром factoran. Для получения информации о вращении см. «Вращение факторных нагрузок и счетов».

Информация об общих факторах, возвращенная как структура. stats содержит информацию, относящуюся к нулевой гипотезе, H0, что количество общих факторов m.

stats содержит следующие поля.

ОбластьОписание
loglike

Максимальное значение логарифмической правдоподобности

dfe

Степени свободы ошибки = ((d-m)^2 - (d+m))/2

chisq

Аппроксимация хи-квадратной статистики для нулевой гипотезы

p

Правый уровень значимости для нулевой гипотезы

factoran не вычисляет chisq и p поля, если только dfe положительный и все конкретные оценки отклонений в psi положительны (см. Heywood Case). Если X является ковариационной матрицей, и вы хотите factoran для вычисления chisq и p , тогда вы также должны задать 'Nobs' аргумент пары "имя-значение".

Счета фактора, также называемые предсказаниями общих факторов, возвращаются как n-by- m матрица. n количество строк в матрице данных X, и m является вторым входным параметром factoran.

Примечание

Если X является ковариационной матрицей (Xtype = 'covariance'), factoran невозможно вычислить F.

factoran вращается F использование того же критерия, что и для lambda. Для получения информации о вращении см. «Вращение факторных нагрузок и счетов».

Подробнее о

свернуть все

Случай Хейвуда

Если элементы psi равны значению Delta параметр (то есть они по существу равны нулю), подгонка известна как случай Хейвуда, и интерпретация полученных оценок проблематична. В частности, может быть несколько локальных максимумов вероятности, каждый с различными оценками загрузок и конкретных отклонений. Случаи Хейвуда могут указывать на сверхподбор кривой (m слишком велик), но также может быть результатом недооценки.

Вращение факторных нагрузок и счетов

Если вы явным образом не задаете вращение с помощью 'Rotate' аргумент пары "имя-значение", factoran вращает расчетные факторные загрузки lambda и коэффициент оценивает F. Выходная матрица T используется для поворота загрузок, то есть   lambda = lambda0*T, где lambda0 - начальный (неограниченный) MLE загрузок. T является ортогональной матрицей для ортогональных вращений и тождеств матрицей без поворота. Обратная T известна как матрица поворота основной оси, тогда как T сам по себе связан с матрицей поворота опорной оси. Для ортогональных вращений они идентичны.

factoran вычисляет счета коэффициентов, которые были повернуты на inv(T'), то есть     F = F0 * inv(T'), где F0 содержит неограниченные предсказания. Предполагаемая ковариация F является inv(T'*T), которая является матрицей тождеств для ортогонального или без вращения. Вращение факторных нагрузок и счетов является попыткой создать структуру, которую легче интерпретировать в матрице загрузок после максимальной оценки правдоподобия.

Пользовательская функция вращения

Синтаксис для передачи дополнительных аргументов пользовательской функции вращения:

[Lambda,Psi,T] = ...
     factoran(X,2,'Rotate',@myrotation,'UserArgs',1,'two');

Ссылки

[1] Харман, Гарри Хорас. Современный факторный анализ. 3rd Ed. Chicago: University of Chicago Press, 1976.

[2] Jöreskog, K. G. «Некоторые вклады в анализ факторов максимальной вероятности». Психометрика 32, № 4 (декабрь 1967): 443-82. https://doi.org/10.1007/BF02289658

[3] Лоули, Д. Н., и А. Э. Максвелл. Факторный анализ как статистический метод. 2nd Ed. New York: American Elsevier Publishing Co., 1971.

Расширенные возможности

Представлено до R2006a