导读
主成分分析(Principal Components Analysis,PCA),也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。
直观上,第一主成分轴 优于 第二主成分轴,具有最大可分性。
主坐标分析(Principal Coordinates Analysis,PCoA),即经典多维标度(Classical multidimensional scaling),用于研究数据间的相似性。
【二者差异】
PCA与PCoA都是降低数据维度的方法,但是差异在在于PCA是基于原始矩阵,而PCoA是基于通过原始矩阵计算出的距离矩阵。因此,PCA是尽力保留数据中的变异让点的位置不改动,而PCoA是尽力保证原本的距离关系不发生改变,也就是使得原始数据间点的距离与投影中即结果中各点之间的距离尽可能相关。
一、整理数据(转录组的基因表达量数据)
基因表达量数据通过RSEM软件定量后得到
# RSEM构建表达矩阵
rsem-generate-data-matrix Your_Data_Name*.genes.results > output.matrix
# output.matrix是没有标准化的表达量矩阵,原始count值的表达量矩阵
# 整理表头和初步筛选数据
awk 'BEGIN{printf "geneid\tI0-1\tI0-2\tI0-3\tI0-4\tI3-1\tI3-2\tI3-3\tI3-4\tU0-1\tU0-2\tU0-3\tU0-4\tU3-1\tU3-2\tU3-3\tU3-4\n"}{if($2+$3+$4+$5+$6+$7+$8+$9+$10+$11+$12+$13+$14+$15+$16+$17>10)print $0}' output.matrix > input.txt
# 将input.txt 导出
二、PCA分析及R包绘图(2D散点图)
library(ggplot2)
setwd("D:/Your/Working/Directory/")
## 载入数据与整理,目的是得到取整后的基因表达量矩阵(注意:原始矩阵中有0则应该整体加1处理)
rsem_counts <- read.table("input.txt",header = T,row.names = 1)
rsem_counts <- rsem_counts+1
rsem_counts <- as.matrix(rsem_counts)
data <- round(rsem_counts,digits = 0)
## 整理分组信息(注意:根据自己的实际情况来添加分组信息,切勿照抄)
period <- factor(c(rep("DPI0",4),rep("DPI3",4),rep("DPI0",4),rep("DPI3",4)))
condition <- factor(c(rep("infection",8),rep("control",8)))
#batch <- factor(c(rep("first",2),rep("second",3),rep("first",1),rep("second",2),rep("first",2),rep("second",2),rep("first",2),rep("second",2)))
##如有批次效应,可添加batch信息
coldata <-data.frame(row.names = colnames(data),condition,period)
## 差异表达分析的批次校正,但不改变原始矩阵(DESeqDataSetFormMatrix)
dds <-DESeqDataSetFromMatrix(countData = data,colData = coldata,design = ~period+condition)
## PCA分析
## 样本量超过30推荐用vsd,样本量低于30用rld
#vsd <- vst(dds, blind = FALSE)
#vsd_period <- plotPCA(vsd, intgroup=c("condition","period"),returnData = T)
rld <- rlog(dds)
rld_period <- plotPCA(rld, intgroup=c("condition","period"),returnData = T)
## 绘图
library(ggrepel)
p <- ggplot(rld_period, aes(x=PC1,y=PC2,color=period,shape=condition))+
geom_point(alpha=.7, size=7)+
geom_text_repel(aes(x=PC1,y=PC2,label=rownames(rld_period),size=14,col="black"))+
#scale_color_manual(values = rev(c("#0072B2","#D55E00","#CC79A7")))+
theme_bw()+
labs(x=paste("PCA 1", sep=""),
y=paste("PCA 2", sep="")) +
scale_colour_discrete(
name="period",
breaks = c("DPI0","DPI3"),
labels = c("DPI 0","DPI 3"))+
# 图例
theme(panel.background = element_blank(),
panel.grid = element_blank(),
plot.title = element_text(hjust = 0.5),
legend.position="right",
legend.title = element_text(size=14),
legend.text = element_text(size=14),
axis.text.x = element_text(size=14),
axis.text.y = element_text(size=14),
axis.title.x = element_text(size=14),
axis.title.y = element_text(size=14))
#添加标签,给-log10(padj)>10的基因加上Gene名字
#geom_text_repel(data=subset(dataset, -log10(pval)>10),aes(label=id),col="black", alpha =2)
p
三、PCoA分析及R包绘图(3D散点图)
除转录组研究以外,在16S微生物的研究中我们会根据物种丰度的文件对数据进行PCA或者PCoA分析,也是我们所说的β多样性分析。根据PCA或者PCoA的结果看感染组和对照组能否分开,以了解微生物组的总体变化情况。
具体内容及绘图方法可参考下面这篇文章。
16s—β多样性分析(R画三维PCoA图)
参考文章
R数据可视化4: PCA和PCoA图
详解主成分分析PCA