exponenta event banner

factoran

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

Описание

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

x = λ + Λ f + e

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

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

cov (x) = Λ Λ T + Start

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

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

пример

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

пример

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

пример

[lambda,psi,T] = factoran(X,m) также возвращает mоколо-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.) Хотя оценки одинаковы, использование ковариационной матрицы, а не необработанных данных не позволяет запрашивать оценки или уровень значимости.

Используйте ротацию promax.

[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около-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 rows - выполняет одну максимальную аппроксимацию правдоподобия для каждого столбца указанной матрицы. factoran инициализирует i-я оптимизация со значениями из i4-я колонна.

Пример: '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около-m матрица невращающихся факторных нагрузок, B является dоколо-m матрицу повернутых нагрузок, и T является соответствующим mоколо-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 поля структуры вывода chisq и p.

Пример: 50

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

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

свернуть все

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

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

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

Вращение факторных нагрузок, возвращаемое как mоколо-m матрица. m является вторым входным аргументом factoran. Сведения о вращении см. в разделе Вращение факторных нагрузок и баллов.

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

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

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

Максимальная стоимость средств к существованию

dfe

Погрешность степеней свободы = ((d-m)^2 - (d+m))/2

chisq

Приблизительная статистика хи-квадрата для нулевой гипотезы

p

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

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

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

Примечание

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

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

Подробнее

свернуть все

Дело Хейвуда

Если элементы psi равны значению Delta параметр (то есть они по существу равны нулю), подгонка известна как случай Хейвуда, и интерпретация полученных оценок проблематична. В частности, может быть несколько локальных максимумов вероятности, каждый с различными оценками нагрузок и конкретных отклонений. Случаи Heywood могут указывать на переоборудование (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] Харман, Гарри Гораций. Современный факторный анализ. 3-й ред. Чикаго: Чикагский университет, 1976 год.

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

[3] Lawley, D. N. и А. Э. Максвелл. Факторный анализ как статистический метод. 2-й ред. Нью-Йорк: American Elsevier Publishing Co., 1971.

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

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