R语言之主成分分析

主成分分析(Principal Component Analysis,PCA),就是将多个变量通过 线性变换以选出较少个数重要变量的一种多元统计分析方法。又称主分量分析。主成分分析所关心的问题,是通过一组变量的几个线性组合来解释这组变量的方差-协方差结构,它的一般目的是:(1)数据的压缩;(2)数据的解释。

注意事项:在主成分分析中变量的数量不得大于样本数量;如果样本量小于变量数,但是样本量足够大,那么也可以通过抽样实现主成分分析。

主成分分析的相关步骤及原理可以参照以下的链接:

1.http://wiki.mbalib.com/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E6%B3%95

2.http://ufldl.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90

3.http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

R语言中主成分分析过程案例:

test<-data.frame( a=c(148, 129, 160, 149, 159, 142, 153, 140,151, 139, 150, 161, 148, 140, 137, 152, 149, 145, 160, 166, 151, 147, 157, 137, 157, 161, 144, 146, 139, 148), b=c(41, 34, 49, 36, 45, 51, 43, 43, 42,31, 29, 37, 59, 33, 31, 35, 47, 45, 47, 44, 42, 38, 39, 37, 48, 36, 36, 40, 35, 38), c=c(72, 71, 77, 67, 80, 66, 76, 77, 77,68, 64, 78, 78, 67, 66, 73, 82, 70, 74, 78, 73, 73, 68, 65, 80, 74, 68, 67, 68, 70), d=c(78, 73, 86, 79, 86, 76, 83, 79, 80,74, 74, 84, 83, 47, 73, 79, 79,67, 87, 85, 82, 88, 80, 55, 88, 70, 76, 76, 73, 78) )

sd=scale(test)

pca<-princomp(sd,cor=TRUE)#data为数据矩阵或数据框,cor为是否用相关阵,默认为协差阵,scores为是否输出成分得分

screeplot(pca,type="line",mian="碎石图",lwd=2) #画出碎石图,其他碎石图:screeplot(pca) #条型;biplot(pca) #分散型

s=pca$scores[,1:2]#输出前两个主成分的得分

summary(data.pr,loading=TRUE)#loading=TURE选项列出了主成分对应原始变量的系数

其中:standarddeviation 标准偏差Porportion of Variance 贡献率(方差比例)

comulative proportion 累计贡献率(累计比例)

s=pca$scores[,1:2]#输出前两个主成分的得分

c=s[1:评价对象的个数,1]*q1+s[1:评价对象的个数,2]*q2

cbind(s,c)

然后把综合得分c的值从小到大排序,得到最后评价结果。

欢迎大家学习交流

本文分享自微信公众号 - R语言交流中心(R_statistics)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nodejs全栈开发

一道关于组合的js算法题目

有一个数组,如果有3个值:[3,2,6]。交叉组合后返回:3-2,3-6,2-6,3-2-6

12420
来自专栏nodejs全栈开发

微信JS-SDK签名接口的使用与开发

最近诸事缠身好久没有写文章了。前不久将与微信公众号有关的一些知识点进行了梳理,微信公众号开发过程中,用最多的就是微信js-sdk了。但是使用微信js-sdk需要...

35840
来自专栏nodejs全栈开发

算法题之优势洗牌

给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。

8820
来自专栏nodejs全栈开发

Express中间件的使用、原理及实现

现在在一些企业里用nodejs做服务端开发已经很普遍了,这里面最火的框架当然要数express了,express将nodejs原生的支持的http模块进行了简单...

16240
来自专栏nodejs全栈开发

算法题之跳跃游戏

上期新建了一个专栏并发布了一道算法题,今天继续,今天给大家带来的题目名为“跳跃游戏”。题目如下:

15440
来自专栏nodejs全栈开发

nodejs如何解析excel

用nodejs操作excel需要借助一个npm包,包名称为:node-xlsx,包的地址为:https://www.npmjs.com/package/node...

81950
来自专栏格姗知识圈

强大、有趣、好玩、又装B的19 个 Linux 命令!

输出一句话,有笑话,名言什么的 (还有唐诗宋词sudo apt-get install fortune-zh)

15830
来自专栏nodejs全栈开发

微信授权接口的使用设计与实现

今天给大家演示一下微信授权的接口的实现,首先这个接口的实现有好多种方法,所以咱们有必要根据需求设计一下,将接口设计的通用和灵活。

15320
来自专栏格姗知识圈

Java进阶篇设计模式之三 ----- 建造者模式和原型模式

在上一篇中我们学习了工厂模式,介绍了简单工厂模式、工厂方法和抽象工厂模式。本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式。

11630
来自专栏知了一笑

SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开发以及整...

11030

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励