1. 程式人生 > >數學建模常用模型14 :因子分析

數學建模常用模型14 :因子分析

因子分析可以看作是主成分分析的一個擴充,因子分析在數學建模中使用的沒有主成分分析那麼多。關於因子分析和主成分分析的區別可以看一下司守奎老師的“因子分析”那個章節。一開始就有介紹區別。

因子分析

1)主成分分析法:

例5 研究紐約股票市場上五種股票的週迴升率。這裡,週迴升率=(本星期五市場收盤價-上星期五市場收盤價)/上星期五市場收盤價。從1975年1月到1976年12月,對這五種股票作了100組獨立觀測。因為隨著一般經濟狀況的變化,股票有集聚的趨勢,因此,不同股票週末回升率是彼此相關的。

相關係數矩陣:

                                            

對m=1和m=2,因子分析主成分解見下表。

變數

一個因子

兩個因子

因子載荷估計

特殊方差

因子載荷估計

特殊方差

1

0.7836

0.3860

0.7836

-0.2162

0.3393

2

0.7726

0.4031

0.7726

-0.4581

0.1932

3

0.7947

0.3685

0.7947

-0.2343

0.3136

4

0.7123

0.4926

0.7123

0.4729

0.2690

5

0.7119

0.4931

0.7119

0.5235

0.2191

累積貢獻

0.571342

0.571342

0.733175

對m=2,殘差矩陣R - A{A^T} - Cov\left( U \right)

                             

第一個因子F1代表了一般經濟條件,稱為市場因子,所有股票在這個因子上的載

荷都比較大,且大致相等,第二個因子是化學股和石油股的一個對照,兩者分別有比較大的負、正載荷。可見F2使不同的工業部門的股票產生差異,通常稱之為工業因子。歸納起來,我們有如下結論:股票回升率由一般經濟條件、工業部門活動和各公司本身特殊活動三部分決定。

MATLAB原始碼:

