Main Content

因子分析の使用による株価の分析

この例では、同じ部門の会社では株価が週単位で同じように変化しているかどうかを分析する方法を示します。

因子負荷量

標本データを読み込みます。

load stockreturns

10 社について株価の比率の変化を 100 週間にわたって記録したとします。10 の会社のうち、最初の 4 つは主に工業、次の 3 つは金融、そして最後の 3 つは小売として分類できます。景気の変動と共に、同業の会社の株価が共に変動することは十分考えられます。因子分析は、定量的な証拠を提供します。

はじめに、3 つの共通因子があるモデル近似を指定します。既定の設定では、factoran は、負荷の回転された推定を計算し、それらの解釈をより単純にしようと試みます。しかし、この例では、非回転の解を指定します。

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

factoran のはじめの 2 つの出力引数は、推定した負荷と推定した独自因子の分散です。負荷行列の各行は、10 の株のうちの 1 つを表し、各列は共通因子に相当します。非回転の推定を使うと、株の大部分は 2 つあるいはそれ以上の因子に対して、かなり大きい係数を含むため、この近似における因子の解釈は難しくなります。

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

構造体 stats に返された p 値では 3 つの共通因子に対する帰無仮説を棄却できないので、これらのデータの共変動をこのモデルで十分に説明できることがわかります。

2 つの共通因子をもつモデルを当てはめ、因子が 2 つ以下の場合に許容可能な近似になるかどうかを調べます。

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

p 値を表示します。

stats2.p
ans = 3.5610e-06

この 2 番目の近似では p 値が非常に有意なので、2 因子の仮説が棄却され、単純なモデルではこれらのデータのパターンを十分には説明できないことがわかります。

因子回転

結果が示すように、回転していない因子分析の近似からの推定された負荷は複雑な構造をもってしまうことがあります。因子回転の目的は、その中の各変数が少数の大きな負荷のみをもつようなパラメーター表現を見つけることにあります。すなわち、各変数は、少数の因子、(できれば1つの因子のみ) により影響されます。これは、因子が表すものを解釈することをしばしば容易にすることができます。

負荷行列の各行を M 次元空間の点の座標と考える場合、各因子は座標軸に相当します。因子回転は、これらの軸を回転し、回転座標系で新しい負荷を計算することに等価です。これを行うさまざまな方法があります。いくつかの方法では軸を直角にしておきますが、それらの間の角度を変更する斜交軸を使用する方法もあります。この例については、プロマックス基準 (一般の斜交軸を使う方法) の使用により推定された負荷を回転させることができます。

[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

プロマックス回転は、負荷の中でより単純な構造 (ほとんどの株が単に1つの因子に大きな負荷をもつもの) を作成します。関数 biplot を使用し、因子負荷量を座標にして各株価をプロットすると、この構造をより明確に示すことができます。

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

Figure contains an axes object. The axes object with xlabel Component 1, ylabel Component 2 contains 13 objects of type line, text. One or more of the lines displays its values using only markers

このプロットは、promax がより単純な構造へ因子負荷量を回転させたことを示します。各株は主に単に 1 つの因子にのみ依存し、それが影響する株では各因子について記述することは可能です。どの会社がどの軸の近くあるかに基づき、第 1 の因子軸が金融部門、第 2 の因子軸が小売および第 3 の因子軸が工業を表すと合理的に結論を下すことができました。株は主にセクター内で変わるという、はじめの推測が、明らかにデータにより裏付けられます。

因子スコア

観測値をその因子スコアに基づいて分類できると便利です。たとえば、3 因子モデルを採用し回転した因子の解釈をする場合、10 の観測された株からのデータに基づいて、3 つのストック セクターの各々に対しどれくらい望ましかったかという点で各週を分類したいと思うかもしれません。この例のデータは、単なる相関行列ではなく生の株価変動なので、各週について 3 つの回転した共通因子のそれぞれの推定値を 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 object. The axes object with xlabel Financial Sector, ylabel Retail Sector contains 2 objects of type line. One or more of the lines displays its values using only markers

斜交回転は、相関のある因子をしばしば作成します。このプロットは、第 1 と第 3 の因子間の相関性を示すある証拠を示します。推定された因子相関行列の計算によってもまた調べることができます。

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 object. The axes object with xlabel Financial Sector, ylabel Retail Sector contains 14 objects of type line, text. One or more of the lines displays its values using only markers

この場合、因子分析は 3 つの因子を含み、biplot は 3 次元です。10 株のそれぞれは、このプロットでベクトルによって表され、ベクトルの方向と長さは、それぞれの株が潜在的な因子にどのように依存するかを表します。たとえば、既に見てきたように、プロマックス回転後、最初の 4 つの株は第 1 の因子に正の負荷をもち、他の 2 つの因子にわずかな負荷をもちます。第 1 の因子は、経済セクターの影響として解釈され、この biplot では横軸の 1 つとして表されます。これら 4 つの株の第 1 の因子への依存関係は、その軸とほぼ同じ向きの 4 つのベクトルに対応します。同様に、株 5、6、7 のように小売セクターの影響として解釈される第 2 の因子への依存関係は、その軸とほぼ向きのベクトルによって表されます。

100 個の観測それぞれは、このプロットにおいて点で表され、それらの位置は、3 つの因子に対する各観測の因子スコアを表します。たとえば、このプロットの最上部近くの点は、技術セクターの因子に対して最も高い得点をもちます。これらの点は、単位正方形内に入るようにスケーリングされるので、プロットからは、それらの相対的な位置のみを決めることができます。

Figure ウィンドウの [ツール] メニューの [データ カーソル] を使用して、このプロットの項目を識別できます。株 (ベクトル) をクリックすることによって、各因子に対する株の負荷を読み取ることができます。観測 (点) をクリックすることによって、各因子に対する観測の因子スコアを読み取ることができます。