SAS数据分析之判别分析
判别分析与聚类分析有非常类似的特性,因此,在多数数据分析的教材中,这两章是一前一后出现的,简而言之,聚类分析,其实是判别分析的基础,即在聚类分析的基础上,总结出各类的权值,将待判样本与各类权值做对比,距离最近的,即为一类。
以下,给出我在判别分析实验中做的一个小例子。
判别分析
人文与发展指数是联合国开发计划署于1990年5月发表的第一份《人类发展报告》中公布的。该报告建议,目前对人文发展的衡量指标应当以人生的三大要素为重点。衡量人生的三大要素的指标分别为:实际人均GDP指数、出生时的预期寿命指数、受教育程度指数(由成人识字率指数和综合总人学率指数按2/3、1/3的权重加权而得),将一生三个指数合成为一个指数就是人文发展指数。今从2007年世界各国人文发展指数(2005年)的排序中,选取高发展水平、中等发展水平和低发展水平国家各6个作为三组样品,另选四个国家作为待判样品,资料如下表所示。试用距离判别对以下数据资料进行判别分析,并据此对待选的四个国家进行判别归类,并使用Fisher 判别写出判别函数。
G 国家 人均GDP(美元) 出生时的预期寿命(岁) 成人识字率(%) 初等、中等和高等教育入学率(%)
第一类:高发展水平国家 1 美国 41890 77.9 99.5 93.3
1 德国 29461 79.1 99.2 88
1 希腊 23381 78.9 96 99
1 新加坡 29663 79.4 92.5 87.3
1 意大利 28529 80.3 98.4 90.6
1 韩国 22029 77.9 99 96
第二类:中等发展水平国家 2 古巴 6000 77.7 99.8 87.6
2 罗马尼亚 9060 71.9 97.3 76.8
2 巴西 8402 71.7 88.6 87.5
2 泰国 8677 69.6 92.6 71.2
2 菲律宾 5137 71 92.6 81.1
2 土耳其 8407 71.4 87.4 68.7
第三类:低发展水平国家 3 尼泊尔 1550 62.6 48.6 58.1
3 尼日利亚 1128 46.5 69.1 56.2
3 喀麦隆 2299 49.8 67.9 62.3
3 巴基斯坦 2370 64.6 49.9 40
3 越南 3071 73.7 90.3 63.9
3 印度尼西亚 3843 69.7 90.4 68.2
待判组 日本 31267 82.3 99 85.9
印度 3452 63.7 61 63.8
中国 6757 72.5 90.9 69.1
南非 11110 50.8 82.4 77
这是在判别分析中非常经典的例题,以下给出SAS代码:
距离判别
data exp;
/*生成训练样本数据集ex_6_2_1; 数据为坐标数据*/
input g $ name $ x1 x2 x3 x4;
cards;
1 美国 41890 77.9 99.5 93.3
1 德国 29461 79.1 99.2 88
1 希腊 23381 78.9 96 99
1 新加坡 29663 79.4 92.5 87.3
1 意大利 28529 80.3 98.4 90.6
1 韩国 22029 77.9 99 96
2 古巴 6000 77.7 99.8 87.6
2 罗马尼亚 9060 71.9 97.3 76.8
2 巴西 8402 71.7 88.6 87.5
2 泰国 8677 69.6 92.6 71.2
2 菲律宾 5137 71 92.6 81.1
2 土耳其 8407 71.4 87.4 68.7
3 尼泊尔 1550 62.6 48.6 58.1
3 尼日利亚 1128 46.5 69.1 56.2
3 喀麦隆 2299 49.8 67.9 62.3
3 巴基斯坦 2370 64.6 49.9 40
3 越南 3071 73.7 90.3 63.9
3 印度尼西亚 3843 69.7 90.4 68.2
;
data testexp; /*生成待判样品数据集ex1*/
input name $ x1 x2 x3 x4;
cards;
日本 31267 82.3 99 85.9
印度 3452 63.7 61 63.8
中国 6757 72.5 90.9 69.1
南非 11110 50.8 82.4 77
;
proc discrim data=exp testdata=testexp testout=fexp list listerr testlist testlisterr crosslist crosslisterr ;
class g;
var x1 x2 x3 x4;
run;
proc print data=fexp;run;
以下是程序结果:





Fish判别
data exp;
input g $ name $ x1 x2 x3 x4;
cards;
1 美国 41890 77.9 99.5 93.3
1 德国 29461 79.1 99.2 88
1 希腊 23381 78.9 96 99
1 新加坡 29663 79.4 92.5 87.3
1 意大利 28529 80.3 98.4 90.6
1 韩国 22029 77.9 99 96
2 古巴 6000 77.7 99.8 87.6
2 罗马尼亚 9060 71.9 97.3 76.8
2 巴西 8402 71.7 88.6 87.5
2 泰国 8677 69.6 92.6 71.2
2 菲律宾 5137 71 92.6 81.1
2 土耳其 8407 71.4 87.4 68.7
3 尼泊尔 1550 62.6 48.6 58.1
3 尼日利亚 1128 46.5 69.1 56.2
3 喀麦隆 2299 49.8 67.9 62.3
3 巴基斯坦 2370 64.6 49.9 40
3 越南 3071 73.7 90.3 63.9
3 印度尼西亚 3843 69.7 90.4 68.2
;
proc candisc data=exp out=outcan simple;
class g;
var x1 x2 x3 x4;
proc print data=outcan;
run;
proc plot ;
plot can2*can1=g; /*如果不足两个典型变量则不产生散点图*/
run;




最后四个观测的归类结果为19号(日本)观测为高发展水平国家,第20号(印度)为第3类,即低发展水平国家,21号(中国)和22号(南非)归为中等发展水平国家。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)