13  三维PCA图

13.1 什么是三维PCA?

人眼一般能感知的空间为二维和三维。高维数据可视化的重要目标就是将高维数据呈现于二维或三维空间中。高维数据变换就是使用降维度的方法,使用线性或非线性变换把高维数据投影到低维空间,去掉冗余属性,但同时尽可能地保留高维空间的重要信息和特征。

主成分分析法,也被称为主分量分析法,是很常用的一种数据降维方法。主成分分析法采用一个线性变换将数据变换到一个新的坐标系统,使得任何数据点投影到第一个坐标(第一主成分)的方差最大,在第二个坐标(第二主成分)的方差为第二大,在第三个坐标(第三主成分)的方差为第三大,以此类推。因此,主成分分析可以减少数据的维数,并保留对方差贡献最大的特征。

三维PCA和普通PCA的区别就是多了一个维度。

本文我们就来讨论一下三维PCA图是如何绘制的以及如何对其进行解读。

13.2 绘图前的数据准备

demo数据可以在https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/PCA.rar下载。

13.2.1 PCA数据

数据来源一般是搜库结果定量表。包含2个维度的数据,一般情况下,每一行是一个基因,每一列是一个样本。

13.2.2 分组数据(可选)

行名的名称和个数要和之前的PCA数据保持一致,列名为分组名称,可以包含不止一个分组。

13.3 R语言怎么画三维PCA

# 加载R包,没有安装请先安装  install.packages("包名") 
library(scatterplot3d)

# 读取PCA数据文件
df = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/data.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
                header = T,    # 指定第一行是列名
                row.names = 1  # 指定第一列是行名
)
df=t(df) # 对数据进行转置,如果想对基因分组则不用转置

# 读取样本分组数据文件
dfGroup = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/PCA/sample.class.txt",
                     header = T,
                     row.names = 1
)

# PCA计算
pca_result <- prcomp(df,
                     scale=T  # 一个逻辑值,指示在进行分析之前是否应该将变量缩放到具有单位方差
)
pca_result$x<-data.frame(pca_result$x)
# 设置颜色,有几个分组就写几个颜色
colors <- c("red","blue","green")
colors <- colors[as.numeric(as.factor(dfGroup[,1]))]
# 设置点形状,仅供参考
# shape<-16:18
# shape<-shape[as.numeric(as.factor(dfGroup[,1]))]

# 计算PC值,并替换列名,用来替换坐标轴上的标签
# pVar <- pca_result$sdev^2/sum(pca_result$sdev^2)
# pVar = round(pVar,digits = 3)
# colnames(pca_result$x) = c(
#   paste0("PC1 (",as.character(pVar[1] * 100 ),"%)"),
#   paste0("PC2 (",as.character(pVar[2] * 100 ),"%)"),
#   paste0("PC3 (",as.character(pVar[3] * 100 ),"%)"),
#   "PC4",
#   "PC5",
#   "PC6",
#   "PC7",
#   "PC8",
#   "PC9"
# )

# 绘图
s3d <- scatterplot3d(pca_result$x[,1:3],
                     pch = 16,       # 点形状
                     color=colors,   # 点颜色
                     cex.symbols = 2 # 点大小
                     )
# 设置图例
legend("top",
       legend = unique(dfGroup[,1]),
       col =  c("red","blue","green"),
       pch = 16,
       inset = -0.1,
       xpd = TRUE,
       horiz = TRUE)
# 设置文字标注
text(s3d$xyz.convert(pca_result$x[,c(1,2,3)] + 2),
     labels = row.names(pca_result$x),
     cex = 0.8,col = "black")

13.4 BioLadder生信云平台在线绘制PCA图

不想写代码?可以用BioLadder生信云平台在线绘制三维PCA。

网址:

三维PCA-BioLadder生物信息在线分析可视化平台​www.bioladder.cn/web/#/chart/62