實際意義
判別分析於聚類分析的功能差不多,區別在於,聚類分析之前,沒有人知道具體的是怎么分的類,分了哪幾大類。而判別分析是已經把類別給分好,要做的是把沒有分好類的數據觀測,按照之前分好的類再進行分類。這里不同於生活中常見的分類先有具體的分類邏輯(這里叫做判別函數)。所以判別分的難點在於先由分好類的數據觀測找到一個或者多個判別函數,然后對未進行分類的觀測按照該判別公式進行分類。
進行判別分析需要滿足的條件是:
①每一個判別變量都不能是其他判別變量的線性組合
②各個判別變量之間具有多元正態分布,即控制N-1個變量為固定值時,第N個變量滿足正態分布
③滿足②條件時,使用參數法計算判別函數,否則使用非參數法計算判別函數。
判別分析方法
距離判別法:D2(X)=(X-μ)2/σ2
馬氏距離(廣義平方距離):W(X)=DB2(X)-DA2(X)
BAYES判別法:有先驗概率,再有后驗概率,最后還有錯判概率
FISHER判別法:投影法
判別分析的實現
PROC DISCRIM、PROC CANDISC 、PROC STEPDISC過程步實現
PROC DISCRIM可以處理滿足多元正態分布,也可以不滿足該條件都可以處理。若滿足多元正態分布,則可以計算出一次或者二次的判別函數(在組間方差不相等的情況下)。
PROC CANDISC是專門進行典型判別分析的過程,基於分析數值變量(類似於主成分分析結果)。能計算出最能描述組間差異的典型變量,然后結果僅給出典型變量和得分數據,后續要由PROC DISCRIM完成。
PROC STEPDISC逐步判別分析。最有效的找出體現不同類別的變量。
DATA CARS_TYPES CARS_TEST; SET SASHELP.CARS; BY MAKE TYPE; WHERE TYPE IN("SUV","Sedan","Sports"); IF FIRST.TYPE THEN DO; IF ORIGIN IN ("USA","Europe") THEN OUTPUT CARS_TYPES; ELSE OUTPUT CARS_TEST; END; RUN; PROC DISCRIM DATA=CARS_TYPES TESTDATA=CARS_TEST METHOD=NORMAL POOL=TEST DISTANCE LIST TESTOUT=CARS_RESULT; CLASS TYPE; VAR WEIGHT WHEELBASE LENGTH MPG_CITY ENGINESIZE; RUN;
分析的數據集是CARS_TYPES,即是根據此數據集的分類結果找到判別函數(可能是一次函數,也可能是二次函數),然后用從待分類的數據集,的觀測用該判別函數進行分類,進而得出結果。(分析數據集和帶分析數據集可以是一個數據集也可以是兩個數據集,一個數據集則要求待分類的觀測在type變量為缺失,兩個數據集則要求變量名完全一致。)
METHOD=NORMAL,說明指定用參數法,若要指明用非參數法則用NPAR。該選項默認值為NORMAL。
POOL=TEST,指明使用假設檢驗來判斷不同類間的協方差矩陣是否齊性。還可以是YES(使用合並后的協方差矩陣進行計算)、還可以是NO(使用不同類各自的協方差矩陣進行計算)。
DISTANCES輸出不同類間的距離。
LIST輸出后驗概率。
接下來看結果:
先是描述行統計結果,然后是不同類間的先驗概率表,然后是不同類的協方差矩陣秩(非零特征值個數)和行列式自然對數,是用來自然對數是用來構造判別函數的。
判定不同類間的協方差矩陣是否齊性,由圖可知,拒接原假設,所以協方差矩陣不完全相同。
各自的距離。除了用來看區別效果之外,還可以用來生成判別函數。
LIST選項輸出的后驗概率,
對於分析數據集,判別函數的后驗情況以及錯判概率。
對於待分類數據集,分析函數的后驗情況以及錯判情況。
最終CARS_TEST的分類情況有_INTO_字段展現。
PROC CANDISC,主要思想是:用主成分分析找出若干個原始變量的線性組合,這些線性組合能解釋絕大部分組間差異。
DATA CARS_TEST_NOTYPE; SET CARS_TEST; TYPE=" "; RUN; PROC SQL; CREATE TABLE CARS_ALL AS SELECT * FROM CARS_TYPES UNION SELECT * FROM CARS_TEST_NOTYPE; QUIT; PROC CANDISC DATA=CARS_ALL OUT=CARS_ALL_RESULTS DISTANCE; CLASS TYPE; VAR WEIGHT WHEELBASE LENGTH MPG_CITY ENGINESIZE; RUN;
結果如下:
以上和PROC DISCRIM結果類似,不解釋。
用了四種檢驗方法來檢驗各分類均值齊性。結果是怎么就看均值都不完全相等。
先看前半部分典型相關變量的統計結果(兩個典型相關系數的取值),中間是兩個典型相關系數can1和can2的特征值即累積解釋貢獻率,最后部分是檢驗典型相關是否為0,結果是典型相關不為0,兩者之間有線性相關關系。
給出了三種判別系數。
最后給出不同類觀測在典型變量can1和can2上的均值。
然后再用PROC DISCRIM進行type的划分:
PROC DISCRIM DATA=CARS_ALL_RESULTS METHOD=NORMAL POOL=TEST OUT=CARS_RESULTS2; CLASS TYPE; VAR CAN1 CAN2; RUN;
最后結果:
PROC STEPDISC逐步判別分析分為:向前選擇(FORWARD)、向后選擇(BACKWARD)、逐步選擇(STEPWISE)。
逐步選擇可以看作是向前和向后選擇的結合。在最開始模型中不包含任何變量。然后在模型中添加判別能力最強的變量(R2越接近1),隨着模型中變量的添加,先前引入的變量怕別能力可能有所變化,可以把低於閾值的變量從模型中刪除。反復引入刪除的過程,知道模型中變量都滿足WILKS'S LAMBDA相似准則,並且其他變量都達不到為止。(不能再刪,也不能再添加。)
PROC STEPDISC METHOD=STEPWISE DATA=CARS_ALL;
CLASS TYPE;
VAR WEIGHT WHEELBASE LENGTH MPG_CITY ENGINESIZE;
RUN;
默認閾值為0.15
結果如下:
描述性統計;
表一找了一個最能體現組間差異的變量weight寫入模型,其F值最大,R2最接近1。
表二,為檢驗模型中變量的顯著性差異,根據事先設定的顯著水平(默認為0.15)。用以檢查模型整體的判別能力。
第二步一開始就檢驗模型中已有的變量有沒有冗余,能不能刪除,然后再找出剩余變量中最能表現類間差異的變量加入模型中,然后檢查整個模型的整體的判別能力。
重復步驟,最后:
直到不能在添加變量並且不能在刪除變量為止,
最后:
逐步分析匯總出判別最能反映出類間差異的幾個分析變量。
然后在進行PROC DISCRIM過程:
PROC DISCRIM DATA=CARS_TYPES TESTDATA=CARS_TEST METHOD=NORMAL POOL=TEST DISTANCE LIST TESTOUT=CARS_RESULTS3; CLASS TYPE; VAR WEIGHT WHEELBASE MPG_CITY ENGINESIZE; RUN;
結果一樣。