楼主: 李会超
32218 21

[程序分享] 一个主成分分析例子 [推广有奖]

  • 1关注
  • 31粉丝

教授

33%

还不是VIP/贵宾

-

威望
0
论坛币
121197 个
通用积分
59.1084
学术水平
140 点
热心指数
152 点
信用等级
84 点
经验
56182 点
帖子
1183
精华
1
在线时间
1120 小时
注册时间
2008-11-6
最后登录
2024-4-29

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
新建 Microsoft Word 文档.docx (235.46 KB)
文档排版有问题,可以下载附件,,假设有一个数据框a,num是样本序号,var1-var4是四个变量
> a
   num var1 var2  var3 var4
1    1 21.0 10.7  99.7  9.5
2    2  9.5 17.9 139.6 18.7
3    3 21.2  8.4  90.0  6.8
4    4 12.0 22.7  42.5 24.1
5    5  6.8 21.2  55.2 22.4
6    6  8.2 22.4  55.6 22.6
7    7  3.6 29.2  68.3 26.7
8    8 19.5 15.2  18.8 17.4
9    9 24.8  5.4  43.7  2.9
10  10  8.4 18.6 146.2 19.7
11  11 28.9  4.4   4.9  1.1
12  12 19.5 15.1  10.2 18.5
13  13 28.3  4.7  13.3  1.8
14  14 24.7 12.1 116.8 12.6
15  15 12.8 23.6  90.0 23.7
16  16 23.1  6.8 100.1  3.7
17  17 15.1 13.7 100.9 14.2
18  18  2.9  6.2  80.7  2.7
19  19 18.4 11.8  99.3 13.8
20  20 22.9 12.3  47.6 13.3
21  21  5.8 29.4  83.5 27.6
22  22 18.8  8.6  61.1  8.9
对四个变量进行主成分分析
pr<-princomp(~var1+var2+var3+var4,data=a,cor=TRUE,scores=TRUE)  #从相关矩阵求解,并列出主成分得分

> summary(pr,loadings=TRUE)
Importance of components:
                          Comp.1    Comp.2     Comp.3     Comp.4
Standard deviation     1.6430057 0.9753338 0.57235000 0.14721331
Proportion of Variance 0.6748669 0.2378190 0.08189613 0.00541794
Cumulative Proportion  0.6748669 0.9126859 0.99458206 1.00000000
Loadings:
     Comp.1 Comp.2 Comp.3 Comp.4
var1  0.530  0.111  0.836      
var2 -0.582  0.232  0.262 -0.734
var3 -0.233 -0.934  0.271      
var4 -0.571  0.247  0.399  0.674
Standard deviation 表示特征根的开方,Proportion表示主成分的贡献率,也就是,比如第1个特征值的贡献率0.6749 = 2.69946764 / (2.69946764+0.95127608+0.32758452+0.02167176)。
可以看出前两个主成分已经贡献了90%以上,可以保留两个主成分
loadings表示主成分的系数矩阵
> cor(a[,-1])        #列出四个变量的相关系数矩阵
           var1       var2       var3       var4
var1  1.0000000 -0.7352556 -0.3579002 -0.6830847
var2 -0.7352556  1.0000000  0.1825704  0.9752175
var3 -0.3579002  0.1825704  1.0000000  0.1738883
var4 -0.6830847  0.9752175  0.1738883  1.0000000

e<-cbind(a,pr$scores)       #加入主成分得分


> head(e)
  num var1 var2  var3 var4    Comp.1     Comp.2      Comp.3       Comp.4
1   1 21.0 10.7  99.7  9.5  0.775962 -0.8698329  0.34876728 -0.064368645
2   2  9.5 17.9 139.6 18.7 -1.422291 -1.4919746  0.09178083  0.082690047
3   3 21.2  8.4  90.0  6.8  1.209521 -0.7860833  0.09398025 -0.055128662
4   4 12.0 22.7  42.5 24.1 -1.416036  1.1717796  0.11009779  0.055716119
5   5  6.8 21.2  55.2 22.4 -1.610139  0.6979540 -0.48820410  0.118147542
6   6  8.2 22.4  55.6 22.6 -1.624810  0.7512985 -0.28509515  0.001357859





