Анализ цен на акции с помощью факторного анализа

В этом примере показано, как проанализировать, испытывают ли компании в том же секторе аналогичные изменения в цене акций от недели к неделе.

Факторные нагрузки

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

load stockreturns

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

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

[Loadings,specificVar,T,stats] = factoran(stocks,3,'rotate','none');

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

Loadings
Loadings = 10×3

    0.8885    0.2367   -0.2354
    0.7126    0.3862    0.0034
    0.3351    0.2784   -0.0211
    0.3088    0.1113   -0.1905
    0.6277   -0.6643    0.1478
    0.4726   -0.6383    0.0133
    0.1133   -0.5416    0.0322
    0.6403    0.1669    0.4960
    0.2363    0.5293    0.5770
    0.1105    0.1680    0.5524

Вращение фактора помогает упростить структуру в Loadings матрица, чтобы облегчить назначение значимых интерпретаций факторам.

Из предполагаемых конкретных отклонений видно, что модель указывает, что конкретная цена акций изменяется довольно сильно за пределами изменения из-за общих факторов. Просмотрите предполагаемые определенные отклонения.

specificVar
specificVar = 10×1

    0.0991
    0.3431
    0.8097
    0.8559
    0.1429
    0.3691
    0.6928
    0.3162
    0.3311
    0.6544

Определенное отклонение 1 будет указывать, что в этой переменной нет общего факторного компонента, в то время как определенное отклонение 0 будет указывать, что переменная полностью определяется общими факторами. Эти данные, кажется, падают где-то между ними.

Отобразите значение p.

stats.p
ans = 0.8144

Значение p, возвращенное в stats структура не отклоняет нулевую гипотезу трех общих факторов, предполагая, что эта модель обеспечивает удовлетворительное объяснение ковариации в этих данных.

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

[Loadings2,specificVar2,T2,stats2] = factoran(stocks, 2,'rotate','none');

Отобразите значение p.

stats2.p
ans = 3.5610e-06

p-значение для этой второй подгонки очень важно и отвергает гипотезу о двух факторах, указывая на то, что более простой модели недостаточно для объяснения шаблона в этих данных.

Вращение фактора

Как показывают результаты, предполагаемые загрузки от неограниченной подгонки факторного анализа могут иметь сложную структуру. Цель поворота фактора состоит в том, чтобы найти параметризацию, при которой каждая переменная имеет только небольшое количество больших загрузок. То есть на каждую переменную влияет небольшое количество факторов, предпочтительно только один. Это часто может облегчить интерпретацию того, что представляют факторы.

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

[LoadingsPM,specVarPM] = factoran(stocks,3,'rotate','promax');
LoadingsPM
LoadingsPM = 10×3

    0.9452    0.1214   -0.0617
    0.7064   -0.0178    0.2058
    0.3885   -0.0994    0.0975
    0.4162   -0.0148   -0.1298
    0.1021    0.9019    0.0768
    0.0873    0.7709   -0.0821
   -0.1616    0.5320   -0.0888
    0.2169    0.2844    0.6635
    0.0016   -0.1881    0.7849
   -0.2289    0.0636    0.6475

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

biplot(LoadingsPM,'varlabels',num2str((1:10)'));
axis square
view(155,27);

Figure contains an axes. The axes contains 31 objects of type line, text.

Этот график показывает, что promax повернул загрузки к более простой структуре. Каждый запас зависит в основном только от одного фактора, и можно описать каждый фактор с точки зрения запасов, на которые он влияет. Исходя из того, какие компании близки к каким осям, можно разумно сделать вывод, что ось первого фактора представляет финансовый сектор, вторую розницу и третью технологию. Исходная догадка о том, что запасы варьируются в основном внутри сектора, по-видимому, подтверждается данными.

Факторные Счета

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

[LoadingsPM,specVarPM,TPM,stats,F] = factoran(stocks, 3,'rotate','promax');

plot3(F(:,1),F(:,2),F(:,3),'b.')
line([-4 4 NaN 0 0 NaN 0 0], [0 0 NaN -4 4 NaN 0 0],[0 0 NaN 0 0 NaN -4 4], 'Color','black')
xlabel('Financial Sector')
ylabel('Retail Sector')
zlabel('Technology Sector')
grid on
axis square
view(-22.5, 8)

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

Вращение наклона часто создает факторы, которые коррелируют. Этот график показывает некоторые доказательства корреляции между первым и третьим факторами, и можно исследовать далее, вычисляя предполагаемую матрицу факторной корреляции.

inv(TPM'*TPM);

Визуализация результатов

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

biplot(LoadingsPM,'scores',F,'varlabels',num2str((1:10)'))
xlabel('Financial Sector')
ylabel('Retail Sector')
zlabel('Technology Sector')
axis square
view(155,27)

Figure contains an axes. The axes contains 131 objects of type line, text.

В этом случае факторный анализ включает три фактора, и поэтому биплот является трехмерным. Каждый из 10 запасов представлен на этом графике вектором, и направление и длина вектора указывает, как каждый запас зависит от базовых факторов. Например, вы видели, что после ротации промакса первые четыре акции имеют положительные загрузки на первый фактор и неважные загрузки на два других фактора. Этот первый фактор, интерпретируемый как эффект финансового сектора, представлен в этой биплоте как одна из горизонтальных осей. Зависимость этих четырех запасов от этого фактора соответствует четырем векторам, направленным приблизительно вдоль этой оси. Точно так же зависимость акций 5, 6 и 7 в основном от второго фактора, интерпретируемая как эффект розничного сектора, представлена векторами, направленными приблизительно вдоль этой оси.

Каждое из 100 наблюдений представлено на этом графике точкой, и их местоположения указывают счет каждого наблюдения для трех факторов. Для примера точки в верхней части этого графика имеют наивысшие счета для фактора технологического сектора. Точки масштабируются так, чтобы они помещались в пределах модуля квадрата, поэтому только их относительные местоположения могут быть определены на графике.

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