zoukankan      html  css  js  c++  java
  • 一个主成分分析例子

    文档排版有问题,可以下载附件,,假设有一个数据框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,prscores)       #加入主成分得分 
     
     
    > 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%*%prloadings



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

  • 相关阅读:
    接口框架项目示例
    接口框架开发流程总结
    requests库的简单使用
    使用flask创建简单的接口
    session和token
    解决log函数生成重复log的问题
    自定义封装logging参考
    织梦dedecms做的网站首页标题篡改跳转赌博网站解决方案
    织梦网站安全查杀
    织梦重置密码的方法和织梦网站后台登陆账号修改方法
  • 原文地址:https://www.cnblogs.com/100thMountain/p/5371407.html
Copyright © 2011-2022 走看看