那么主成分得分是怎么来的呢?
先对原始变量进行标准化,然后乘以相应的特征向量就是主成分
b<-scale(a[,-1])
b%*%pr$loadings



特征值和特征向量隐藏的秘密主成分变量对应的特征向量的每个元素,与对应的特征值的平方根的乘积,等于该主成分变量,与该元素列标签对应的原始变量之间的相关系数。这是特征值与特征向量隐藏的秘密,可以用矩阵代数严格推导出来。不过这句话读起来比较费劲,我们用图8来表示这一关系。图中的eigVec1至eigVec4是4个特征向量,对应的特征值分别为eigVal1至eigVal4。我们在每个列中进行操作,用特征向量每个元素分别乘以对应特征值的平方根,得到该主成分变量与所有原始变量的相关系数。







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:主成分分析 主成分 Proportion Components importance

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
guo.bailing + 100 + 1 + 1 + 1 精彩帖子
xiaowenzi22 + 20 观点有启发
crystal8832 + 36 + 2 + 2 + 2 精彩帖子

总评分: 经验 + 120  论坛币 + 36  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

学无止境,坚持!
沙发
512002855 发表于 2014-12-12 17:30:15 |只看作者 |坛友微信交流群
精彩的分析

使用道具

藤椅
蓝色 发表于 2014-12-12 18:39:45 |只看作者 |坛友微信交流群
真不错啊

使用道具

板凳
ウ兴ウ 发表于 2015-2-5 17:02:04 |只看作者 |坛友微信交流群
一直没搞懂,主成分中的最后的方程怎么来,那些系数是直接来自loading吗?如何写出主成分与原变量的线性关系

使用道具

报纸
李会超 发表于 2015-2-5 17:03:34 |只看作者 |坛友微信交流群
ウ兴ウ 发表于 2015-2-5 17:02
一直没搞懂,主成分中的最后的方程怎么来,那些系数是直接来自loading吗?如何写出主成分与原变量的线性关系 ...
大致就是在某约束条件下,求的最大特征根和特征向量

使用道具

地板
ウ兴ウ 发表于 2015-2-5 17:07:39 |只看作者 |坛友微信交流群
李会超 发表于 2015-2-5 17:03
大致就是在某约束条件下,求的最大特征根和特征向量
额。。。我想知道score是怎么算出来的,而且那个是怎么用的

使用道具

7
李会超 发表于 2015-2-5 17:15:50 |只看作者 |坛友微信交流群
系数就是对应的特征向量

使用道具

8
美楠 发表于 2015-5-15 15:20:42 |只看作者 |坛友微信交流群
您好,我想对iris数据进行线性判别分析,我的思路是这样的,先对原始数据(除去类型那一列)进行标准化,然后进行主成分分析,看各个主成分的累计贡献率,如果前两个的累计贡献率大,那么我就提取前两个主成分,将它们作为lda()函数的训练数据,然后里面的groping我选原数据类别的那一列,不知道我这样的想法是否正确,再进行到主成分那块时候,loadings的comp.2里面有两个空的值,不知道这个是啥意思,
Importance of components:
                          Comp.1    Comp.2     Comp.3      Comp.4
Standard deviation     1.7026571 0.9528572 0.38180950 0.143445939
Proportion of Variance 0.7296245 0.2285076 0.03668922 0.005178709
Cumulative Proportion  0.7296245 0.9581321 0.99482129 1.000000000

Loadings:
             Comp.1 Comp.2 Comp.3 Comp.4
Sepal.Length  0.521 -0.377  0.720  0.261
Sepal.Width  -0.269 -0.923  -0.244 -0.124
Petal.Length  0.580            -0.142 -0.801
Petal.Width   0.565             -0.634  0.524

使用道具

9
mialrr 发表于 2015-6-30 15:02:45 |只看作者 |坛友微信交流群
抱歉,您的 论坛币 不足,无法下载。

使用道具

10
waterhorse 发表于 2015-7-2 11:23:13 |只看作者 |坛友微信交流群
explains well > XIE XIE

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 19:36