单细胞数据分析中的秩和检验与t检验

作者,Evil Genius

在单细胞数据分析的过程中,寻找差异基因的过程需要用到对基因统计的假设检验(例如函数FindAllMarkers中的test.use参数),我们这里来深入了解一下假设检验的方法和应用环境。

秩和检验

秩和检验适用于广泛的统计学环境,秩和检验是检验总体分布位置是否相同,因而称为非参数检验(Nonparametric test)。秩和检验(rank sum test)是一类常用的非参数检验。秩和检验首先将数据按从小到大或等级从弱到强转换成秩(也就是顺序),然后求秩和并计算秩和统计量,最后做出统计推断。本文简单介绍秩和检验的原理并基于R语言进行秩和检验的操作。

秩和检验基本原理

假设我们从总体A和总体B中分别采样n_a和n_b个样本构成样本集合a和b。通过将样本集a和b中的所有样本按从小到大顺序转化为秩之后我们可以通过绘图的方式对转换的结果进行展示,在图中我们使用“•”代表来自样本集a,使用“o”代表数据来自样本集b。
如果总体A和总体B总体分布位置分布相同(H_0:A=B),那么转换的结果如下图所示:


即“•”和“o”的分布应该是随机的,也就是说样本集a和样本集b的秩和大致相同。
如果总体A和总体B总体分布位置分布相同(H_0:A>B),那么转换的结果如下图所示:


即“•”集中出现在后半部分,也就是说样本集a的秩和大于样本集b的秩和。
通过上面的例子我们可以知道总体分布位置相同与否可以通过样本集秩和的大小体现出来。秩和检验的基本原理即是通过比较样本集的实际秩和w和总体分布位置相同情况下的理论秩和W得到统计推断

python与R实现秩和检验

首先是python(范例),借助于python模块scipy来实现。

import scipy.stats as stats
weight_high=[134,146,104,119,124,161,107,83,113,129,97,123]
weight_low=[70,118,101,85,112,132,94]
stats.mannwhitneyu(weight_high,weight_low,alternative='two-sided')
结果为:
MannwhitneyuResult ( statistic = 62.0, pvalue = 0.09934224785346528 )
由于p值大于0.05,故可以认为没有显著差异。

其次是R的实现:(wilcox.test的函数)

women_weight <- c(38.9, 61.2, 73.3, 21.8, 63.4, 64.6, 48.4, 48.8, 48.5)
men_weight <- c(67.8, 60, 63.4, 76, 89.4, 73.3, 67.3, 61.3, 62.4)
# 转换为dataframe
my_data <- data.frame(
  group = rep(c("Woman", "Man"), each = 9),
  weight = c(women_weight,  men_weight)
)
# 进行秩和检验
res <- wilcox.test(weight ~ group, data = my_data,
                   exact = FALSE)
结果为:
Wilcoxon rank sum test with continuity correction

data:  weight by group
W = 66, p-value = 0.02712
alternative hypothesis: true location shift is not equal to 0

这里可以发现,秩和检验仅仅和数据的总体分布有关,适用于一般的环境,在单细胞数据中寻找markergene 的过程中,大部分默认就是采用此方法,当然,这种检验只是一种很常规的检验,离我们真正的数据分析还很遥远。

t检验

