Posted by hssnow in 统计应用 | 1 条评论
SAS多元分析之判别(1)–proc discrim
本文主要对SAS做判别分析的proc discrim步的应用做一个简单的摘录,相关的理论知识细节,请参见SAS help文档及其他统计学相关文献等。
1.简介
判别分式是判断样本所属类别的一种统计方法,常用的判别分析法有:
- 距离判别法:首先定义新样本到总体的距离,然后考察样本到各个总体的距离,把新样本判归至与其距离最近的总体。常用距离使用马氏距离。
- 贝叶斯(Bayes)判别法:更具Bayes统计思想,计算新样本属于各个总体的条件概率,比较各个条件概率的大小,将新样本判归至条件概率最大的总体。
- Fisher判别法:是一种先进行高维向低位投影,再根据距离判别的一种方法。借助方差分析的思想构造判别函数(相当于一种投影),使组间区别最大、组内离差最小,然后代入新样本数据,将其与判别临界值比较以确定应判为至哪一总体。
- 逐步判别法:主要是利用一些检验规则,对变量进行逐步筛选,同时进行判别的一种方法。
SAS中的proc discrim(判别归类过程)可以实现:距离判别法,贝叶斯(Bayes)判别法,Fisher判别法(典型判别)。
在proc discrim中,当各总体为正态总体是,距离判别是Bayes判别的特殊形式。
2.proc discrim
常用语法格式:
PROC DISCRIM < options > ;
CLASS variable ;
PRIORS probabilities ;
VAR variables ;
discrim常用选项及说明:
- data= 指定欲分析的数据集
- testdata= 指定待判数据集,其中必须有“var”语句指定的所有判别变量。同时,还可使用“testout=”和“testoutd=”选项指定存储分类结果和组密度估计的数据集。
- out= 指定生成一个数据集,其包含来自“data=”的所有数据、每个观测来自不同组的后验概率及判别结果。
- outstat= 指定生成一个数据集,其包含分析过程中的各个统计量。
- manova 各总体均值差异的显著性检验。对于k各已知总体,若 ,那么k个总体是不可区分的,判别分析就失去了意义。所以需进行差异显著性检验。
- method=normal|npar 指定参数或非参数判别法。normal参数法为缺省项。参数方法:假定每组都服从多元正态分布,采用广义平方距离的量度得出判别函数或分类准则,其是基于组内协差阵或合并协差阵的。非参数方法:不要求正态分布,其基于组概率密度,采用核方法或k最近邻方法得到非参数估计。缺省条件下,proc discrim认为个总体皆为正态总体,采用参数判别法。当我们不能确定各总体为正态时,一般应该有非参数判别法。
- pool=yes|no|test 决定计算马氏距离时协差阵的选取。使用马氏距离进行判别时,需要估计总体协差阵 ;实际判别问题中,一般只知道来自k个总体的样本总体的样本,而不知道各总体均值和协差阵。当 时用合并样本协差阵 估计总体协差阵。当 不全相等时,用组内样本协差阵 估计总体 协差阵。选项yes为默认,要求用合并样本协差阵PCOV(pooled covariances);选项no要求用组内协差阵WCOV(within covariances);选项test要求进行协差阵齐性检验:可以通过“slpool=”选项(默认slpool==0.10)指定显著性水平,若齐性成立相当于选项“yes”,若齐性不成立相当于选项“no”。
- crosslist 对每个训练样本,在output中输出交叉确认判别结果。
- crosslisterr 仅对训练样本中交叉确认的错误观测,在output中输出其交叉确认的结果。
- crossvalidata 指定交叉确认判别。交叉确认的想法是,为了判断对观测i的判别正确与否,用删除第i个观测的数据集算出判别规则,然后用次判别函数来判别第i个观测
- threshold=p 指定Bayes判别时可接受的最小后验概率,如果系新样本归入组别的最大后验概率小于p,则将其归入other组(不能判别),缺省为p=0。
- r= 指定非参数法时核估计的核半径。
- kernel=uniform|normal|epanechnikov|biweight|triweight 指定核函数,缺省值为uniform均匀核密度函数。
- k= 指定非参数法时k最近邻估计的最邻近个数。
- canonical 指定进行典型判别分析(即Fisher判别)。
常用语句及说明:
- priors probabilities 直接对各总体的先验概率进行赋值。
- priors proportional 利用各总体样本占全部训练样本的比例为各总体的先验概率赋值。
- priors equal 指定个总体的先验概率相等。此为priors语句的默认选项。
3.实例
在SAS多元分析之聚类(1)–proc cluster中对我国31个省进行了聚类,下面,不深究实际统计意义,仅关注proc discrim进行判别分析的实现,将31个省的各个变量值求平均作为新的样本“平均”,对其进行判别分析。程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | data consume2004; input area$ x1-x8 class; label area="地区" x1='食品' x2='衣着' x3='居住' x4='家庭设备及服务' x5='医疗保健' x6='交通和通讯' x7='文教娱乐' x8='其他商品及服务'; datalines; 北京 1495.09 308.85 746.04 227.27 507.55 512.23 743.72 76.18 4 天津 1017.72 181.21 508.06 108.51 177.10 230.41 376.87 42.23 2 河北 780.09 127.06 340.88 80.42 115.97 176.60 182.56 31.33 2 山西 748.90 171.69 179.22 59.27 84.20 130.00 235.01 28.17 2 内蒙古 889.05 133.54 266.43 69.91 154.51 241.90 291.98 35.25 2 辽宁 962.00 154.97 290.08 72.58 145.19 186.77 217.95 43.42 2 吉林 899.00 133.54 216.82 62.08 161.16 214.97 237.34 46.31 2 黑龙江 750.57 123.87 388.87 49.87 131.04 175.85 188.51 28.78 2 江苏 1317.88 163.53 467.62 141.43 163.16 293.07 373.39 72.47 3 浙江 1838.57 258.58 798.88 242.09 326.12 496.86 597.96 100.05 4 上海 2191.15 279.73 1446.15 344.41 424.55 720.37 805.56 116.94 5 安徽 861.34 86.87 299.82 75.97 91.95 163.93 199.95 33.88 1 福建 1408.54 159.60 430.14 154.44 136.40 306.06 313.09 107.32 3 江西 1125.13 107.19 234.69 66.89 110.32 171.89 237.28 42.10 1 山东 1000.13 139.18 365.97 110.12 155.85 221.93 298.23 97.85 3 河南 808.27 108.08 268.72 63.68 95.22 121.17 168.04 30.91 1 湖北 1076.35 93.52 274.10 75.11 110.73 162.65 245.68 50.85 1 湖南 1338.65 112.38 293.23 92.37 124.12 174.53 279.96 57.05 1 广东 1581.68 116.83 494.89 131.17 153.17 350.27 314.34 98.44 3 广西 1047.58 64.42 311.48 64.87 83.64 140.13 178.83 37.65 1 海南 1027.90 58.96 134.00 83.16 86.57 133.77 164.42 56.59 1 重庆 1039.00 79.08 201.03 74.81 115.31 119.68 198.65 26.38 1 四川 1123.18 92.87 234.31 79.15 117.40 127.60 209.68 31.54 1 贵州 754.39 55.63 165.95 41.48 47.19 70.41 140.21 21.07 1 云南 848.30 61.87 239.29 61.78 87.66 105.52 143.20 23.42 1 西藏 941.08 157.87 118.55 75.55 28.93 89.16 37.84 21.72 1 陕西 686.38 91.78 237.32 65.46 118.12 126.13 258.83 34.04 1 甘肃 703.41 82.33 179.86 58.91 85.33 130.22 202.64 21.64 1 青海 813.35 121.83 233.16 65.48 126.60 176.41 108.14 31.48 2 宁夏 808.54 122.50 325.21 65.30 186.90 155.26 217.06 46.05 2 新疆 763.43 138.88 304.81 56.03 141.97 131.59 126.92 26.28 2 ; run; data ave; input area$ x1-x8; label area="地区" x1='食品' x2='衣着' x3='居住' x4='家庭设备及服务' x5='医疗保健' x6='交通和通讯' x7='文教娱乐' x8='其他商品及服务'; datalines; 平均 1031.91 120.16 324.25 89.23 130.56 192.63 247.63 48.27 ; run; proc discrim data=consume2004 testdata=ave out=dis_out outcross=dis_cross manova method=normal pool=test slpool=0.05 testlist listerr crosslist distance; class class; var x1 - x8 ; run; |
在上面的数据集consume2004中最后的一列变量“class”是SAS多元分析之聚类(1)–proc cluster中聚类后得到的类号。
数据集ave是计算全国31个省的平均值得到的新样本,即对其进行判别分析。
上面的proc discrim采用的是距离判别法:用manove选项进行各总体的均值的差异显著性检验;假定个总体正态,采用参数估计法;使用pool进行方差齐性的检验,显著性水平设为0.05;用crosslisterr选项指定显示交叉确认。
运行上面的程序首先会看到log中提示
WARNING: CLASS=5 has only 1 value in DATA= data set or BY group.
WARNING: Within-class covariance matrix cannot be evaluated for CLASS=5 in DATA= data set or BY group; the pooled covariance matrix will be used.
因为第5类中仅有1个观测(上海),不能使用组内协差阵估计计算,于是SAS直接采用合并协差阵进行估计计算,“pool=”即不起作用,为了了解”pool=”作用,我们将“上海”删去,再进行判别分析。部分结果如下:
上图是用交叉确认,得到错误观测。如第2条观测原属于第2类,用交叉确认判别至第3类了。
上图是对交叉确认的汇总情况。如原属第2类中,有一个被误判为第1类,有1个误判为第3类。
综合以上考虑,线性回代误判率为0,交叉确认误判率为19.29%,认为该判别较为合适,可以接受采用。
参考文献:
- SAS STAT 9.2 User’s Guide (2d Edition)
- 统计分析与SAS(张晓冉 编著)
数据集ave,可以直接导出来,这样代码显得比较自动化点:
proc means data=result noprint;
var x1-x8;
output out=ave mean=x1-x8;
run;
[回复]