文章目录(Table of Contents)
前言
已经到了SAS学习的最后一个单元了,其实应该多少还是会有一些收获的。
学一个东西多少还是要靠自己,你能找到这个网站,找到这篇文章,相信你也是用心了,希望能学习每一个事物上面都能这样。
好了,下面就开始第五章的习题了。
5.1
题目要求
解答
- data SAS5_1;
- set SASuser.gpa;
- run;
- proc princomp data=SAS5_1 cov out=prin;/*进行主成分分析*/
- var gpa hsm hss hse satm satv;
- run;
- proc gplot;
- plot prin2*prin1 ;
- run;
下面对上面的结果进行解释:
第一主分量贡献率已达73.37%,前两个主分量累计贡献率达到99.95%,所以前两个主分量可以表现学生学习成绩的大部分信息。
第一主分量的计算系数都是正数,所以它是一个学生,学习成绩的加权平均,所以第一个变量代表这个学生的总的学习情况。
第二主分量在satm上有较大的正系数,而在satv上有较大的负系数,在其他变量的系数上都接近0,可能是代表一个学生的数理学习水平。
从第一主分量与第二主分量的散点图来看,散点的分布较匀,说明一个学生的总的学习情况与数理水平好坏可能关系不大。
下面进行简单的因子分析
- proc factor data=SAS5_1 simple corr;
- run;
前两个主分量解释了64.06%的方差。按照默认的选择因子个数的准则MINEIGEN,取大于1的特征值,所以取两个因子。
而因子模式阵的结果,发现第一主分量(因子)在所有六个变量上都有正的载荷,可见这个因子反应了学生总体学习水平的影响。
第二主分量在satm与satv上有大的正载荷,在gpa,hss,hse上有大的负载荷,因此第二个因子数值较大表明学生参加sat的成绩较好,而在大学的成绩低。
现进行主因子分析,先产生方差最大正交预旋转,然后进行斜交旋转。
- proc factor data=SAS5_1 priors=smc rotate=promax reorder;
- run;
可见,第一因子反映了hss, hse, hsm, gpa,这些应该与大学成绩有关。第二因子反映了satm, satv,与中学成绩有关。这样得到的因子已经比较好解释了。
再看斜交旋转的结果,从结果可以看到,此处的因子与正交旋转时相比并没有改进。
5.2
题目要求
解答
首先我们按照5.1节例2一样,输入数据如下:
- DATA SAS5_2;
- TITLE ’各州每十万人犯罪率’;
- INPUT STATE$ MURDER RAPE ROBBERY ASSAULT BURGLARY LARCENY AUTO;
- CARDS;
- ALABAMA 14.2 25.2 96.8 278.3 1135.5 1881.9 280.7
- ALASKA 10.8 51.6 96.8 284.0 1331.7 3369.8 753.3
- ARIZONA 9.5 34.2 138.2 312.3 2346.1 4467.4 439.5
- ARKANSAS 8.8 27.6 83.2 203.4 972.6 1862.1 183.4
- CALIFORNIA 11.5 49.4 287.0 358.0 2139.4 3499.8 663.5
- COLORADO 6.3 42.0 170.7 292.9 1935.2 3903.2 477.1
- CONNECTICUT 4.2 16.8 129.5 131.8 1346.0 2620.7 593.2
- DELAWARE 6.0 24.9 157.0 194.2 1682.6 3678.4 467.0
- FLORIDA 10.2 39.6 187.9 449.1 1859.9 3840.5 351.4
- GEORGIA 11.7 31.1 140.5 256.5 1351.1 2170.2 297.9
- HAWAII 7.2 25.5 128.0 64.1 1911.5 3920.4 489.4
- IDAHO 5.5 19.4 39.6 172.5 1050.8 2599.6 237.6
- ILLINOIS 9.9 21.8 211.3 209.0 1085.0 2828.5 528.6
- INDIANA 7.4 26.5 123.2 153.5 1086.2 2498.7 377.4
- IOWA 2.3 10.6 41.2 89.8 812.5 2685.1 219.9
- KANSAS 6.6 22.0 100.7 180.5 1270.4 2739.3 244.3
- KENTUCKY 10.1 19.1 81.1 123.3 872.2 1662.1 245.4
- LOUISIANA 15.5 30.9 142.9 335.5 1165.5 2469.9 337.7
- MAINE 2.4 13.5 38.7 170.0 1253.1 2350.7 246.9
- MARYLAND 8.0 34.8 292.1 358.9 1400.0 3177.7 428.5
- MASSACHUSETTS 3.1 20.8 169.1 231.6 1532.2 2311.3 1140.1
- MICHIGAN 9.3 38.9 261.9 274.6 1522.7 3159.0 545.5
- MINNESOTA 2.7 19.5 85.9 85.8 1134.7 2559.3 343.1
- MISSISSIPPI 14.3 19.6 65.7 189.1 915.6 1239.9 144.4
- MISSOURI 9.6 28.3 189.0 233.5 1318.3 2424.2 378.4
- MONTANA 5.4 16.7 39.2 156.8 804.9 2773.2 309.2
- NEBRASKA 3.9 18.1 64.7 112.7 760.0 2316.1 249.1
- NEVADA 15.8 49.1 323.1 355.0 2453.1 4212.6 559.2
- NEW_HAMPSHIRE 3.2 10.7 23.2 76.0 1041.7 2343.9 293.4
- NEW_JERSEY 5.6 21.0 180.4 185.1 1435.8 2774.5 511.5
- NEW_MEXICO 8.8 39.1 109.6 343.4 1418.7 3008.6 259.5
- NEW_YORK 10.7 29.4 472.6 319.1 1728.0 2782.0 745.8
- NORTH_CAROLINA 10.6 17.0 61.3 318.3 1154.1 2037.8 192.1
- NORTH_DAKOTA 0.9 9.0 13.3 43.8 446.1 1843.0 144.7
- OHIO 7.8 27.3 190.5 181.1 1216.0 2696.8 400.4
- OKLAHOMA 8.6 29.2 73.8 205.0 1288.2 2228.1 326.8
- OREGON 4.9 39.9 124.1 286.9 1636.4 3506.1 388.9
- PENNSYLVANIA 5.6 19.0 130.3 128.0 877.5 1624.1 333.2
- RHODE_ISLAND 3.6 10.5 86.5 201.0 1489.5 2844.1 791.4
- SOUTH_CAROLINA 11.9 33.0 105.9 485.3 1613.6 2342.4 245.1
- SOUTH_DAKOTA 2.0 13.5 17.9 155.7 570.5 1704.4 147.5
- TENNESSEE 10.1 29.7 145.8 203.9 1259.7 1776.5 314.0
- TEXAS 13.3 33.8 152.4 208.2 1603.1 2988.7 397.6
- UTAH 3.5 20.3 68.8 147.3 1171.6 3004.6 334.5
- VERMONT 1.4 15.9 30.8 101.2 1348.2 2201.0 265.2
- VIRGINIA 9.0 23.3 92.1 165.7 986.2 2521.2 226.7
- WASHINGTON 4.3 39.6 106.2 224.8 1605.6 3386.9 360.3
- WEST_VIRGINIA 6.0 13.2 42.2 90.9 597.4 1341.7 163.3
- WISCONSIN 2.8 12.9 52.2 63.7 846.9 2614.2 220.7
- WYOMING 5.4 21.9 39.7 173.9 811.6 2772.2 282.0
- ;
- RUN;
首先进行简单的因子分析:
- proc factor data=SAS5_2 simple corr;
- run;
前两个主分量解释了76.48%的方差。按照默认的选择因子个数的准则MINEIGEN,取大于1的特征值,所以取两个因子。
而因子模式阵的结果,发现第一主分量(因子)所有七个变量上都有正的载荷,可见这个因子反应了这个州总的犯罪情况。
第二主分量在burglary, larceny, atuo上有较大的正系数,在murder, rape, assault上有较大上负载荷,所以代表了暴力犯罪与其他犯罪的一种对比。
现在进行主因子分析。先产生方差最大正交预旋转,然后进行斜交旋转。
- proc factor data=SAS5_2 priors=smc
- rotate=promax reorder; /*ROTATE=PROMAX使得主因子分析后产生方差最大的正交预旋转*/
- run;
在初始的主因子结果之后是方差最大正交预旋转的结果:
可见,第一因子反映了LARCENY, BURGLARY, AUTO, ROBBERY, MURDER,ASSAULT, RAPE,这些应该与州的总体犯罪率有关。
第二因子反映ROBBERY, MURDER, ASSAULT, RAPE上有大的正载荷,说明反映了暴力犯罪的严重程度。这样得到的因子已经比较好解释了。
再看斜交旋转的结果,这里只给出了旋转后的因子模式阵:
从结果可以看到,此处的因子与正交旋转时相比并没有改进。我们在正交旋转中得到的系数就可以很好的解释变量了。
5.3
题目要求
解答
- data SAS5_3;
- input group $ x1 x2 x3 x4;
- cards;
- 1 6 -11.5 19 90
- 1 -4 -15.0 13 54
- 1 0 -23.0 5 -35
- 1 -100 -21.4 7 -15
- 1 -5 -18.5 15 18
- 1 10 -18.0 14 50
- 1 -8 -14.0 16 56
- 2 90.2 -17.0 17 3
- 2 0 -14.0 20 35
- 2 -100 -21.5 15 -40
- 2 13 -17.2 18 2
- 2 -11 -18.5 25 -36
- 2 0.5 -11.5 19 37
- 3 -11 -18.5 25 -36
- 3 0.5 -11.5 19 37
- 3 -10 -19.0 21 -42
- 3 20 -22.0 8 -20
- 3 0.6 -13.0 26 21
- 3 -40 -20.0 22 -50
- ;
- run;
- /*discrim可以进行参数判别和非参数判别*/
- proc discrim data=SAS5_3 outstat=SAS5_2_stat /*outstat指定输出输出判别函数的数据集*/
- method=normal pool=yes
- list crossvalidate;
- class group; /*class分类变量*/
- priors proportional;
- id group;
- var x1-x4;
- run;
上面是一些基本情况,和以各组的基本情况,列出了各组的先验概率。
上面具体列出了各类的线性判断函数的各常数项及系数值。
下面是每个观测的判别情况,包括原来为哪一类,现分入了哪一类,以及属于各类的后验概率值。带星号的为错判的观测。
比如,group 2一共有6个观测,5个正确判断,占83.33%,有1个错判为group 3。最后一行为各类的先验概率。下面为各类的错判率,我们可以看出group 1的判别正确率最高,group 3的判别正确率最低。
下面是对训练数据进行交叉核实判断的情况。交叉核实的想法是,为了判断观测i的判别是否正确,用删去第i个观测的训练数据集算出判别规则,然后用此方法来判断第i个观测。对每一个观测都进行这样的判别。我们可以得到下面的表格。
用交叉核实评价现有的group 1中7个判断对了6个,group 3的6个观测只判对了3个。并且,从表格中还可以看出,这时错误最少的group 1也有14.29%的错判率。
5.4
题目要求
解答
5.4.1
我们可以在INSIGHT中按照下面得进行操作:
得到如下的图:
5.4.2
- data SAS5_4;
- set SASuser.business;
- run;
- proc princomp data=SAS5_4 cov out=prin;
- var profits employs sales;
- run;
- proc gplot;
- plot prin2*prin1 ;
- run;
第一主分量贡献率已达99.88%,前两个主分量累计贡献率达到100.00%,所以前两个主分量可以表现原三个变量的大部分信息。
第一主分量的计算系数都是正数,sale上有很大的载荷,所以它是反映了一个公司的规模情况。
第二主分量在profits上有的正系数,而在employs, sales上有负系数,代表一个公司的经营状况(盈利水平)。从第一主分量与第二主分量的散点图来看,主要集中在横轴附近的二三象限小区域内。
下面画出前两个主成分的散点图。
5.4.3
- proc cluster data=SAS5_4 method=ward
- outtree=otree pseudo ccc;
- var profits employs sales;
- copy company;
- run;
我们可以得到如下的聚类过程
为了找到一个合理的分类个数,考察CCC、伪F、伪t-sq统计量和半偏R-sq统计量。因为类水平太大时的信息没有实际意义,所以我们对otree数据集取其类水平不超过30的观测,即:
- data ot;
- set otree;
- where _ncl_<=30;
- run;
通过如下的方法在INSIGHT中进行操作。
可以画出如下的图像。
由于ccc统计量,伪F,伪t^2 和半偏 R^2 都是看图中的局部最大值,用于确定聚类的个数,于是我们看下图。
看来,比较一致的是四类。 因为我们知道可以分成四类,所以用如下的tree过程绘制树图并产生分类结果数据集:
- proc tree data=otree graphics
- horizontal nclusters=4
- out=oclust;
- copy company;
- run;
从这张图上我们可以看出,也是可以分成两类的(因为可以看出很明显的两个大类)。
- proc tree data=ot graphics
- horizontal nclusters=2
- out=oclust;
- copy company;
- run;
上面的树形图过于复杂,我们是有ot画出简化后的聚类树,聚类个数为聚类为两类。
为了统计分类结果,使用下面的代码:
- proc freq data=oclust;
- tables company*cluster /nopct norow nocol;
- run;
下面我们在INSIGHT中用不同的颜色区分不同的类别。
我们首先将两个数据集合并。
- data SAS5_4_merge;
- merge SAS5_4 oclust;
- run;
5.4.4
- proc univariate
- data=SAS5_4 normal;
- var profits employs sales;
- run;
关于变量profits的正态性检验,可以看到检验shapiro-Wilk的p-值很小,故拒绝原假设,我们可以认为数据不服从正态分布。
关于变量employs的正态性检验,可以看到检验shapiro-Wilk的p-值很小,故拒绝原假设,我们可以认为数据不服从正态分布。
关于变量sales的正态性检验,可以看到检验shapiro-Wilk的p-值很小,故拒绝原假设,我们可以认为数据不服从正态分布。
下面我们来将数据做变换,使其接近正态分布。我们对profits和employs取对数,对sales取四次对数。然后再做正态性检验。
- data businessnew;
- set SAS5_4;
- l_profits=log(profits);
- l_employs=log(employs);
- l4_sales=log(log(log(log(sales))));
- run;
- proc univariate
- data=businessnew normal;
- var l_profits l_employs l4_sales;
- run;
- proc gchart
- data=businessnew;
- vbar l_profits;
- run;
- proc gchart
- data=businessnew;
- vbar l_employs;
- run;
- proc gchart
- data=businessnew;
- vbar l4_sales;
- run;
当然,我们也可以用INSIGHT进行操作,下面的结果是使用INSIGHT操作出的结果。
从图中可以看到此事新的数据的shapiro-Wilk的p-值大于0.5,故我们可以认为新数据是服从正态分布的。
我们画出新的数据的三维散点图如下。
再进行主成份分析
- proc princomp data=businessnew cov out=prin;
- var l_profits l_employs l4_sales;
- run;
- proc gplot;
- plot prin2*prin1 ;
- run;
第一主分量贡献率已达81.79%,前两个主分量累计贡献率达到99.96%,所以前两个主分量可以表现原三个变量的大部分信息。
第一主分量的计算系数都是正数,在l_profits与l_employs上有很大的正载荷,所以它是反映了一个公司的规模情况。
第二主分量在l_employs上有大的正系数,而在l_profits上有负系数,代表一个公司的人均劳动生产率。
下面画出前两个主成分的散点图。
现在开始做聚类分析。
- proc cluster
- data=businessnew method=ward
- outtree=otree pseudo ccc;
- var l_profits l_employs l4_sales;
- copy company;
- run;
为了找到一个合理的分类个数,考察CCC、伪F、伪t-sq统计量和半偏R-sq统计量。因为类水平太大时的信息没有实际意义,所以我们对otree数据集取其类水平不超过30的观测,即:
- data
- ot;
- set otree;
- where _ncl_<=30;
- run;
上面是四个变量的散点图,接下来我们看一下其中局部最大值的点的位置。
从各统计量图看来,局部最大值的ncl是2,故可以分成2类,所以用如下的tree过程绘制树图并产生分类结果数据集:
- proc tree data=otree graphics
- horizontal nclusters=2
- out=oclust;
- copy company;
- run;
上面的树形图过于复杂,我们是有ot画出简化后的聚类树,聚类个数为聚类为两类。
- proc tree data=ot graphics
- horizontal nclusters=2
- out=oclust;
- copy company;
- run;
为了统计分类结果,使用:
- proc tree data=otree graphics
- horizontal nclusters=2
- out=oclust;
- copy company;
- run;
- proc freq data=oclust;
- tables company*cluster /
- nopct norow nocol;
- run;
5.5
题目要求
解答
我们首先输入数据。
- data SAS5_5;
- input POP SCHOOL EMPLOY SERVICES HOUSE;
- CARDS;
- 5700 12.8 2500 270 25000
- 1000 10.9 600 10 10000
- 3400 8.8 1000 10 9000
- 3800 13.6 1700 140 25000
- 4000 12.8 1600 140 25000
- 8200 8.3 2600 60 12000
- 1200 11.4 400 10 16000
- 9100 11.5 3300 60 14000
- 9900 12.5 3400 180 18000
- 9600 13.7 3600 390 25000
- 9600 9.6 3300 80 12000
- 9400 11.4 4000 100 13000
- ;
- run;
下面开始做聚类分析。
- proc cluster data=SAS5_5 method=ward
- outtree=otree pseudo ccc;
- var POP SCHOOL EMPLOY SERVICES HOUSE;
- copy POP SCHOOL EMPLOY SERVICES HOUSE;
- run;
为了找到一个合理的分类个数,考察CCC、伪F、伪t-sq统计量和半偏R-sq统计量。因为类水平太大时的信息没有实际意义,所以我们对otree数据集取其类水平不超过30的观测,即:
- data ot;
- set otree;
- where _ncl_<=30;
- run;
从各统计量图看来,并不一致,分两类可能比较合适。因为我们知道可以分成两类,所以用如下的tree过程绘制树图并产生分类结果数据集:
- proc tree data=otree graphics
- horizontal nclusters=2 out=oclust;
- copy POP SCHOOL EMPLOY SERVICES HOUSE;
- run;
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论