R语言与主成分分析_r语言主成分分析例题详解-程序员宅基地

技术标签: R  R语言与机器学习  机器学习  

主成分分析实例

例 9.1 (中学生身体四项指标的主成分分析)

在某中学随机抽取某个年纪30名学生,测量其身高(X1)、体重(X2)、胸围(X3)和坐高(X4),数据如表9.1所示。试对这30名中学生身体四项指标数据做主成分分析。

image

解析:用数据框的形式输入数据。用princomp()作主成分分析,由前面的分析,选择相关矩阵做主成分分析更合理。因此,这里选择的参数为cor=TRUE。最后用summary()列出主成分分析的值,这里选择loadings=TRUE。以下是相应的程序。

用数据框形式输入数据,做主成分分析,并显示分析结果:

image

summary()函数列出了主成分分析的重要信息:

  • Standard deviation:表示主成分的标准差,即主成分的方差的开方,也就是相应的特征值的开方
  • Proportion of Variance:表示的是方差的贡献率
  • Cumulative Proportion:表示的是方差的累计贡献率

由于在summary函数的参数中选取了loadings=TRUE,因此列出了loadings(载荷)的内容,它实际上是主成分对应于原始变量X1, X2, X3, X4的系数,即前面介绍的矩阵Q。因此得到:

image

由于前面两个主成分的累计贡献率已达到96%,另外两个主成分可以舍去,达到降维的目的

第一主成分对应系数的符号都相同,其值在0.5左右,它反映了中学生身材魁梧程度:身材高大是学生,他的四个部分的尺寸都比较大,因此,第一主成分的值就比较小(因为系数均为负数);而身材矮小是学生,他的四个部分的尺寸都比较小,因此,第一主成分的绝对值就较大。我们成第一主成分为大小因子。第二主成分是高度和围度的差,第二主成分值大的学生表明该学生“细高”,而第二主成分值越小的学生表明该学生“矮胖”,因此第二主成分为体型因子。

我们看一下各样本的主成分的值(用predict()函数):

image

从第一主成分来看,较小的几个值是25号样本、3号样本和5号样本,因此说明这个几个学生身材魁梧。而11号样本、15号样本和29号样本的值较大,说明这几个学生的身材瘦小。

从第二主成分来看,较大的几个值是23号样本、19号样本和4号样本,因此说明这几个学生属于“细高”型;而17号样本、8号样本和2号样本的值较小,说明这几个学生的身材属于“矮胖”型。

画出主成分的碎石图:

Image 219

还可以画出关于第一主成分和第二主成分样本的散点图,其图形如下所示:

Image 220image

问题:中间的四条箭头的线的作用是什么????

主成分分析的应用

1. 主成分分类

例 9.2 对128个成年男子的身材进行测量,每人各测得16项指标:身高(X1),坐高(X2),胸围(X3),头高(X4),裤长(X5),下档(X6),手长(X7),领围(X8),前胸(X9),后背(X10),肩厚(X11),肩宽(X12),袖长(X13),肋围(X14),腰围(X15)和腿肚(X16)。16项指标的相关矩阵R如表9.2所示(由于相关矩阵是对称的,只给出下三角部分)。试从相关矩阵R出发进行主成分分析,对16项指标进行分类。

image

解析:首先输入相关矩阵,再用princomp()对相关矩阵做主成分分析,最后画出各变量在第一、第二主成分下的散点图。

输入数据,按下三角输入,构成向量

image

做主成分分析,并绘制散点图:

image

image

由上图中得到:

  • 左上角的点看成一类,它们是“长”类:即身高(X1),坐高(X2),头高(X4),裤长(X5),下档(X6),手长(X7),袖长(X13)
  • 右下角的点看成一类,它们是“围”类,即身胸围(X3),领围(X8),肩厚(X11),肋围(X14),腰围(X15),腿肚(X16)
  • 中间的点看成一类,为体形特征指标:即前胸(X9),后背(X10),肩宽(X12)

2. 主成分回归

在回归分析的章节中,曾经讲过,当自变量出现多重共线性时,经典回归方法回归系数的最小二乘估计,一般效果会较差,而采用主成分回归能够克服直接回归的不足。下面用一个例子来说明如果做主成分回归,并且是如何克服经典回归的不足。

例 9.3 (法国经济分析数据)

考虑进口总额Y与三个自变量:国内总产值X1,储存量X2,总消费量X3(单位为10亿法郎)之间的关系。现收集了1949年至1959年共11年有效数据,如表9.3所示。试对此数据做经典回归分析和主成分回归分析。

image

解析:输入数据(采用数据框形式),再用一般线性回归方法做回归分析

image

从计算结果可以看出,按三个变量得到回归方程:

image

分析该方程,可以发现它并不合理。回到问题本身,Y为进口量,X1是国内总产值,而对应系数的符号却是负,也就说,国内总产值越高,其进口量却越少,这与实际情况并不相符。问其原因,三个变量存在着多重共线性(后面我们将会看到最下特征值接近于0)

Analysis of myself:绘制岭迹图

为了进一步可以看出变量间是否存在多重共线性,可以通过绘制岭迹图进行观察:

image

可见,在岭迹图中呈现出了“喇叭形”,因此很有可能在变量间存在多重共线性。为了克服多重共线性的影响,对变量做主成分分析回归,先做主成分分析:

image

从结果中可以看出,前两个主成分已达到99%的贡献率,因此第三主成分可以舍去。

下面做主成分回归,首先计算样本的主成分的预测值,并将第一主成分的预测值和第二主成分的预测值存放在数据框conomy中,然后再对主成分做回归分析:

image

回归系数和回归方程通过检验,而且效果显著,即得到回归方程;

image

上述方程得到的是响应变量与主成分的关系,但应用起来并不是很方便,还是希望得到相应变量与原变量之间的关系。由于:

image

以下通过变换,得到原坐标下的关系表达式:

image

在程序中,coef函数是提取回归系数,loadings为提取主成分对应的特征向量,conomy.pr$center为数据的中心,也就是数据X的平均值,conomy.pr$scale是数据的标准差,即Sii的开方。因此得到相应的系数,如上图。

即回归方程如下:

image

此时,对应X1, X2,X3的系数均为正数,比原回归方程更为合理。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yitian_z/article/details/103097418

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签