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就可以了。
网友评论