======R实现tSNE降维及可视化====== =====简介===== t-SNE:T-Distribution Stochastic Neighbour Embedding, T分布随机近邻嵌入。与PCA一样是常用的降维方法,其主要优势在于能保持局部结构的能力,即高维数据空间中距离相近的点投影到低维空间中仍然相近。 R语言中实现的包:Rtsne =====测试数据===== 与流程中PCA使用数据相同,样本gene表达矩阵,gene_fpkm.xls。 =====R===== install.packages("Rtsne") library(Rtsne) df<-read.table("test.xls",header = T,sep='\t',row.names = 1) new_df <- t(df) #将输入文件转置使列为gene,行为sample condition <- read.table("condition.xls",header = T) sample <- data.frame(id=condition$sample,group=condition$group) set.seed(1) # t-SNE结果随机,进行分析之前需设置随机数种子是结果具有可重复性 tsne_out = Rtsne( new_df, #待降维矩阵 dims = 2, #正整数,表示降维后的数据纬度——将数据降到几维? pca = F, #TRUE/FALSE,表示在进行t-SNE前是否进行主成分分析PCA,然后使用PCA得到的top50主成分分析进行后续计算。因为t-SNE的计算量是非常大的。 max_iter = 1000, #表示迭代次数,默认为1000。 theta = 0.4, #是速度/精度权衡,范围在0~1之间,数值越小越精确,默认0.5。该参数影响最终结果,可根据可视化结果进行调整。 perplexity = 3, #困惑度,具体没整明白干啥的, 大小必须**小于**(nrow(data)-1)/3 check_duplicates = FALSE, 检查是否存在重复项。最好确保在进行t-SNE之前数据不存在重复项,并将此选项设置为FALSE。 verbose = F) tsne_out #输出结果是一个列表,其中元素Y就是降维结果。 #library(ggalt) library(ggplot2) tsne_result = as.data.frame(tsne_out$Y) colnames(tsne_result) = c("tSNE1","tSNE2") tsne_result$group=sample$group p <- ggplot(tsne_result,aes(tSNE1,tSNE2,color=group)) + geom_point() + #stat_ellipse(level = 0.9)+ #与PCA相同可添加置信区间 #geom_encircle(aes(group=group), expand=0.1,spread=0.5,s_shape=0.9) + #ggalt包将同组散点圈起来 theme_bw()+ theme(plot.margin = unit(rep(1.5,4),"lines"), panel.grid.major = element_blank(), panel.grid.minor = element_blank()) #legend.position = c(0.9,0.1), #legend.background = element_rect(fill = "grey90", size = 1, colour = "white")) pdf("test.tsne.pdf") =====测试路径===== /TJPROJ6/NC_BG_SH/shouhou/202306/X101SC22012246-Z01-J001_Rtsne