随机抽取30名某年级中学生,测量其身高(X1)、体重(X2)、胸围(X3)和坐高(X4),数据如下表,

n

X1

X2

X3

X4

n

X1

X2

X3

X4

1

148

41

72

78

16

152

35

73

79

2

139

34

71

76

17

149

47

82

79

3

160

49

77

86

18

145

35

70

77

4

149

36

67

79

19

160

47

74

87

5

159

45

80

86

20

156

44

78

85

6

142

31

66

76

21

151

42

73

82

7

153

43

76

83

22

147

38

73

78

8

150

43

77

79

23

157

39

68

80

9

151

42

77

80

24

147

30

65

75

10

139

31

68

74

25

157

48

80

88

11

140

29

64

74

26

151

36

74

80

12

161

47

78

84

27

144

36

68

76

13

158

49

78

83

28

141

30

67

76

14

140

33

67

77

29

139

32

68

73

15

137

31

66

73

30

148

38

70

78

试用SAS编程完成下列问题

  1. 求其样本相关矩阵R及它的特征值和相应正交单位化特征向量;
  2. 求前两个标准化样本主成分及其累计贡献率;
  3. 试对中学生身体指标数据的做解释。

实验代码:

proc import out=temp2                                                                                                                   
datafile="C:\Users\86166\Desktop\IT\SAS实验\实验7\1.xls"                                                                                
DBMS=EXCEL2000 replace;                                                                                                                 
run;                                                                                                                                    
/*proc standard mean=0 std=1 data=temp1 out=temp2;                                                                                      
var X1-X4;                                                                                                                              
run;*/                                                                                                                                  
proc princomp data=temp2 prefix=S out=temp3 outstat=temp4;/*std  (type=cov/corr)*/                                                                       
var X1-X4;                                                                                                                              
run;                                                                                                                                    
options ps=32 ls=85;                                                                                                                    
proc plot data=temp3;                                                                                                                   
plot S2*S1 $ n="*"/                                                                                                                     
href=-1 href=2 vref=0;/*在横坐标S1=-1和2处画垂线,在纵坐标Z2=0处画垂线*/   
/*title '主成分散点图';*/                                                                 
run;                                                                                                                                    
proc sort data=temp3;   /*按S1的得分值从小到大排序*/                                                                                    
by S1;                                                                                                                                  
run;                                                                                                                                    
proc  print  data=temp3;                                                                                                                
var  n  S1  S2  X1-X4;                                                                                                          
run;
proc sort data=temp3;   /*按S2的得分值从小到大排序*/                                                                                    
by S2;                                                                                                                                  
run;                                                                                                                                    
proc  print  data=temp3;                                                                                                                
var  n  S1  S2  X1-X4;                                                                                                          
run;
proc  print  data=temp4;                                                                                                                                                                                                                        
run;

 

 

 

实验解释和分析:

1、其样本相关矩阵R及它的特征值和相应正交单位化特征向量:

相关阵:

特征值:       正交单位化特征向量:

2、前两个标准化样本主成分及其累计贡献率:       

3、试对中学生身体指标数据的做解释:

   PRINCOMP过程由相关阵出发进行主成分分析.由输出7.2.1中相关阵的特征值可以看出,第一主成分的贡献率已高达88.53%;且前二个主成分的累计贡献率已达96.36%.因此只须用两个主成分就能很好地概括这组数据.

   另由第三和四个特征值近似为0,可以得出这4个标准化后的身体指标变量(Xi,i=1,2,3,4)有近似的线性关系(即所谓共线性),如

 0.505747X1-0.690844X2+0.461488X3-0.232343X4≈c(常数).

由最大的两个特征值对应的特征向量可以写出第一和第二主成分:

S1=0.4970X1+0.5146X2+0.4809X3+0.5069X4

S2=-0.5432X1+0.2102X2+0.7246X3-0.3683X4

第一和第二主成分都是标准化后变量Xi(i=1,2,3,4)的线性组合,且组合系数就是特征向量的分量.

由于第一主成分对所有变量都有近似相等的载荷,因此可以认为第一主成分是对学生身材的总度量。他的特征向量的每个分量均在0.5附近,且都是正值,它反映学生身材的魁梧程度.身体高大的学生,他的4个部位的尺寸都比较大;而身体矮小的学生,他的4个部位的尺寸都比较小.因此我们称第一主成分为大小因子。

由于第二主成分在其特征向量的第一个分量(即身高X1的系数(载荷))和第四个分量(即坐高X4的系数(载荷))为负值,而第二(即体重X2的系数)和第三个分量(即胸围X3的系数)为正值,其中胸围X3的载荷是最高的,所以它直接反映学生的胖瘦情况在学生身材上体现,故称第二主成分为胖瘦因子.

由S1的排序表中可知得分值越低的学生身材魁梧程度越低,即越矮小,如学生11排在第一说明他的身高矮小不魁梧;得分值越高的学生则反之,如学生25排在最后说明他的身高高大,体格魁梧。

同理如果按照S2的来进行排序可知,得分值越低的学生他就越廋,得分值高的学生他就越胖。(这个取决于因子的载荷为正,故得分值越高,因子拟合程度越高,所以分高,重量和胸围越大,人越胖)

PLOT过程产生的输出图形,从图中可以直观地看出,按学生的身体指标尺寸,这30名学生大约应分成三组(以第一主成分得分值为-1和2为分界点).

每一组包括哪几名学生由每个散点旁边的序号可以得知.更详细的信息可从PRINT过程产生的输出数据列表中得到.

以上输出列表中把30个观测按第一主成分从小到大重新排序后的输出结果.从这里可以得到分为三组时各组学生的更多的信息如下:G1={11,15,29,10,28,6,24,14,2,27,18},G2={4,30,22,1,16,26,23,21,8,9,7,17},G3={20,13,19,12,5,3,25}若考虑用S1 ,S2进行聚类,这就是主成分聚类方法.本次实验没有按S2来排序打印,也可参考上述方法进行操作。

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