文章目录
- 一、提出假设
- 二、选择检验方法
- 2.1 正态分布
- 2.2 t分布(*t-distribution*)与T检验
- 2.3 F分布(*F-distribution*)与方差分析
- 2.4 卡方分布 (*chi-square distribution*)与卡方检验
- 2.4.1 检验数据是否服从某种分布
- 2.4.1.1 使用绘图
- 2.4.1.2 使用卡方检验
- 2.4.1.3 使用Kolmogorov-Smirnov检验
- 2.4.2 检验列联表数据
- 三、根据P值,得到结论
一、提出假设
当面对两个选择时,抛硬币,总能奏效。就像曾小贤想用抛硬币来选择见不见胡一菲。
在统计学中,要确定最终的结果,需要先提出假设。
假设指的是当我们没有足够的证据支持一个结果时,先可以假定一个结果。这个事先给出的假定结果,就叫做原假设(或零假设, H0),同时提出与之相对应的假设,叫做备择假设(H1)。
对于曾小贤抛起的硬币,我们可以先假设它最终是正面(不见),作为原假设;反面(见)为备择假设。
怎么设定零假设和备择假设? 一般,原假设是需要收集证据来反对的假设(通过已有的知识,小概率发生的事件);备择假设是收集证据来支持的假设。
有零假设,为什么还要设置备择假设? 90多年前,英国著名的统计学家哥色特(Student)曾举例解释过这个问题,他的主要思想就是人们往往都倾向于选择相信概率比较大的事件。 比如一些来自于正态总体的数据,现想检验它们的均值是不是等于a0? 假设得到检验的概率值为0.0001,虽然这个值很小,但是你不能认为这批数据的均值不等于a0,为什么呢?因为这时候你只有一个a0供你检验,概率值再小,也不能否认它发生的可能性。而此时,如果你再有一个“备胎”(值为a1)让你去检验,最后检验的概率值为0.05,比前面的值大很多,这时候你就会倾向于选择后面a1这个值,而认为原来的a0不真。所以,我们需要有“比较”,多一个“备胎”,多一份选择!(《数理统计学简史》)。
在实际的统计工作中会遇到不同的样本量和需求,对于不同的样本,我们需要提出不同的假设形式:
样本(Sample):研究中实际观测或调查的一部分个体叫样本,这些个体的数目叫样本容量(sample size ),研究对象的全部称为总体。 对总体的规定:总体内所有观察单位必须是同质的。 对样本的规定:抽取样本的过程中,必须遵守随机化原则;样本的观察单位还要有足够的数量。
1.单个样本:
现在要确定一个样本值(θ)与设定的已知值(θ0)的关系
零假设(H0),备择假设(H1)
- **单边检验I:**检验样本值与已知值相比,判断数轴一侧的大小关系
- **单边检验II:**检验样本值与已知值相比,判断数轴一侧的大小关系
- **双边检验:**检验样本值与已知值是否相等
2.两个样本
- 单边检验I:
- 单边检验II:
- 双边检验:
3.多个样本
下面以单细胞表达数据为例:
- 列分别代表基因,正常样本的5个细胞的重复样本,癌症样本5个细胞的重复样本
- 行代表每个基因在所有样本的FPKM值
我们如果要分析在正常和癌症样本的平均表达量是否一致,也就是双边检验。
首先提出假设:
- 原假设:该基因在两个细胞中的表达量相等,无差异(H0:μ1=μ2)
- 备择假设:该基因在两个细胞中的表达量不相等,有差异(H0:μ1≠μ2)
然后设定显著性阈值:
这里的阈值是用来判断统计分析得到p值,如果p小于阈值,证明有统计显著性,推翻原假设。这里阈值一般会选择0.05,即p<0.05。这个值越小越严格。
在设定显著性水平a作为阈值时,会遇到两类错误,导致结果错误:
- 第一类错误(I型错误,标记为α):也叫“弃真”,上面提到的两组表达量平均值本来是相等的。但是在判断时,认为是结果有差异的,推翻了本来正确的原假设。
- 第二类错误(II型错误,标记为β):也叫“取伪”,类似于上面,但是这里结果接收了错误的原假设。
这里的两类错误,如果想减少其中一种错误类型的发生,就会使另一种错误发生的概率增加。 如果想同时减少两种错误的发生,就需要增加样本容量,这就是做实验要增加重复样本的原因。
接下来,验证我们提出的假设:
我们一般在检验时需要根据某种分布,求出数据对应的统计量,然后据此判断该值是否落入拒绝域(拒绝原假设的取值范围)中。
那么我们看看目前有哪些分布和检验方法,
二、选择检验方法
2.1 正态分布
这是在统计学中大名鼎鼎的一种分布,最早由德国的天文学家Moivre提出。后来,德国数学家Gauss首先将其应用于天文学研究,故正态分布也叫“高斯分布”。高斯的这项工作对后世的科学研究影响极大,以至于德国10马克的钞票上印的是高斯头像和正态分布。
正态分布的函数表达式:
可以描述为,随机变量X服从一个位置参数μ,尺度参数σ的概率分布,记做
,或X服从正态分布。一般,μ和σ都是常数,μ代表数据的均值,σ代表数据的标准差。
R语言绘制正态分布:
我们可以从图中看到,均值μ决定正态分布的峰值位置,标准差σ决定分布的矮胖,σ越大越胖。
R代码:
代码语言:javascript复制set.seed(1)
x <- seq(-10,15,length.out = 1000)
# 计算N~(-2,1)
y1 <- dnorm(x, -2,1)
# 计算N~(2,1)
y2 <- dnorm(x, 2, 1)
# 计算N~(2,4)
y3 <- dnorm(x, 2, 2)
# 绘图
plot(x, y1, type = "l", col="#f0932b", ylab = "Density", lwd=2, xlim = c(-8,10))
lines(x, y2, lwd=2, col="#4834d4")
lines(x, y3, lwd=2, col="#95afc0")
legend("topright", c("X~N(-2,1)", "X~N(2,1)", "X~N(2,4)"), col = c("#f0932b", "#4834d4", "#95afc0"), lty = c(1),text.font = 12)
2.2 t分布(t-distribution)与T检验
t分布由Gosset于1908年首先发表,因为当时他在都柏林的健力士酿酒厂工作的原因,不能以他本人的名义发表,所以论文用学生(Student)这一笔名,因此该分布也成为称为student分布。t分布是正态分布的一种特殊情况。
t分布的函数表达式:
可以描述为,当X服从正态分布N(0,1)时,Y服从
,X于Y相互独立,自由度为n的t分布,记为
。
R语言绘制t分布:
不难看出,t分布和正态分布几乎一样。当自由度n趋于无穷大时,t分布会趋于正态分布。因此,针对小样本数据,可以应用t分布。
代码语言:javascript复制set.seed(1)
x <- seq(-10,15,length.out = 1000)
# 计算X~t(1)
y1 <- dt(x, 1)
# 计算X~t(10)
y2 <- dt(x, 10)
# 计算X~t(100)
y3 <- dt(x, 100)
# 绘图
plot(x, y1, type = "l", col="#f0932b", ylab = "Density", lwd=2, xlim = c(-8,8), ylim= c(0, 0.5))
lines(x, y2, lwd=2, col="#4834d4")
lines(x, y3, lwd=2, col="#6ab04c")
legend("topright", c("X~t(1)", "X~t(10)", "X~t(100)"), col = c("#f0932b", "#4834d4", "#6ab04c"), lty = c(1),text.font = 12)
如果现在已正态分布或t分布为依据进行假设检验,该检验方法就叫t检验。
2.3 F分布(F-distribution)与方差分析
F分布,由英国统计学家R.A.Fisher提出,用Fisher的第一个字母F来命名。F分布有着广泛的应用,如在方差分析、回归方程的显著性检验中都有着重要的地位。
假设有两个独立的随机变量,这两个变量都分别符合卡方分布,它们相除以后的比率,我们就用F分布来描述。
F分布的函数表达式:
可以描述为,当样本
,
,X和Y相互独立,随机变量F服从自由度为(n, m)的F分布,记为F~F(n, m)
R语言绘制F分布
R代码如下
代码语言:javascript复制set.seed(1)
x <- seq(0,10,length.out = 1000)
# 计算F~F(1, 1)
y1 <- df(x, 1, 1)
# 计算F~F(4, 1)
y2 <- df(x, 4, 1)
# 计算F~F(3, 10)
y3 <- df(x, 3, 10)
# 绘图
plot(x, y1, type = "l", col="#f0932b", ylab = "Density", lwd=2, xlim = c(0,10), ylim= c(0, 1))
lines(x, y2, lwd=2, col="#4834d4")
lines(x, y3, lwd=2, col="#6ab04c")
legend("topright", c("F~F(1, 1)", "F~F(4, 1)", "F~F(3, 10)"), col = c("#f0932b", "#4834d4", "#6ab04c"), lty = c(1),text.font = 12)
与F分布相对应的是方差分析,该方法可以评估数据间的波动程度。目的在于检验两个或多个样本均值是否有统计学意义。
2.4 卡方分布 (chi-square distribution)与卡方检验
卡方分布是由Abbe于1863年首先提出的,后来由海尔墨特(Hermert)和现代统计学的奠基人之一的卡·皮尔逊(C K.Pearson)分别于1875年和1900年推导出来。
如果有n个独立的随机变量,这些变量都服从标准正态分布,那么这些随机变量的平方和会构成一个新的随机变量,这个随机变量分布规律就是卡方分布
卡方分布的函数表达式:
可以描述为,当样本
,其中i=1,2,…,n,Y服从自由度为n的卡方分布,记为
。
R语言绘制卡方分布
代码语言:javascript复制set.seed(1)
x <- seq(0,10,length.out = 1000)
# 计算Y~x(1)
y1 <- dchisq(x, 1)
# 计算Y~x(5)
y2 <- dchisq(x, 5)
# 计算Y~x(10)
y3 <- dchisq(x, 10)
# 绘图
plot(x, y1, type = "l", col="#f0932b", ylab = "Density", lwd=2, xlim = c(0,10), ylim= c(0, 1))
lines(x, y2, lwd=2, col="#4834d4")
lines(x, y3, lwd=2, col="#6ab04c")
legend("topright", c("Y~x(1)", "Y~x(5)", "Y~x(10)"), col = c("#f0932b", "#4834d4", "#6ab04c"), lty = c(1),text.font = 12)
如果现在已卡方分布为依据进行假设检验,该检验方法就叫卡方检验。
卡方检验
应用:
- 检验数据符合哪种分布,包括正态分布,泊松分布,卡方分布等
- 检验列联表数据
列联表,又叫交互分类表。是指同时依据两个变量的值,将所研究的个案分类。我们会得到两个变量的分组,然后比较各组的分布情况,寻找变量间的关系。 比如,依据是否吸烟与是否患肺癌进行分类,然后可以通过比较这些数值,寻找吸烟与患肺癌之间是否相关。
2.4.1 检验数据是否服从某种分布
现在,统计到一个班级里所有人的体重,我们看看是否符合正态分布:
2.4.1.1 使用绘图
查看数据密度分布与正态分布曲线的一致性
蓝色为数据密度分布曲线,红色为正态分布曲线,通过观察,我们会发现这组数据虽然与标准分布有区别,但是总体是符合正态分布的。
代码语言:javascript复制w <- c(63.0, 62.1, 63.8, 57.0, 56.2, 71.1, 72.0, 63.5, 74.2, 67.2, 65.4, 80.1, 66.8, 51.5, 48.4, 54.2, 58.9, 68.3, 65.1)
hist(w, freq = FALSE)
lines(density(w), col = "blue")
x <- (min(w)):(max(w))
lines(x, dnorm(x, mean(w), sd(w)), col = "red")
也可以使用qq图判断:
可以发现样本数据偏离直线不远,判断数据基本来自于正态分布。
代码语言:javascript复制d <- c(100, 63.8, 56.2, 71.1, 72.0, 63.5, 74.2, 67.2, 65.4, 80.1, 66.8, 51.5, 48.4, 54.2, 58.9, 68.3, 65.1)
qqnorm(d)
qqline(d)
2.4.1.2 使用卡方检验
代码语言:javascript复制d <- c(63.8, 56.2, 71.1, 72.0, 63.5, 74.2, 67.2, 65.4, 80.1, 66.8, 51.5, 48.4, 54.2, 58.9, 68.3, 65.1)
# 卡方检验
chisq.test(d)
结果得出p-value = 0.3107,p>0.05,认为该班体重分布符合正态分布
2.4.1.3 使用Kolmogorov-Smirnov检验
代码语言:javascript复制d <- c(63.8, 56.2, 71.1, 72.0, 63.5, 74.2, 67.2, 65.4, 80.1, 66.8, 51.5, 48.4, 54.2, 58.9, 68.3, 65.1)
ks.test(d, "pnorm", mean(d), sd(d))
# 如果数据中有重复值,会报错:Kolymogorov - Smirnov检验里不应该有连结
# 需要在数据加点噪音,不会影响数据分布和检测结果
ks.test(jitter(d),"pnorm",mean(d),sd(d))
结果得到p-value = 0.7857,p>0.05,认为该班体重分布符合正态分布
2.4.2 检验列联表数据
代码语言:javascript复制x <- c(60, 3, 32, 11)
dim(x) <- c(2,2)
chisq.test(x)
得到p-value = 0.004855,p<0.05,可认为患肺癌与吸烟有关
三、根据P值,得到结论
依据不同的数据分布,选择合适的检验方法,我们会得到相应的P值,最终我们会根据P值来确定最后的结论。需要注意的是:
- 结论不能是绝对的,结论中最好不包含“一定,肯定”等,这样的结论不严谨
- 显著性水平a的大小用来确定拒绝区间,进而确定是否拒绝原假设,也就是说数据间是否有差异,是定性用的。通过它的值是不能确定差异大小的,要定量的话,需要用到差异倍数(Fold Change,FC)值。可以使用火山图绘制P值与FC值来筛选并可视化最终的差异数据。
- 显著性水平a,也就是P值确定的阈值,0.05, 0.01,这个值是约定俗成的规则,不是绝对的值。只要有足够的理由或文献支持,可以根据自己的需求来调节
使用统计学来分析自然或社会规律的数据,只是为客观事物提供统计学意义的科学参考,并不代表事物一定会向结论发展或发生。但是,如果你想让你的结论为大众所接受,那你在采集和分析数据时,就应遵守数理统计学方法的规范,这才能使自己的结论建立在健全的科学基础上,得到公众的认可。陈希孺教授在《数理统计学简史》 中讲数理统计方法是一个中立性的工具,这“中立”的含义是指,它既不在任何问题上有何主张,也不维护任何利益或在任何学科中坚持任何学理。作为一个工具,谁都可以使用,若是谁不同意这种方法,可以不用它,而去做单纯定性式的讨论。
有时候,我们做的决定并不是为大众所接受的,而是取决于主体的,就像前面到曾小贤抛硬币做决定的同时内心还有段独白:
当面对两个选择时,抛硬币总能奏效,
并不是因为它总能给出对的答案,
而是在你把它抛在空中的那一秒里,
你突然知道你希望它是什么……