各省青年男子身体形态指标的主成分分析--基于R(附完整代码讲解)

     下表给出了全国28个省市19~22岁年龄组城市男生身体形态指标(身高x_{1}、坐高x_{2}、体重x_{3}、胸围x_{4}、肩宽x_{5}、和盆骨宽x_{6}),数据在文末。试对这六个指标进行主成分分析。(该题来自《多元统计分析-基于R》费宇第六章课后习题)

 

        读取数据,计算样本的相关系数矩阵R程序如下

d6.3<-read.csv("ex6.3.csv",header=T) #将ex6.7.csv中的数据读到R中
R=round(cor(d6.3[2:7]),3) #求样本相关系数矩阵,保留三位小数
R
symnum(cor(d6.3[2:7],use="complete.obs"))

       相关系数矩阵:

       可见 身高x_{1}、坐高x_{2}、体重x_{3}、胸围x_{4} 相关性较强, 胸围x_{4}、肩宽x_{5}、和盆骨宽x_{6} 相关性较强。再做主成分分析,求样本相关矩阵的特征值和主成分载荷,R程序和运行结果如下:

       由程序运行结果可知主成分的标准差,即相关系数矩阵的六个特征值开方各位:

\sqrt{\lambda _{1}}=1.7811\sqrt{\lambda _{2}}=1.1476\sqrt{\lambda _{3}}=0.9676

\sqrt{\lambda _{4}}=0.6481\sqrt{\lambda _{5}}=0.3500\sqrt{\lambda _{6}}=0.1781

       由输出结果可以看出,前三个主成分的累计贡献率为0.5278+0.2195+0.1560=0.9043,以及超过了80%,所以取三个主成分就可以了,第一主成分,第二主成分,第三主成分分别为:

 

       第一主成分对应的系数全为正,前三个(身高、坐高、体重)绝对值较大在0.5左右,后三个(胸围、肩宽、盆骨宽)较小,反映了19~22岁男生身形细长的均衡特点;第二主成分身高和体重对应系数为正,肩宽和盆骨宽对应系数为负,反映了一部分骨架大的学生;第三主成分在胸围系数上取值为负且绝对值较大,反映了一部分不高,但是骨架大的男生特点。

      预测程序及输出结果如下

       从第一主成分看北京,天津、黑龙江预测值为正,且绝对值较大,说明这三省男生比较高且瘦;江西、湖南、广东、四川 这四省预测值为负,且绝对值较大,说明这四省男生较矮胖;从第二主成分看,青海预测值为正且绝对值较大,说明青海省男生肩宽、盆骨宽较小,广西预测值为负且绝对值较大,说明广西男生肩宽、盆骨宽比较大。从第三主成分看,宁夏、浙江预测符号为正,且绝对值较大,反映了胸围和骨盆小的特点。

      下面用碎石图来分析主成分,R程序和图如下

screeplot(PCA6.3,type="lines") #画碎石图,用直线图类型

 28个省市男生六项身体形态指标主成分碎石图

        从碎石图容易直观看出,前三个主成分的方差占了总方差变化的大部分,因此本问题主成分的个数取为3是适当的。

       下面用主成分载荷矩阵的前两列数据做主成分载荷散点图,R程序如下:

load=loadings(PCA6.3) #提取主成分载荷矩阵
plot(load[,1:2]) #做前两个主成分的载荷散点图
rnames=c("身高","坐高","体重","胸围","肩宽","盆骨宽") #使用中文名称
text(load[,1],load[,2],labels=rnames,adj = c(-0.3,1.5)) #用中文对散点图标注
     abline(h=0,v=0) #划分象限

 两个主成分的载荷散点图

      前两个主成分的散点图进一步表示了前两个主成分各自代表身形高和宽的差异 。

      还可以用函数biplot()来绘制52个样本点在第一和第二主成分坐标系下的位置(即主成分得分),R程序如下:

biplot(PCA6.3,scale=0.5) #绘制28个样本点关于前两个主成分的散点图

28个省市男生六项身体形态指标双坐标散点图

       由于第一主成分是反映高瘦特点的,所以comp.1轴方向靠右样本点对应男生身形高瘦,例如图中1北京,2天津,8黑龙江;第二主成分反映肩宽、盆骨宽较小,所以cpmp.2轴对应男生盆骨,肩宽小,例如图中19青海,24广东。

所有R程序如下:

source("mvstats.R")
d6.3<-read.csv("ex6.3.csv",header=T) #将ex6.7.csv中的数据读到R中
R=round(cor(d6.3[2:7]),3) #求样本相关系数矩阵,保留三位小数
R
symnum(cor(d6.3[2:7],use="complete.obs"))
PCA6.3=princomp(d6.3[2:7],cor=T) #用样本相关系数矩阵做主成分分析
PCA6.3
summary(PCA6.3,loadings = T) #列出主成分分析结果
round(predict(PCA6.3),3)
screeplot(PCA6.3,type="lines") #画碎石图,用直线图类型

load=loadings(PCA6.3) #提取主成分载荷矩阵
plot(load[,1:2]) #做前两个主成分的载荷散点图
rnames=c("身高","坐高","体重","胸围","肩宽","盆骨宽") #使用中文名称
text(load[,1],load[,2],labels=rnames,adj = c(-0.3,1.5)) #用中文对散点图标注
abline(h=0,v=0) #划分象限

biplot(PCA6.3,scale=0.5) #绘制28个样本点关于前两个主成分的散点图

 ex6.3.csv:

地区	身高x1	坐高x2	体重x3	胸围x4	肩宽x5	骨盆宽x6
北京	173.28	93.62	60.1	86.72	38.97	27.51
天津	172.09	92.83	60.38	87.39	38.62	27.82
河北	171.46	92.73	59.74	85.59	38.83	27.46
山西	170.08	92.25	58.04	85.92	38.33	27.29
内蒙古	170.61	92.36	59.67	87.46	38.38	27.14
辽宁	171.69	92.85	59.44	87.45	38.19	27.1
吉林	171.46	92.93	58.7	87.06	38.58	27.36
黑龙江	171.6	93.28	59.75	88.03	38.68	27.22
山东	171.6	92.26	60.5	87.63	38.79	26.63
陕西	171.16	92.62	58.72	87.11	38.19	27.18
甘肃	170.04	92.17	56.95	88.08	38.24	27.65
宁夏	170.61	92.5	57.34	85.61	38.52	27.36
新疆	171.39	92.44	58.92	85.37	38.83	26.47
上海	171.83	92.79	56.85	85.35	38.58	27.03
江苏	171.36	92.53	58.39	87.09	38.23	27.04
浙江	171.24	92.61	57.69	83.98	39.04	27.07
安徽	170.49	92.03	57.56	87.18	38.54	27.57
河南	170.43	92.38	57.87	84.87	38.78	27.37
青海	170.27	91.94	56	84.52	37.16	26.81
福建	169.43	91.67	57.22	83.87	38.41	26.6
江西	168.57	91.4	55.96	83.02	38.74	26.97
湖北	169.88	91.89	56.87	86.34	38.37	27.19
湖南	167.94	90.91	55.97	86.77	38.17	27.16
广东	168.82	91.3	56.07	85.87	37.61	26.67
广西	168.02	91.26	55.28	85.63	39.66	28.07
四川	167.87	90.96	55.79	84.92	38.2	26.53
贵州	168.15	91.5	54.56	84.81	38.44	27.38
云南	168.99	91.52	55.11	86.23	38.3	27.14

猜你喜欢

转载自blog.csdn.net/weixin_44734502/article/details/129304743