草庐IT

单细胞测序分析之PCA后维度的选择

生信小白花 2023-03-28 原文

关于“数据的维度”(dims参数)的选择

完成PCA之后,我们获得了该数据集的所有主成分(PCs)信息,但是如何决定纳入多少个主成分进行下游分析呢?

主要参考以下方法:

热图

DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)
image.png

如上图所示,可以看出前15个主成分可以把细胞分成差异明显的两群,说明前15个主成分中含有的显著的差异基因更多,主成分也就更有意义,所以下游分析可以纳入前15个PCs。

碎石图 Elbow plot

ElbowPlot(pbmc)

通过碎石图可以看出每个PC对变异的贡献情况,从上图可以看出9~10PC以后逐渐趋于稳定(噪声主导),也就是说真实信号主要来自前10个左右的PCs,所以可以选择前10个PCs进行下游分析。

JackStraw法

随机置换一部分数据(默认为1%),然后重新 PCA,重复此过程。将包含较多低 P 值特征的主成分为「重要的」主成分。

JackStraw()函数可以计算出每个主成分中各基因的P值,用于判断哪些主成分更具有统计学意义,ScoreJackStraw()用于量化主成分的显著性强度,富含低P值基因较多的主成分更有统计学意义。

pbmc <- JackStraw(pbmc, num.replicate = 100)
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)

JackStrawPlot()函数可视化比较每个主成分的 p 值分布和均匀分布(虚线)。在这个例子中,在前 10 到 12 个主成分之后,主成分的重要性开始下降。

JackStrawPlot(pbmc, dims = 1:15)

JackStraw法相当于计算每个主成分的p值,根据p值选择显著性的PCs纳入下游分析,比较科学,但是当数据量比较大时,计算非常慢,并且可视化不够直观,个人推荐仅用于参考,不作为首选。

究极方法:循环

for(i in c(5,10,15,18,20,23,26,28,30,32,35,40)){
  All.merge.singlets.new <- FindNeighbors(object = All.merge.singlets.new, dims = 1:i, verbose = T)
  All.merge.singlets.new <- FindClusters(object = All.merge.singlets.new, resolution = 0.8, verbose = T)

  All.merge.singlets.new <- RunUMAP(object = All.merge.singlets.new,  dims = 1:i, verbose = T)
  All.merge.singlets.new <- RunTSNE(object = All.merge.singlets.new,  dims = 1:i, verbose = T,check_duplicates = FALSE)

  gd1 <- DimPlot(object = All.merge.singlets.new, reduction = "umap", group.by = "orig.ident") #+ NoLegend()
  gd2 <- DimPlot(object = All.merge.singlets.new, reduction = "umap",label = T) #+ NoLegend()
  #    gd3 <- DimPlot(object = Batch.merge.singlets, reduction = "umap", group.by = "celltype") #+ NoLegend()

  gd4 <- DimPlot(object = All.merge.singlets.new, reduction = "tsne", group.by = "orig.ident") #+ NoLegend()
  gd5 <- DimPlot(object = All.merge.singlets.new, reduction = "tsne",label = T) #+ NoLegend()
  #    gd6 <- DimPlot(object = Batch.merge.singlets, reduction = "tsne", group.by = "celltype") #+ NoLegend()
  CombinePlots(plots = list(gd1,gd2,gd4,gd5), ncol = 2)

  #    CombinePlots(plots = list(gd1,gd2,gd3,gd4,gd5,gd6), ncol = 3)

  ggsave(filename=paste('All_sample_UMap_tSNE_by_cluster_and_sample_DimPlot_pc',i,'.pdf',sep=''), width=20, height=13)
  #saveRDS(dc, file = 'dc_tSNE_UMAP.rds')
}

通过循环将不同的dims值代入,进行细胞聚类分析,导出pdf查看每个dims取值时细胞分群情况及降维图,比如从dims=15往后的分群变化都不大了,那么即可选择dims=15

有关单细胞测序分析之PCA后维度的选择的更多相关文章

  1. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  2. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  3. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  4. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  5. ruby-on-rails - ActiveAdmin 自定义选择过滤器下拉名称 - 2

    对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking

  6. ruby-on-rails - 多次选择一个随机数,但绝不会两次选择相同的随机数 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIgeneratealistofnuniquerandomnumbersinRuby?我想做的事:Random.rand(0..10).timesdoputsRandom.rand(0..10)end但如果随机数已经显示过,则无法再次显示。如何最轻松地做到这一点?

  7. ruby - mixin方法名冲突时如何选择调用方法? - 2

    当你在类中包含方法名冲突的模块时,它会使用类定义的方法。有没有办法选择我想运行的?moduleBdefself.hello"helloB"endendclassAincludeBdefself.hello"helloA"endendA.hello#=>thisprints"helloA",whatifIwant"helloB"? 最佳答案 Ben,当你在Ruby中调用一个方法(比如hello)时,会发生以下情况:如果接收者的特征类有一个名为hello的方法,它将被调用。如果不是:如果接收者的类有一个名为hello的实例方法,它将被调

  8. ruby - 更快的 n 选择 k 来组合数组 ruby - 2

    在尝试解决“网格上的路径”问题时,我编写了代码defpaths(n,k)p=(1..n+k).to_ap.combination(n).to_a.sizeend代码工作正常,例如ifn==8andk==2代码返回45,这是正确的路径数。但是,当使用较大的数字时,代码非常慢,我正在努力想出如何加快这个过程。 最佳答案 与其构建组合数组只是为了计算它,不如编写function定义组合的数量。我敢肯定还有包含此功能和许多其他组合函数的gem。请注意,我使用的是gemDistribution对于Math.factorial方法,但这是另一种

  9. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  10. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

随机推荐