10X单细胞(10X空间转录组)基因表达的熵值分析

hello,大家好,今天我们来分享一个新的分析点,基因表达的熵值分析,这个分析主要是用来衡量不同样本同一基因或者通路的熵值变化,也是一个新的角度来看待差异基因。

SCEnt 是一个用于单细胞熵分析的包。 它可以计算细胞群内基因异质性或同质性的指标。 它可以使用这些指标对 scRNA-seq 数据执行特征选择。 文章在Measuring the Information Obtained from a Single-Cell Sequencing Experiment,我们主要来看看代码。

单细胞测序 (sc-Seq) 实验正在产生越来越大的数据集。 但是,大型数据集不一定包含大量信息。 在这里,引入了一个正式框架,用于评估从 sc-Seq 实验中获得的信息量,该框架可用于整个 sc-Seq 分析流程,包括质量控制、特征选择和聚类。 用一些简单的例子来说明这个框架,包括使用它来量化由建议的聚类解释的单细胞测序数据集中的信息量。 我们的信息理论框架提供了一种正式的方法来评估从 sc-Seq 实验中获得的数据的质量,并且对我们理解异质细胞群中基因表达模式的变异性具有广泛的意义 。(专业的词汇总是这个难以理解)

图片.png
  • 图注:An information-theoretic view of sc-Seq data. Transcripts, or more generally counts, are assigned to cells after sequencing. If the population is pure, then the information unexplained by the hypothesis of homogeneity is zero (top left). In practice, the assignment process is stochastic, so will naturally result in a small non-zero information unexplained (bottom left). If the population is heterogeneous then transcripts are expressed preferentially in a subset of cells and the information unexplained is large (top right), reaching a maximum (at log2(N), where N is the number of cells) when only one cell expresses the gene (bottom right)

什么是熵值分析,Entropy Analysis。每个基因的表达可以被认为是一个概率分布。 在给定基因已表达的信息的情况下,表达计数可用于推断它在给定细胞中表达的概率。

每个基因的这些概率分布中的每一个都包含一定数量的信息,在数学中称为熵。 熵在历史上被描述为系统中编码的“surprise”的数量。 如果一个给定的基因只在一个细胞中表达,那么这个基因就被认为是低熵的,就好像那个基因被表达了,那么表达它的细胞是已知的,没有“surprise”。 但是,如果给定的基因在每个细胞中的表达均等,则该基因将具有高熵。 由于该基因的表达不会缩小它可能来自的细胞数量,这意味着答案将是一个“surprise”。

这意味着,基因在细胞群中表达得越均匀,表达分布的熵就越大。 因此,允许熵成为细胞群内同质性的度量。

每个概率分布都有一个熵值,有很多方法可以比较概率分布之间的熵值。 其中之一称为 Kullback-Liebler Divergence(或简称 KL Divergence)。 KL 散度测量如果使用一种分布来近似另一种分布将损失的熵量。 (关于KL散度已经分享了很多了,大家可以回看一些文章)。

在这种情况下,可以使用 KL Divergence 来查看如果使用均匀分布来表示基因的表达分布会丢失多少信息。 记住均匀分布将是完全同质基因的表达,KL 散度为我们提供了一个衡量从基因异质性中获得多少额外信息的方法。 本质上给出了细胞群中基因异质性的度量。

我们来看看具体怎么做的

Using SCEnt to Quantify Homogeneity and Heterogeneity

Here is some synthetic scRNA-seq data:
gene_counts
#>       gene1 gene2 gene3 gene4 gene5
#> cell1     0     5     2     3     0
#> cell2     0     5     0     3     0
#> cell3     0     3     2     3     0
#> cell4     0     2     1     3     0
#> cell5     1     0     3     3     5
#> cell6     2     0     0     3     0
#> cell7     3     0     1     3     0

gene_hom() 和gene_het() 函数可分别用于计算基因的同质性或异质性。 每一个都可以传递一个基因,它会返回一个值。

(gene1 <- gene_counts[,1])
#> cell1 cell2 cell3 cell4 cell5 cell6 cell7 
#>     0     0     0     0     1     2     3
gene_hom(gene1)
#> [1] 1.459148
gene_het(gene1)
#> [1] 1.348207

(gene2 <- gene_counts[,2])
#> cell1 cell2 cell3 cell4 cell5 cell6 cell7 
#>     5     5     3     2     0     0     0
gene_hom(gene2)
#> [1] 1.908613
gene_het(gene2)
#> [1] 0.8987422

(gene3 <- gene_counts[,3])
#> cell1 cell2 cell3 cell4 cell5 cell6 cell7 
#>     2     0     2     1     3     0     1
gene_hom(gene3)
#> [1] 2.19716
gene_het(gene3)
#> [1] 0.6101952

