主成分分析(PCA)和线性判别分析(LDA)在转录组测序中的作用
在转录组测序(RNA-Seq)数据分析中,主成分分析(PCA)和线性判别分析(LDA)是两种常用的降维和可视化技术,用于分析组间差异。它们在揭示样本之间的关系和区别方面具有重要作用。以下是PCA和LDA在转录组测序分析中的具体作用和区别:
主成分分析(PCA)
PCA是一种无监督的降维方法,通过寻找数据中方差最大的方向,将高维数据投影到低维空间,从而揭示数据的主要变异来源。具体作用如下:
-
降维和可视化:PCA将高维基因表达数据投影到二维或三维空间,便于可视化。通过PCA图,可以直观地观察不同样本之间的聚类和分布情况。
-
变异解释:PCA通过计算主成分,揭示了样本之间变异的主要方向和来源。前几个主成分通常解释了数据中大部分的变异,从而帮助理解哪些因素对数据差异贡献最大。
-
异常检测:通过PCA分析,可以识别出在主成分空间中偏离正常样本聚类的异常样本。这有助于发现潜在的技术或生物学偏差。
线性判别分析(LDA)
LDA是一种有监督的降维方法,通过寻找能够最大化组间差异和最小化组内差异的方向,将数据投影到低维空间。具体作用如下:
-
分类和判别:LDA用于最大化组间差异,帮助区分不同组的样本。它通过寻找最能区分不同组的线性组合,使得同一组的样本在投影空间中尽可能聚集,不同组的样本尽可能分离。
-
特征选择:LDA可以识别出对区分不同组最有贡献的基因或特征,有助于理解哪些基因在不同组间的差异中起主要作用。
-
降维和可视化:与PCA类似,LDA也能将高维数据投影到二维或三维空间,但其投影方向是根据组间差异优化的。因此,LDA图通常能够更清晰地展示不同组的分离情况。
比较与选择
- 无监督 vs 有监督:PCA是无监督方法,不依赖组标签,主要关注数据的总体变异。LDA是有监督方法,利用组标签信息,专注于最大化组间差异。
- 应用场景:PCA常用于探索性数据分析,识别主要变异来源和异常样本。LDA适用于需要明确组间区分的场景,例如分类任务或识别差异表达基因。
总结
在转录组测序数据分析中,PCA和LDA各有优势,通常可以结合使用。PCA用于初步探索和可视化数据,了解主要变异和异常样本;LDA用于进一步分析和解释组间差异,识别对区分不同组最重要的特征和基因。通过结合两者的方法,可以获得对转录组数据更全面和深入的理解。
示例数据
library("ggplot2")
# 示例数据
data <- data.frame(
A_1 = c(318536, 150557, 122505, 148148, 99082, 75485, 82255, 105419, 72649, 56965),
A_2 = c(313597, 167574, 134634, 24342, 116335, 97305, 97633, 22442, 88218, 74637),
A_3 = c(323183, 171279, 128499, 91839, 97296, 86613, 73546, 70606, 74153, 47187),
B_1 = c(328029, 155902, 128421, 152683, 113605, 87315, 79784, 102421, 78869, 61263),
B_2 = c(325703, 143182, 129297, 169909, 103126, 77979, 77330, 127013, 75375, 50147),
B_3 = c(331398, 146070, 110833, 265893, 89568, 102110, 95581, 88020, 86477, 49558),
C_1 = c(437734, 199430, 169011, 199631, 138707, 112732, 111200, 151674, 105523, 77909),
C_2 = c(411062, 166727, 194230, 175889, 153197, 106374, 119217, 129313, 86007, 86848),
C_3 = c(364969, 134596, 157595, 241338, 105637, 95466, 72333, 66475, 82056, 47129),
D_1 = c(422569, 225236, 181031, 53205, 165047, 130130, 126203, 43791, 109560, 95838),
D_2 = c(374910, 242135, 145604, 42864, 116415, 88220, 88443, 33516, 82931, 46182),
D_3 = c(414850, 181032, 171796, 12611, 114748, 121445, 109085, 13014, 112121, 87314)
)
row.names(data) <- paste0(rep("gene",10), 1:10)
data
PCA 主成分分析
首先,标准化数据(使用基因的平均值和标准差)
data_scaled <- t(scale(t(data)))
data_scaled <- na.omit(data_scaled)
data_scaled <- t(data_scaled)
执行PCA
pca_results <- prcomp(data_scaled, scale. = TRUE)
查看PCA的summary
summary(pca_results)
提取PCA得分(主成分分析的结果)
scores <- as.data.frame(pca_results$x)
为可视化准备数据框
scores$Sample <- rownames(scores)
绘制PCA图
ggplot(data = scores, aes(x = PC1, y = PC2, label = Sample)) +
geom_point(aes(color = Sample), size = 3) +
geom_text(aes(), size = 5) +
ggtitle("PCA Plot") +
xlab(paste("PC1 - ", round(pca_results$sdev[1] / sum(pca_results$sdev) * 100, 2), "% Variance")) +
ylab(paste("PC2 - ", round(pca_results$sdev[2] / sum(pca_results$sdev) * 100, 2), "% Variance")) +
theme_minimal()
解读
PCA(主成分分析)结果lda_results
总结提供了主成分的重要性信息,包括每个主成分的标准差、解释的方差比例和累积方差比例。这些信息帮助我们理解各主成分在数据降维和变异解释中的作用。
1. 标准差(Standard deviation)
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
Standard deviation 2.496 1.3601 0.86285 0.72948 0.60055 0.42397 0.27231 0.14237
PC9 PC10
Standard deviation 0.09053 0.03035
标准差表示每个主成分的离散程度。较大的标准差表示该主成分解释了更多的数据变异。这里,PC1(主成分1)的标准差为2.496,表明它在数据中具有最大的变异解释能力。随着主成分序号的增加,标准差逐渐减小,表示每个后续主成分解释的数据变异逐渐减少。
2. 方差比例(Proportion of Variance)
Proportion of Variance 0.623 0.1850 0.07445 0.05321 0.03607 0.01798 0.00742 0.00203
PC9 PC10
Proportion of Variance 0.00082 0.00009
方差比例表示每个主成分解释的总变异的比例。PC1解释了62.3%的变异,PC2解释了18.5%的变异,这两个主成分加起来解释了80.79%的总变异。其余主成分解释的变异比例逐渐减少,到PC10时仅解释了0.009%的变异。这表明前几个主成分解释了数据中的大部分变异。
3. 累积方差比例(Cumulative Proportion)
Cumulative Proportion 0.623 0.8079 0.88239 0.93560 0.97167 0.98965 0.99706 0.99909
PC9 PC10
Cumulative Proportion 0.99991 1.00000
累积方差比例表示从PC1到当前主成分的所有主成分共同解释的总变异比例。PC1和PC2共同解释了80.79%的变异,前三个主成分共同解释了88.24%的变异,前四个主成分共同解释了93.56%的变异。到PC10时,所有主成分共同解释了100%的变异。这表明我们可以通过前几个主成分捕捉到数据中的大部分信息,而不需要考虑所有主成分。
总结
- 标准差显示了每个主成分的离散程度,较大的标准差表明该主成分解释了更多的数据变异。
- 方差比例说明了每个主成分解释的总变异的比例,前几个主成分通常解释了大部分变异。
- 累积方差比例显示了多个主成分共同解释的总变异比例,通过累积方差比例可以确定需要多少主成分来捕捉大部分信息。
通过这些结果,我们可以确定前两个主成分(PC1和PC2)解释了大部分的总变异(80.79%),因此可以用这两个主成分来进行降维和可视化分析,从而简化数据并保留主要信息。
LDA 线性判别分析
构建示例标签数据
labels <- data.frame(Sample = colnames(data),
Label = rep(c("A","B","C","D"), each=3))
rn <- labels$Sample
labels <- as.data.frame(labels[, -1])
rownames(labels) <- rn
合并数据和标签
data$Label <- labels[row.names(data), ]
标准化数据(使用基因的平均值和标准差)
data_scaled <- t(scale(t(data[, -ncol(data)])))
data_scaled <- na.omit(data_scaled)
data_scaled <- t(data_scaled)
添加标签列
data_scaled <- data.frame(data_scaled)
data_scaled$Label <- labels[row.names(data_scaled), ]
执行LDA分析
lda_results <- lda(Label ~ ., data = data_scaled)
提取LDA得分(线性判别分析的结果)
scores <- as.data.frame(predict(lda_results)$x)
为可视化准备数据框
scores$Sample <- row.names(scores)
scores$Label <- data_scaled$Label
绘制LDA图
ggplot(data = scores, aes(x = LD1, y = LD2, label = Sample)) +
geom_point(aes(color = Label), size = 3) +
geom_text(aes(), size = 5) +
ggtitle("LDA Plot") +
xlab("LD1") +
ylab("LD2") +
theme_minimal()
解读
通过线性判别分析(LDA)得到的结果> pca_results
可以分为几个部分来解读,包括先验概率、组均值、线性判别系数和轨迹比例。这些结果帮助我们理解哪些基因对不同组之间的分类最为重要,以及不同组之间的主要差异来源。
1. 先验概率(Prior probabilities of groups)
Prior probabilities of groups:
A B C D
0.25 0.25 0.25 0.25
先验概率显示了在进行LDA之前各组的样本比例。这里各组(A, B, C, D)的先验概率均为0.25,表明每组样本数相等。
2. 组均值(Group means)
Group | gene1 | gene2 | gene3 | gene4 | gene5 | gene6 | gene7 | gene8 | gene9 | gene10 |
---|---|---|---|---|---|---|---|---|---|---|
A | -0.9751585 | -0.3151857 | -0.7293330 | -0.5087718 | -0.5833681 | -0.7083208 | -0.5367432 | -0.2942992 | -0.6882049 | -0.2985077 |
B | -0.7618839 | -0.7577257 | -0.9452168 | 0.7573321 | -0.6758072 | -0.5504162 | -0.5500903 | 0.5820436 | -0.5503693 | -0.6217909 |
C | 0.8736574 | -0.2017609 | 0.9788117 | 0.8681527 | 0.6391789 | 0.3804729 | 0.3539487 | 0.8030534 | 0.2442224 | 0.3018909 |
D | 0.8633850 | 1.2746723 | 0.6957381 | -1.1167130 | 0.6199964 | 0.8782641 | 0.7328848 | -1.0907977 | 0.9943518 | 0.6184077 |
组均值表示每组在各基因上的平均表达值。这些值有助于理解不同组之间在各基因表达水平上的差异。例如,gene1在组A中的平均值为-0.9751585,而在组C中的平均值为0.8736574,表明gene1在这两组之间有显著的表达差异。
3. 线性判别系数(Coefficients of linear discriminants)
Coefficients of linear discriminants:
LD1 LD2 LD3
gene1 2.87001748 2.40981985 -0.5387794
gene2 0.92903926 1.12684034 0.4022120
gene3 2.06040983 -2.83222289 -0.6793422
gene4 -0.04227224 -0.92495465 0.4810559
gene5 -0.96773759 -1.15681489 0.3982583
gene6 1.62897970 0.06376403 0.2159269
gene7 -0.64483184 -0.36009951 -0.1075160
gene8 -0.77045968 -1.55510784 0.1366164
gene9 -1.73756774 -2.46327434 1.4394242
gene10 -0.58149369 2.96705345 -0.6955280
线性判别系数表示各基因在判别不同组时的重要性和贡献度。较大的系数值意味着该基因在区分组别时起到了更重要的作用。例如,gene1在LD1和LD2中都有较大的系数(2.87001748和2.40981985),表明它在这两个线性判别函数中对区分组别有很大贡献。
4. 轨迹比例(Proportion of trace)
Proportion of trace:
LD1 LD2 LD3
0.6710 0.3209 0.0081
轨迹比例表示各线性判别函数(LD)的解释能力。LD1解释了67.10%的组间差异,LD2解释了32.09%,而LD3仅解释了0.81%。这表明LD1和LD2是主要的判别函数,几乎涵盖了所有的组间差异。
总结
- 先验概率表明每组样本数相等。
- 组均值显示了各组在每个基因上的平均表达水平,帮助识别不同组之间的基因表达差异。
- 线性判别系数揭示了哪些基因对区分组别最为重要。
- 轨迹比例说明了主要判别函数(LD1和LD2)在解释组间差异时的作用。
通过这些结果,可以更好地理解转录组数据中组间差异的主要来源,并识别出在分类中起关键作用的基因。