主成分分析與因子分析


主成分分析,主成份是原始變量的線性組合,在考慮所有主成份的情況下主成份和原始變量間是可以逆轉的。即“簡化變量”,將變量以不同的系數合起來,得到好幾個復合變量,然后在從中挑幾個能表示整體的復合變量就是主成份,然后計算得分。

因子分析,公共因子和原始變量的關系是不可逆轉的,但是可以通過回歸得到。是將變量拆開,分成公共因子和特殊因子。過程是:因子載荷計算,因子旋轉,因子得分。

主成份分析

主成份分析需要知道兩變量之間的相關性,生成協方差舉證和相關新矩陣,對應的生成的新向量矩陣Y還有特征值λi,對應是第I個新向量對總體信息的貢獻率為λi/(λ1+λ2+...+λn),對應的還有一個累積貢獻率。

確定主成份的個數的方法有:特征值大於1(要求原始數據的每一個變量至少能貢獻1各單位的變異)、陡坡檢驗法(陡坡圖中開始平坦的點之前的點的個數)、累積解釋變異比例法(即(λ1+...+λi)/(λ1+λ2+...+λn)>70%)。

同時也可以知道主成分分析對應的幾個難點①是使用協方差矩陣還是相關系數矩陣②如何確定主成份的個數。當數據中不同變量的度量單位不同並且數值相差較大就用標准化后的相關系數矩陣,當數值相差不大並且指標的權重不一樣時,考慮用協方差矩陣。對於個數的確定就是我們一些邊界問題是否1左右的也可以囊括進主成份中,是否難以確定開始變平坦的是那個點,是否70%不夠。等幾個問題。

主成分分析可以用兩個過程步完成PROC FACTORS 、PROC PRINCOMP。后者能處理的數據量大一些,效率高一些,,前者輸出的內容豐富些,還可以做旋轉因子。

以下是主成分分析過程;

proc princomp data=sashelp.cars out=car_component;
    var mpg_city mpg_highway weight wheelbase length;
run;

輸出結果:

先是輸出統計結果,再是輸出相關性矩陣,這里princomp步默認使用的是相關系數矩陣,實際應用過程中,可以通過cov選項來指定使用的矩陣。從一扇那個結果可以看出:highway和city、wheelbase和length和weight相關性較強。

接下來是相關矩陣的特征值以及特征向量,可以看出前兩個特征值的貢獻率就已經發到了92%,所以前兩個對用的特征向量就足以表達整體的92%了。可以得出第一主成份線性表達式為:PRIN1=-0.443657*CITY-0.44858*HIGHWAY+0.4793*WEIGHT+0.4399*WHEELBASE+0.4226*LENGHT,一次類推第二主成份表達式即可。

還輸出陡坡圖如下:

可以看出是從第三個點開始變平坦,所以此數據的只有兩個主成分變量。

從輸出數據集中可有主成分變量的打分狀況。

 

其中有負分是因為計算主成份時用了標准化后的原始數據集。

接下來看FACTOR過程步:

proc factor data=sashelp.cars n=2  simple corr;
    var mpg_city mpg_highway weight wheelbase length;
run;

其中simple為輸出常見的統計量,CORR輸出相關性矩陣,N=2為保留兩個主成分(這里是先進行過出成分分析結果已知主成分個數之后確定的兩個,默認是輸出一個,但是在沒有先進行主成分分析的情況下也可以直接輸出最大個數,即總變量的個數,然后再確定主成分個數)。輸出結果如下:

 

 

這里不一樣的是:這里的主成分名稱被因子替換了,並且指出有幾個因子被保留,也給出了特征向量的貢獻率。

這里得出的線性方程不於princomp過程的系數一致,原因是factor是假設所有因子或者主成份的方差為1,為princomp是方差為特征值,實際上可以轉化過來;

現如下代碼就於前面結果一致:

proc factor data=sashelp.cars n=5 score;
    ods output stdscorecoef=coef;
    var mpg_city mpg_highway weight wheelbase length;
run;
proc stdsize method=ustd mult=0.44721 data=coef out=eigenvectors;
    var factor1-factor5;
run;

輸出的結果就會一致。

因子分析

對於主成分分析的目的是“降維”,而因子分析的目的通過“降維”,來找到能解釋原始便能量的公共因子和特殊因子。

計算因子載荷的方法有:主成份分析法(即特征向量對應的值),極大似然法。

因子旋轉有:正交旋轉(公共因子間不相關)和斜交旋轉。

proc factor data=sashelp.cars corr priors=smc rotate=varimax;
    var mpg_city mpg_highway weight wheelbase length;
run;

corr使用相關系數矩陣,priors=smc指明先驗公因子估計方法為多元相關系數的平方。rotate=varimax為指明使用最大正交旋轉法進行對因子的旋轉。

輸出結果和前面相似的有:

 

 

旋轉之前各自變量均有載荷而且大部分載荷明顯不利於對因子的意義進行解釋,接下來就是用rotate=varimax是指明用最大正交旋轉法對因子進行旋轉,結果如下:

旋轉之后的因子特征比較明顯,高低載荷分明,除了weight不便歸類外其余的factor1包含city和highway和weight三個變量可解釋為“整車油耗”,factor可解釋為“整車舒適”。接下來是用兩公共因子進行得分計算,使用PROC SCORE過程即可滿足:

 

proc factor data=sashelp.cars corr priors=smc rotate=varimax
    outstat=factcars score;
    var mpg_city mpg_highway weight wheelbase length;
run;

proc score data=sashelp.cars score=factcars out=fscore;
    var mpg_city mpg_highway weight wheelbase length;
run;

得到的打分后的數據集為:

總結:主成分分析為:把變量合起來形成個數較少的新變量(簡化變量),因子分析是把變量拆開(公共因子和特殊因子)即分析學生成績由什么因子組成的。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM