美文网首页
MSI数据之PCA

MSI数据之PCA

作者: 蚂蚁爱吃饭 | 来源:发表于2021-05-25 17:28 被阅读0次

    PCA:主成分分析

    > head(d2)
          MSI01_13  MSI03_13  MSI04_14  MSI05_11 MSI06_16_17  MSI07_16  MSI09_13
    PS51 0.4498141 0.4651972 0.4848943 0.4361070  0.20826833 0.3769517 0.6301273
    PS54 0.4746377 0.5844156 0.7548387 0.3363914  0.27750809 0.4518519 0.5860058
    PS24 0.3634085 0.4045618 0.3145462 0.5762712  0.07561308 0.2380952 0.2373188
    

    首先对数据进行去中心化(矩阵X),再计算协方差矩阵(就是样本与样本[列与列]之间的协方差,就得到了一个协方差的方阵:1/mXXt,就是X乘以X的转置除以m,m是样本数),再对协方差矩阵计算特征值及特征向量。注意:这里的矩阵跟我们平时用的矩阵有点点不一样,我们平时习惯每列为一个特征,每行为一个样本,但这里需要做一个转置,即每列是一个样本,每行是一个特征。因为我们在做去中心化的时候,是对每一行(每个特征的各个不同样本的值)做去中心化。毕竟PCA是通过方差分析去找到样本之间的差异。PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

    dat_eigen<-scale(d2,scale=T)   #对数据进行中心化
    dat_eigen1<-cor(dat_eigen)  #计算协方差
    dat_eigen2<-eigen(dat_eigen1)  #计算特征值、特征向量
    > head(dat_eigen2)
    $values
     [1] 21.64952400  1.59014646  1.41402424  1.34024733  1.15384278  1.12539066
     [7]  0.96383043  0.81005078  0.72271816  0.63414797  0.58440232  0.50756673
    [13]  0.49793036  0.43728669  0.41097126  0.36548761  0.33579268  0.29435889
    [19]  0.27654133  0.25101061  0.22254893  0.20379585  0.17582524  0.14191081
    [25]  0.12978371  0.11628539  0.10816243  0.09840867  0.07600092  0.07335412
    [31]  0.06297383  0.05873924  0.05109777  0.03713575  0.03332568  0.02656279
    [37]  0.01881759
    $vectors
                 [,1]         [,2]        [,3]         [,4]          [,5]
     [1,] -0.19082724 -0.089913619  0.02463533 -0.043029856 -0.0030625302
     [2,] -0.18679563 -0.045154253 -0.06958644  0.046588102 -0.0644640345
     [3,] -0.16112044  0.375311725  0.06290167  0.052979424 -0.1319818670
     [4,] -0.15138995 -0.479078021 -0.05317186 -0.035116314  0.0701551614
     [5,] -0.16926155  0.137769933  0.01135951  0.204991543  0.0769034415
     [6,] -0.16471325 -0.058799750 -0.10011849  0.312563972 -0.2361555168
     [7,] -0.14662039  0.261277365  0.12161985 -0.094210792  0.2345824869
    library(magrittr)
    >dat_eigen<-scale(d2,scale=T) %>% cor() %>% eigen()  #使用管道
    

    也可以使用prcomp函数:

     > d2.pca<-prcomp(d2,scale=T,retx=T)
    > summary(d2.pca)
    Importance of components:
                              PC1     PC2     PC3     PC4     PC5     PC6     PC7
    Standard deviation     4.6529 1.26101 1.18913 1.15769 1.07417 1.06084 0.98175
    Proportion of Variance 0.5851 0.04298 0.03822 0.03622 0.03118 0.03042 0.02605
    Cumulative Proportion  0.5851 0.62810 0.66632 0.70254 0.73372 0.76414 0.79019
                               PC8     PC9    PC10    PC11    PC12    PC13    PC14
    Standard deviation     0.90003 0.85013 0.79633 0.76446 0.71244 0.70564 0.66128
    Proportion of Variance 0.02189 0.01953 0.01714 0.01579 0.01372 0.01346 0.01182
    Cumulative Proportion  0.81208 0.83162 0.84875 0.86455 0.87827 0.89172 0.90354
                              PC15    PC16    PC17    PC18    PC19    PC20    PC21
    Standard deviation     0.64107 0.60456 0.57948 0.54255 0.52587 0.50101 0.47175
    Proportion of Variance 0.01111 0.00988 0.00908 0.00796 0.00747 0.00678 0.00601
    Cumulative Proportion  0.91465 0.92453 0.93360 0.94156 0.94903 0.95582 0.96183
                              PC22    PC23    PC24    PC25    PC26    PC27    PC28
    Standard deviation     0.45144 0.41932 0.37671 0.36026 0.34101 0.32888 0.31370
    Proportion of Variance 0.00551 0.00475 0.00384 0.00351 0.00314 0.00292 0.00266
    Cumulative Proportion  0.96734 0.97209 0.97593 0.97944 0.98258 0.98550 0.98816
                              PC29    PC30   PC31    PC32    PC33   PC34   PC35
    Standard deviation     0.27568 0.27084 0.2509 0.24236 0.22605 0.1927 0.1826
    Proportion of Variance 0.00205 0.00198 0.0017 0.00159 0.00138 0.0010 0.0009
    Cumulative Proportion  0.99022 0.99220 0.9939 0.99549 0.99687 0.9979 0.9988
                              PC36    PC37
    Standard deviation     0.16298 0.13718
    Proportion of Variance 0.00072 0.00051
    Cumulative Proportion  0.99949 1.00000
    

    特征值=标准差的平方
    eigen values=sdev^2
    Proportion of Variance=eigen value/sum(eigen values)=Standard deviation^2/sum(eigen values)
    我这里是37个,可以算出21.64952400/37=0.5851。第一个PC占了一大半,后面的占比都不高。

    计算特征值特征向量,是需要做协方差计算的,当数据量很大(很多行很多列)时,这个计算太大了,于是有另外一个分解的方法:SVD。

    依葫芦画瓢:


    image.png
    image.png
    image.png
    image.png
    image.png

    我这里几个绿色的样本(Pxx)是明确的MSI-H的,蓝色的是Tumor的(MS状态未知),红色的是gDNA(理论上都是MSS)。可以看到T28样本跑到MSI-H那去了,我看下这个样本的原始数据:

    $tail -5 MSI
    MSI34_13        0.476618705035971       -0.0747779759640289
    MSI38_13        0.487825356842989       -0.114388608157011
    MSI39_13_14     0.368807339449541       -0.0332916275504587
    MSI44_12        0.526033690658499       -0.126448941341501
    MSI-H   30
    

    这个是我们用偏差分析判为MSI-H的样本。还挺符合的~

    PCA主要是用于数据降维。他通过计算样本与样本(矩阵的列之间)的协方差,所以它是一个对称矩阵。协方差越大,两个样本的相关性越大(话也不能这么说,需要除以两个的标准差,这个就是Pearson值了~) 。就是通过一步转换,把矩阵映射到新的坐标系(假如不降维,那么就是原来的秩的矩阵),但往后的PC对variation的贡献是越来越小,也即特征值越小,可以去掉,一般选择Cumulative Proportion>80-90%的PCs就可以了。

    相关文章

      网友评论

          本文标题:MSI数据之PCA

          本文链接:https://www.haomeiwen.com/subject/weqcsltx.html