打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SAS多元分析之聚类(1)–proc cluster | Statistics with SAS

本文主要对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个省市农民人均年生活消费支出情况,进行分类。数据参见下数据集(数据单位:元)。

12345678910111213141516171819202122232425262728293031323334353637
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法,如下:

123456
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进一步完善后续工作。

12345678910111213141516
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(张晓冉 编著)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SAS统计分析系列:描述性统计分析 (四)
透彻解读聚类分析及案例实操
SAS常用程序(1)
SAS编程基础
SAS系列15:SAS数据可视化结果输出
SAS信用评分九步曲之第一步数据清洗
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服