(gene4 <- gene_counts[,4])
#> cell1 cell2 cell3 cell4 cell5 cell6 cell7 
#>     3     3     3     3     3     3     3
gene_hom(gene4)
#> [1] 2.807355
gene_het(gene4)
#> [1] 0

(gene5 <- gene_counts[,5])
#> cell1 cell2 cell3 cell4 cell5 cell6 cell7 
#>     0     0     0     0     5     0     0
gene_hom(gene5)
#> [1] 0
gene_het(gene5)
#> [1] 2.807355

注意,gene4 是最大同质基因,gene5 是最大异质基因。 因此,他们的熵计算总是返回 0 或 2.807355 的极值,非零极值将等于 log2[N],其中 N 是样本中的cells数。

可以传递整个基因表达矩阵,而不是单独提交每个基因。 但是,数据需要采用将基因表示为行而将细胞表示为列的格式。

gene_hom(t(gene_counts))
#>    gene1    gene2    gene3    gene4    gene5 
#> 1.459148 1.908613 2.197160 2.807355 0.000000

除了转置矩阵作为输入之外,为了方便起见,还有一个转置参数

gene_het(gene_counts, transpose = TRUE)
#>     gene1     gene2     gene3     gene4     gene5 
#> 1.3482070 0.8987422 0.6101952 0.0000000 2.8073549

gene_hom() 和gene_het() 函数还有其他参数,大家可以好好看看。 unit参数传递给熵计算以更改计算熵的单位,默认情况下设置为“log2”,以便所有输出都以位为单位。 如果基因表达已经是概率形式,则normalise参数就在那里。 通常不应使用此参数,除非在某些情况下可以加快计算速度。

Using SCEnt For Feature Selection

当想要使用基因表达进行预测时,群体内均匀表达的基因对任何分类都没有用。 相反,异质表达的基因更有可能用于预测。

函数scent_select() 将通过发现基因异质性并应用一些定义的阈值来对scRNA-seq 数据进行特征选择。 可选择的阈值有 bit_threshold、count_threshold 和 perc_threshold。 bit_threshold 采用一个数值,SCEnt 只会选择异质性值大于给定位值的基因。 count_threshold 取一个整数值,SCEnt 将返回只有前 n 个异质表达基因的数据,其中 n 是 count_threshold。 perc_threshold 的值介于 0 和 1 之间,SCEnt 将仅返回异质性大于由 perc_threshold 给出的种群异质性百分位数的基因。 与上面的熵计算不同的是,基因表达的矩阵应该以细胞为行,基因为列的格式。 同样,有一个内置的转置选项,以及要传递给熵计算的单位和归一化参数。

gene_counts
#>       gene1 gene2 gene3 gene4 gene5
#> cell1     0     5     2     3     0
#> cell2     0     5     0     3     0
#> cell3     0     3     2     3     0
#> cell4     0     2     1     3     0
#> cell5     1     0     3     3     5
#> cell6     2     0     0     3     0
#> cell7     3     0     1     3     0

根据提供的阈值,scent_select() 可以执行这三种形式的特征选择中的每一种。

scent_select(gene_counts, bit_threshold = 0.85)
#>       gene1 gene2 gene5
#> cell1     0     5     0
#> cell2     0     5     0
#> cell3     0     3     0
#> cell4     0     2     0
#> cell5     1     0     5
#> cell6     2     0     0
#> cell7     3     0     0
scent_select(gene_counts, count_threshold = 2)
#>       gene1 gene5
#> cell1     0     0
#> cell2     0     0
#> cell3     0     0
#> cell4     0     0
#> cell5     1     5
#> cell6     2     0
#> cell7     3     0
scent_select(gene_counts, perc_threshold = 0.25)
#>       gene1 gene2 gene3 gene5
#> cell1     0     5     2     0
#> cell2     0     5     0     0
#> cell3     0     3     2     0
#> cell4     0     2     1     0
#> cell5     1     0     3     5
#> cell6     2     0     0     0
#> cell7     3     0     1     0

尝试对多个值设置阈值会引发错误

scent_select(gene_counts, bit_threshold = 0.85, count_threshold = 2)
#> Error in scent_select(gene_counts, bit_threshold = 0.85, count_threshold = 2): 
#>  Only one threshold can be set at a time

这是为了避免操作顺序出现问题,而应该将scent_select() 传递回自身,以便应用阈值的顺序是明确的

gene_counts %>%
  scent_select(bit_threshold = 0.85) %>%
  scent_select(count_threshold = 2)
#>       gene1 gene5
#> cell1     0     0
#> cell2     0     0
#> cell3     0     0
#> cell4     0     0
#> cell5     1     5
#> cell6     2     0
#> cell7     3     0

其实熵值分析主要是来寻找变化大的基因,也就是同质化和异质化的基因,对我们理解样本的特征有很深的借鉴意义。

生活很好,有你更好

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容