clc,clear
r=[1.000 0.577 0.509 0.387 0.462
0.577 1.000 0.599 0.389 0.322
0.509 0.599 1.000 0.436 0.426
0.387 0.389 0.436 1.000 0.523
0.462 0.322 0.426 0.523 1.000];
%下面利用相關係數矩陣求主成分解,val的列為r的特徵向量,即主成分的係數
[vec,val,con]=pcacov(r);%val為r的特徵值,con為各個主成分的貢獻率
f1=repmat(sign(sum(vec)),size(vec,1),1); %構造與vec同維數的元素為±1的矩陣
vec=vec.*f1; %修改特徵向量的正負號,每個特徵向量乘以所有分量和的符號函式值
f2=repmat(sqrt(val)',size(vec,1),1);
a=vec.*f2 %構造全部因子的載荷矩陣
a1=a(:,1) %提出一個因子的載荷矩陣
tcha1=diag(r-a1*a1') %計算一個因子的特殊方差
a2=a(:,[1,2]) %提出兩個因子的載荷矩陣
tcha2=diag(r-a2*a2') %計算兩個因子的特殊方差
ccha2=r-a2*a2'-diag(tcha2) %求兩個因子時的殘差矩陣
gong=cumsum(con) %求累積貢獻率

    該MATLAB原始碼執行結果中的a為載荷矩陣。主因子方法是對主成分方法的修正。

2)主因子分析法:

例 我國上市公司贏利能力與資本結構的實證分析

已知上市公司的資料見表1。

表1 上市公司資料

公司

銷售淨利率X1

資產淨利率X2

淨資產收益率X3

銷售毛利率X4

資產負利率X5

歌華有線

43.31

7.39

8.73

54.89

15.35

五糧液

17.11

12.13

17.29

44.25

29.69

用友軟體

21.11

6.03

7

89.37

13.82

太太藥業

29.55

8.62

10.13

73

14.88

浙江陽光

11

8.41

11.83

25.22

25.49

煙臺萬華

17.63

13.86

15.41

36.44

10.03

方正科技

2.73

4.22

17.16

9.96

74.12

紅河光明

29.11

5.44

6.09

56.26

9.85

貴州茅臺

20.29

9.48

12.97

82.23

26.73

中鐵二局

3.99

4.64

9.35

13.04

50.19

紅星發展

22.65

11.13

14.3

50.51

21.59

伊利股份

4.43

7.3

14.36

29.04

44.74

青島海爾

5.4

8.9

12.53

65.5

23.27

湖北宜化

7.06

2.79

5.24

19.79

40.68

雅戈爾

19.82

10.53

18.55

42.04

37.19

福建南紙

7.26

2.99

6.99

22.72

56.58

MATLAB原始碼:

clc,clear
load data.txt; %把原始資料儲存在純文字檔案data.txt中
n=size(data,1);
x=data(:,1:4); y=data(:,5); %分別提出自變數x和因變數y的值
——————————————————————————————————
如果不需要檢驗,則不需要把y列入原始資料中,把矩陣x的大小改變一下,以及下文中的m,m為原始資料中變數的個數。
——————————————————————————————————
m=4;%m為變數的個數
x=zscore(x); %資料標準化
r=cov(x); %求標準化資料的協方差陣,即求相關係數矩陣
[vec,val,con]=pcacov(r); %進行主成分分析的相關計算
c=cumsum(con);
i=1;
while ((c(i)<90)&(con(i+1)>10))
    i=i+1;
end
num=i;
f1=repmat(sign(sum(vec)),size(vec,1),1);
vec=vec.*f1; %特徵向量正負號轉換
f2=repmat(sqrt(val)',size(vec,1),1);
a=vec.*f2; %求初等載荷矩陣
am=a(:,1:num); %提出num個主因子的載荷矩陣
[b,t]=rotatefactors(am,'method', 'varimax'); %旋轉變換,b為旋轉後的載荷陣
bt=[b,a(:,num+1:end)]; %旋轉後全部因子的載荷矩陣
contr=sum(bt.^2); %計算因子貢獻
rate=contr(1:num)/sum(contr); %計算因子貢獻率
fprintf('綜合因子得分公式:F=');
for i=1:num
    fprintf('+%f*F%d',rate(i),i);
end
fprintf('\n');
coef=inv(r)*b; %計算得分函式的係數
coef=coef';
for i=1:num
    fprintf('各個因子得分函式為F%d=',i);
    for j=1:m
        fprintf('+(%f)*x_%d',coef(i,j),j);
    end
    fprintf('\n');
end
%如果僅僅因子分析,程式到此為止
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
score=x*coef';%計算各個因子的得分
weight=rate/sum(rate); %計算得分的權重
Tscore=score*weight'; %對各因子的得分進行加權求和,即求各企業綜合得分
[STscore,ind]=sort(Tscore,'descend'); %對企業進行排序
display=[score(ind,:)';STscore';ind']; %顯示排序結果
fprintf('排序結果如下:');
for i=1:num
    fprintf('第%d行為F%d得分,',i,i);
end
fprintf('第%d行為綜合因子得分,第%d為原序列\n',num+1,num+2);
disp(display);
[ccoef,p]=corrcoef([Tscore,y]); %計算F與資產負債的相關係數
[d,dt,e,et,stats]=regress(Tscore,[ones(n,1),y]);%計算F與資產負債的方程
fprintf('因子分析法的迴歸方程為:F=%f+(%f*y)',d(1),d(2));
if (stats(3)<0.05)%判斷是否通過顯著性檢驗的結果
    fprintf('\n在顯著性水平0.05的情況下,通過了假設檢驗。\n');
else
    fprintf('\n在顯著性水平0.05的情況下,通不過假設檢驗。\n');
end該MATLAB原始碼的displsy為最終排序結果。

本題用SPSS求解(因子分析中的主成分分析法):

1.把原始資料輸入SPSS中,如圖:

2.依次點選“分析”→“降維”→“因子”,如圖:

3.在“因子分析”對話方塊中,把X1、X2、X3、X4移入“變數”中,如圖:

4.單擊“描述”,出現“因子分析:描述”對話方塊;在“統計”欄中,勾選“初始解”;在“相關性矩陣”欄中,勾選“顯著性水平”,如圖,單擊“繼續”。

5.單擊“提取”,出現“因子分析:提取”對話方塊,在“方法”中,選擇“主成分”;在“分析”中,選擇“相關性矩陣”;在“輸出”中,勾選“未旋轉因子解”;在“提取”中,選擇“基於特徵值”,並設定特徵值大於“1”,如圖,單擊“繼續”。

6.單擊“選擇”,在“因子分析:旋轉”對話方塊中的選項預設即可,如圖,單擊“繼續”。

7.單擊“得分”,在“因子分析:因子得分”對話方塊中,勾選“儲存為變數”;在“方法”中,選擇“迴歸”;並勾選“顯示因子得分系數矩陣”,如圖,單擊“繼續”。

8.單擊“選項”,在“因子分析:選項”對話方塊中的選項預設即可,如圖,單擊“繼續”。

9.在“因子分析”對話方塊中,單擊“確定”,如圖。

相關性矩陣

X1

X2

X3

X4

顯著性 (單尾)

X1

.114

.263

.006

X2

.114

.002

.096

X3

.263

.002

.304

X4

.006

.096

.304

總方差解釋

成分

初始特徵值

提取載荷平方和

總計

方差百分比

累積 %

總計

方差百分比

累積 %

1

1.897

47.429

47.429

1.897

47.429

47.429

2

1.550

38.740

86.169

1.550

38.740

86.169

3

.393

9.826

95.995

4

.160

4.005

100.000

提取方法:主成分分析法。

綜合因子分析得分公式為:

成分矩陣a

成分

1

2

X1

.731

-.513

X2

.818

.503

X3

.359

.897

X4

.752

-.477

提取方法:主成分分析法。

a. 提取了 2 個成分。

成分得分系數矩陣

成分

1

2

X1

.385

-.331

X2

.431

.325

X3

.189

.579

X4

.396

-.308

提取方法:主成分分析法。

 元件得分。

各個因子得分函式:

成分得分協方差矩陣

成分

1

2

1

1.000

.000

2

.000

1.000

提取方法:主成分分析法。 

 元件得分。