5月 11, 2011

Posted by 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=”作用,我们将“上海”删去,再进行判别分析。部分结果如下:

由上图可见个总体的差异显著,判别分析有意义。

 

由上提示采用合并协差阵估计计算总体协查阵。

 

上图是得到的各个类的线性判别函数。

 

上图用求得的判别函数回代计算类别,总的误判率为0

 

上图是用交叉确认,得到错误观测。如第2条观测原属于第2类,用交叉确认判别至第3类了。

 

上图得到的交叉确认总的误判率为19.29%

 

上图是对交叉确认的汇总情况。如原属第2类中,有一个被误判为第1类,有1个误判为第3类。

最后,上图给出将新样本(平均)归入了第2类中。

综合以上考虑,线性回代误判率为0,交叉确认误判率为19.29%,认为该判别较为合适,可以接受采用。

 

参考文献:

  1. SAS STAT 9.2 User’s Guide (2d Edition)
  2. 统计分析与SAS(张晓冉 编著)
  1. 数据集ave,可以直接导出来,这样代码显得比较自动化点:
    proc means data=result noprint;
    var x1-x8;
    output out=ave mean=x1-x8;
    run;

    [回复]

发表评论

返回顶部