t检验,亦称student t检验(Student's t test),主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。 [1] t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。它与f检验卡方检验并列。
这里我们需要注意一下:
(1)t检验对于大样本分布需要转换,而我们单细胞的数据分布属于大样本分布。
(2)数据分布为正态分布,单细胞数据是否为正态分布,在我的文章单细胞数据分析之PCA再认识与ScaleData函数做了详细的介绍,大家可以看一下。

t检验的4个用途

t检验最常见的四个用途:
1、 单样本均值检验(One-sample t-test)
用于检验 总体方差未知、正态数据或近似正态的单样本的均值是否与已知的总体均值相等
2、两独立样本均值检验(Independent two-sample t-test)
用于检验两对独立的正态数据或近似正态的样本的均值是否相等,这里可根据总体方差是否相等分类讨论
3、配对样本均值检验(Dependent t-test for paired samples)
用于检验 一对配对样本的均值的差是否等于某一个值
4、回归系数的显著性检验(t-test for regression coefficient significance)
用于检验回归模型的解释变量对被解释变量是否有显著影响。

首先是单样本均值检验:

单样本T检验用于比较一组数据与一个特定数值之间的差异情况。
应用场景:
某个医生检测40名从事铅作业工人的血红蛋白含量,其均数为130.83g/L,标准差为25.74g/L,试分析从事铅作业的工人血红蛋白含量是否不同于正常成年人平均值140g/L?

R实现:
 set.seed(1234)  ###使生成的随机数前后保持一致
x <- rnorm(n=40,mean=130.83,sd=25.74) ##生成随机数
t.test(x,mu=140)
得到结果:
One Sample t-test

data:  x
t = -1.12, df = 39, p-value = 0.2696
alternative hypothesis: true mean is not equal to 140
95 percent confidence interval:
 125.6140 144.1321
sample estimates:
mean of x 
 134.8731 

我们来看一下这个结果,以p=0.2696,以p=0.05为界,说明没有统计意义。

其次是两独立样本均值检验

两独立样本t检验的目的是利用来自两个总体的独立样本,推断两个总体的均值是否存在显著差异。
2、使用的前提条件
(1)两个样本应该是相互独立的;
(2)样本来自的两个总体应该服从正态分布。

R实现:
x1<-c(20.5,19.8,19.7,20.4,20.1,20.0,19.0,19.9)
x2<-c(20.7,19.8,19.5,20.8,20.4,19.6,20.2)
#执行两样本t检验,指定方差相等
t.test(x1,x2,var.equal=T)
结果:
data:  x1 and x2
t = -0.85485, df = 13, p-value = 0.4081
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.7684249  0.3327106
sample estimates:
mean of x mean of y 
 19.92500  20.14286
################################################################
##执行t检验,方差不等
t.test(x1,x2,var.equal=F)
python实现
from scipy.stats import ttest_rel
a = [3,5,4,6,5,5,4,5,3,6,7,8,7,6,7,8,8,9,9,8,7,7,6,7,8]  
b = [7,8,6,7,8,9,6,6,7,8,8,7,9,10,9,9,8,8,4,4,5,6,9,8,12]  
t,p=ttest_rel(a,b)  
print(t)  
print(p) 

显然单细胞使用的就是两独立样本均值检验。

再来是配对样本T检验

用于分析配对定量数据之间的差异对比关系。与独立样本t检验相比,配对样本T检验要求样本是配对的。两个样本的样本量要相同;样本先后的顺序是一一对应的。
配对样本t检验用于样品的两个相关组之间的比较手段。在这种情况下,同一样本有两个值(即一对值)。
举个例子,在1个月内有20只小鼠接受了治疗X。我们想知道处理X是否会对小鼠的体重产生影响。
为了回答这个问题,在治疗之前和之后测量了20只小鼠的体重。通过测量相同小鼠体重的两次,我们得到了治疗前的20组值和治疗后的20组值。
在这种情况下,可以使用配对t检验比较治疗前后的平均体重。

R实现
t.test(x, y, paired=TRUE, alternative = "two.sided")
python实现:
from  scipy.stats import ttest_rel
x = [20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2]
y = [17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1]
# 配对样本t检验
print(ttest_rel(x, y))

Likelihood-ratio test(似然比检验)

似然比(likelihood ratio, LR) 是反映真实性的一种指标,属于同时反映灵敏度和特异度的复合指标。即有病者中得出某一筛检试验结果的概率与无病者得出这一概率的比值。该指标全面反映筛检试验的诊断价值,且非常稳定。似然比的计算只涉及到灵敏度与特异度,不受患病率的影响。因检验结果有阳性与阴性之分,似然比可相应地区分为阳性似然比(positive likelihood ratio, +LR)和阴性似然比(negative likelihood ratio, -LR)。阳性似然比是筛检结果的真阳性率与假阳性率之比。说明筛检试验正确判断阳性的可能性是错误判断阳性可能性的倍数。比值越大,试验结果阳性时为真阳性的概率越大。阴性似然比是筛检结果的假阴性率与真阴性率之比。表示错误判断阴性的可能性是正确判断阴性可能性的倍数。其比值越小,试验结果阴性时为真阴阳性的可能性越大。
似然比检验(likelihood ratio test, LRT)是一种检验参数能否反映真实约束的方法(分布或模型的某参数θ等于θ0是否为真实约束)。似然比检验的思想是:“如果参数约束是有效的,那么加上这样的约束不应该引起似然函数最大值的大幅度降低。也就是说似然比检验的实质是在比较有约束条件下的似然函数最大值与无约束条件下似然函数最大值。” 可以看出,似然比检验是一种通用的检验方法(比 t检验、Κ2检验等具有更广的适用范围)。
这个有点难,我们不展开讨论了,主要就是检验分群结果结束以后,基因的表达分布是否是受到约束的

roc

Identifies 'markers' of gene expression using ROC analysis. For each gene, evaluates (using AUC) a classifier built on that gene alone, to classify between two groups of cells. An AUC value of 1 means that expression values for this gene alone can perfectly classify the two groupings (i.e. Each of the cells in cells.1 exhibit a higher level than each of the cells in cells.2). An AUC value of 0 also means there is perfect classification, but in the other direction. A value of 0.5 implies that the gene has no predictive power to classify the two groups. Returns a 'predictive power' (abs(AUC-0.5) * 2) ranked matrix of putative differentially expressed genes.
关于roc的讲解在我的文章里深入理解R包AUcell对于分析单细胞的作用详细提到过,大家可以看一下。

生活很好,有你更好

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值