4月 4, 2011

Posted by in 统计应用 | 6 条评论

SAS多元分析之聚类(1)–proc cluster

本文主要对SAS做聚类分析的proc cluster步的应用做一个简单的摘录,相关的理论知识细节,请参见SAS help文档及其他统计学相关文献等。

1.简介

proc cluster一般适用于规模较小的样本观测聚类(即Q型聚类)。proc cluster为系统聚类,包括11种方法,根据“距离”作为分类标准。

2.proc cluster

常用语法格式:

PROC CLUSTER METHOD = name < options > ;
COPY variables ;
ID variable ;
VAR variables ;

Method=average|ward|centroid|single|complete|median|flexible|mcquitty|eml|density|twostage,分别指定11类系统聚类法。

proc cluster常用选项及语句说明:

data= 指定聚类过程的输入数据集。该数据集可以是观测样本(坐标数据),也可以是类型“type=distance”的数据集,数据被认为是类间(或观测间)的距离阵。

关于type=distance的数据集,用如下方式就可建立:
data dis_data(type=distance);
input a b c;
……
用proc contents等方法可以查看到其“Data Set Type DISTANCE”

outtree= 生产一个数据集,存储cluster过程的聚类历史,可被proc tree调用作图。

proc tree主要用于根据proc cluster产生的结果作树状图dendrograms。常用语句如:proc tree data= out= nclusters= horizontal; 等。其中data=指定输入数据集,out=输出数据集,nclusters=指定输出数据集中的分类数,horizontal要求画水平聚类图。

standard|std 把聚类变量的坐标数据标准化均值为0、标准差为1,然后进行聚类分析。该选项仅用于坐标数据集。

聚类分析中,样本间的聚类通常是采用欧氏距离,为消除变量不同量纲对聚类分析的影响,通常进行标准化的处理。

rsquare|rsq 输出R^2和半偏R^2统计量,该选项对average、centriod法的坐标数据有效,对于ward法总是输出。

这两个统计量是用来帮助确定分类个数的。R^2越大表示各个类区分的越开,聚类效果越好。而又不能以 的大小简单的确定分类个数,应考察 值的变化,即半偏 ,即上一步 与该步 之差。若某步半偏 较大,说明本次并类效果不好,应当考虑聚类到上一步是否应停止。

pseudo 输出伪F和伪T统计量,该选项仅对average、centriod、ward法的坐标数据有效。

这两个统计量同样是用来帮助确定分类个数的。类似R^2和半偏R^2,伪F统计量值越大分来效果越好;若某步伪T统计量值较大,说明该步并类效果不好,应当考虑聚类到上一步是否应停止。

print|p=k 指定cluster history显示的分类数,即只列出最后合并为k类直到合并为1类得信息。

copy语句 把“data=”数据集中,id和var语句未列出变量,复制到“outtree=”指定的数据集中。

id语句 标识过程中的观测,缺省是用观测序号标识。

var语句 列出聚类分析中用到的语句。

3.实例

摘用《统计分析与SAS》(张晓冉 编著)的例11.1.1问题:根据2004年我国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
data consume2004;
	input area$ x1-x8;
	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
天津 1017.72 181.21 508.06 108.51 177.10 230.41 376.87 42.23
河北 780.09 127.06 340.88 80.42 115.97 176.60 182.56 31.33
山西 748.90 171.69 179.22 59.27 84.20 130.00 235.01 28.17
内蒙古 889.05 133.54 266.43 69.91 154.51 241.90 291.98 35.25
辽宁 962.00 154.97 290.08 72.58 145.19 186.77 217.95 43.42
吉林 899.00 133.54 216.82 62.08 161.16 214.97 237.34 46.31
黑龙江 750.57 123.87 388.87 49.87 131.04 175.85 188.51 28.78
上海 2191.15 279.73 1446.15 344.41 424.55 720.37 805.56 116.94
江苏 1317.88 163.53 467.62 141.43 163.16 293.07 373.39 72.47
浙江 1838.57 258.58 798.88 242.09 326.12 496.86 597.96 100.05
安徽 861.34 86.87 299.82 75.97 91.95 163.93 199.95 33.88
福建 1408.54 159.60 430.14 154.44 136.40 306.06 313.09 107.32
江西 1125.13 107.19 234.69 66.89 110.32 171.89 237.28 42.10
山东 1000.13 139.18 365.97 110.12 155.85 221.93 298.23 97.85
河南 808.27 108.08 268.72 63.68 95.22 121.17 168.04 30.91
湖北 1076.35 93.52 274.10 75.11 110.73 162.65 245.68 50.85
湖南 1338.65 112.38 293.23 92.37 124.12 174.53 279.96 57.05
广东 1581.68 116.83 494.89 131.17 153.17 350.27 314.34 98.44
广西 1047.58 64.42 311.48 64.87 83.64 140.13 178.83 37.65
海南 1027.90 58.96 134.00 83.16 86.57 133.77 164.42 56.59
重庆 1039.00 79.08 201.03 74.81 115.31 119.68 198.65 26.38
四川 1123.18 92.87 234.31 79.15 117.40 127.60 209.68 31.54
贵州 754.39 55.63 165.95 41.48 47.19 70.41 140.21 21.07
云南 848.30 61.87 239.29 61.78 87.66 105.52 143.20 23.42
西藏 941.08 157.87 118.55 75.55 28.93 89.16 37.84 21.72
陕西 686.38 91.78 237.32 65.46 118.12 126.13 258.83 34.04
甘肃 703.41 82.33 179.86 58.91 85.33 130.22 202.64 21.64
青海 813.35 121.83 233.16 65.48 126.60 176.41 108.14 31.48
宁夏 808.54 122.50 325.21 65.30 186.90 155.26 217.06 46.05
新疆 763.43 138.88 304.81 56.03 141.97 131.59 126.92 26.28
;
run;

