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。我们在每个列中进行操作,用特征向量每个元素分别乘以对应特征值的平方根,得到该主成分变量与所有原始变量的相关系数。

  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/100thMountain/p/5371407.html
Copyright © 2011-2022 走看看