用proc cluster做聚类分析,采用Ward法,如下:

1
2
3
4
5
6
ods graphics on;
proc cluster data=consume2004 method=ward std rsquare pseudo outtree=ave_tree;
	var x1-x8;
	id area;
run;
ods graphics off;

得到聚类历史如下图(其中省略了一些中间的历史记录):

首先对Cluster History进行下简单的说明:

Cluster History中的变量依次表示分类的类数、原分类、每步合并入的类、此步类中的观测数、半偏R平方、R平方、伪F统计量,伪T统计量。

如前介绍,系统聚类法首先将所有样本观测各独自视为1类,然后逐步合并至只有1类。本例中,用ward法,样本观测就是31个省市:初始时有31类;第1步将重庆、四川合为1类,其他29个省市仍各自为1类,记30类;第2步将江西、湖北合为1类,记29类;依次类推。注意,上图NCL=8时,即记8类时,是将之前记的13类和西藏合并得到的。

接下来,下图描述了伪F统计量,伪T统计量的情况,为我们判断确定分类组数提供了初步参考。如可以看出:在类数为5—15的区间内,伪F统计量都相对小些;在类数为1、4、5等处,伪T统计量相对较大。

下面,为确定分类数,对Cluster History进行详细分析。
我们人为假定分类数不应超过8,则对Cluster History的最后8次合并分析即可,根据半偏R平方、伪F统计量,伪T统计量,得到的前4中最好分类为:

  • 半偏R平方:2,3,4,5,6
  • 伪F统计量:2,3,4,5,6
  • 伪T统计量:2,3,5,6,8

解释一下:

  • 对半偏R^2,前面介绍到“若某步半偏R^2较大,说明该步并类效果不好,应当考虑聚类到上一步是否应停止”。在最后8次并类中,半偏R^2最大为0.6754,在NCL=1时得到,考虑在上一步停止分类,即分类数为2;半偏R^2第二大为0.1317,在NCL=2时得到,考虑在上一步停止分类,即分类数为3;依次类推,得到最好分类数依次为:2,3,4,5,6。
  • 伪F统计量,其统计量值越大分来效果越好,很容易排序得到最好分类数依次为:2,3,4,5,6。
  • 伪T统计量,类似于半偏R^2,若某步较大,说明该步并类效果不好,应当考虑聚类到上一步是否应停止。得到最好分类数依次为:2,3,5,6,8。

另外,若我们再假定分类数应大于3,则分类数大致可以为4,5,6。至于如何最终确定分类数,可以参考其他聚类方法结果、画出树状图等,综合考虑,个人作出判断,这里选定分类数为5。

接下来,可以用proc tree和proc means进一步完善后续工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
proc tree data=ave_tree out=result ncl=5 horizontal;
	copy x1-x8;
run;
proc sort data=result;
	by cluster;
run;
proc means data=result noprint;
	var x1-x8;
	by cluster;
	output out=clus_mean mean=x1 x2 x3 x4 x5 x6 x7 x8;
data clus_mean;
	set clus_mean;
	sum=sum(x1,x2,x3,x4,x5,x6,x7,x8);
	label sum='总和';
	format x1-x8 sum 8.2;
run;

最后,根据数据集result可以得到将31个省市分为5类,分别是:

  • 第一类:重庆 四川 江西 湖北 安徽 河南 贵州 云南 陕西 甘肃 广西 湖南 海南 西藏
  • 第二类:河北 黑龙江 内蒙古 吉林 青海 新疆 辽宁 宁夏 山西 天津
  • 第三轮:福建 广东 江苏 山东
  • 第四类:北京 浙江
  • 第五类:上海

树状图如下:

汇总数据集如下,即得到各个类各消费情况的平均水平及总和:

 

参考文献
1.SAS STAT 9.2 User’s Guide (2d Edition)
2.统计分析与SAS(张晓冉 编著)

  1. 哇,好详细啊,感觉好像是统计学老师再讲课一样,认真学习中。

    [回复]

    hssnow 回复:

    呵呵,学习笔记一个,没啥技术含量,任重而道远呐~

    [回复]

    sxlion 回复:

    我把你的这篇和我的以前上课的笔记一对照,发现重合比例比较高,所以有上课的感觉。

    [回复]

  2. 多谢分享,非常详细

    [回复]

Trackbacks/Pingbacks

  1. SAS多元之判别分析(1)——proc discrim « Statistics with SAS - [...] 在SAS多元分析之聚类(1)--proc cluster中对我国31个省进行了聚类,下面,不深究实际统计意义,仅关注proc discrim进行判别分析的实现,将31个省的各个变量值求平均作为新的样本“平均”,对其进行判别分析。程序如下: ?View Code SAS1 2 3 4 5 6 7 8 9 10 11 12 13 14…
  2. Robin. 从因子分析到聚类 | 统计数据有发现 - [...] http://hssnow.name/2011/04/multivariate-analysis-proc-cluster/ [...]
  3. 从因子分析到聚类 | Robin - [...] http://hssnow.name/2011/04/multivariate-analysis-proc-cluster/ http://saslist.com/hssnow/2011/04/04/multivariate-analysis-proc-cluster/ 此条目由 Robin [...]

发表评论

返回顶部