从零开始统计学 01 | 假设检验

2024-06-02 23:08

本文主要是介绍从零开始统计学 01 | 假设检验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、提出假设
      • 二、选择检验方法
        • 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值,得到结论

一、提出假设

mark

当面对两个选择时,抛硬币,总能奏效。就像曾小贤想用抛硬币来选择见不见胡一菲。

在统计学中,要确定最终的结果,需要先提出假设。

假设指的是当我们没有足够的证据支持一个结果时,先可以假定一个结果。这个事先给出的假定结果,就叫做原假设(或零假设, H0,同时提出与之相对应的假设,叫做备择假设(H1)

对于曾小贤抛起的硬币,我们可以先假设它最终是正面(不见),作为原假设;反面(见)为备择假设。

怎么设定零假设和备择假设?

一般,原假设是需要收集证据来反对的假设(通过已有的知识,小概率发生的事件);备择假设是收集证据来支持的假设。

有零假设,为什么还要设置备择假设?

90多年前,英国著名的统计学家哥色特(Student)曾举例解释过这个问题,他的主要思想就是人们往往都倾向于选择相信概率比较大的事件。

比如一些来自于正态总体的数据,现想检验它们的均值是不是等于a0?

假设得到检验的概率值为0.0001,虽然这个值很小,但是你不能认为这批数据的均值不等于a0,为什么呢?因为这时候你只有一个a0供你检验,概率值再小,也不能否认它发生的可能性。而此时,如果你再有一个“备胎”(值为a1)让你去检验,最后检验的概率值为0.05,比前面的值大很多,这时候你就会倾向于选择后面a1这个值,而认为原来的a0不真。所以,我们需要有“比较”,多一个“备胎”,多一份选择!(《数理统计学简史》)。

在实际的统计工作中会遇到不同的样本量和需求,对于不同的样本,我们需要提出不同的假设形式:

样本(Sample:研究中实际观测或调查的一部分个体叫样本,这些个体的数目叫样本容量(sample size,研究对象的全部称为总体

对总体的规定:总体内所有观察单位必须是同质的

对样本的规定:抽取样本的过程中,必须遵守随机化原则;样本的观察单位还要有足够的数量

1.单个样本

现在要确定一个样本值(θ)与设定的已知值(θ0)的关系

零假设(H0),备择假设(H1)

  • **单边检验I:**检验样本值与已知值相比,判断数轴一侧的大小关系
    mark

  • **单边检验II:**检验样本值与已知值相比,判断数轴一侧的大小关系

    mark

  • **双边检验:**检验样本值与已知值是否相等

    mark

2.两个样本

  • 单边检验I:

    mark

  • 单边检验II:

    mark

  • 双边检验:

    mark

3.多个样本

mark

mark

下面以单细胞表达数据为例:

  • 列分别代表基因,正常样本的5个细胞的重复样本,癌症样本5个细胞的重复样本

  • 行代表每个基因在所有样本的FPKM值

mark

我们如果要分析在正常和癌症样本的平均表达量是否一致,也就是双边检验。

首先提出假设:

  • 原假设:该基因在两个细胞中的表达量相等,无差异(H0:μ1=μ2)
  • 备择假设:该基因在两个细胞中的表达量不相等,有差异(H0:μ1≠μ2)

然后设定显著性阈值:

这里的阈值是用来判断统计分析得到p值,如果p小于阈值,证明有统计显著性,推翻原假设。这里阈值一般会选择0.05,即p<0.05。这个值越小越严格。

在设定显著性水平a作为阈值时,会遇到两类错误,导致结果错误:

  • 第一类错误(I型错误,标记为α):也叫“弃真”,上面提到的两组表达量平均值本来是相等的。但是在判断时,认为是结果有差异的,推翻了本来正确的原假设。
  • 第二类错误(II型错误,标记为β):也叫“取伪”,类似于上面,但是这里结果接收了错误的原假设。

这里的两类错误,如果想减少其中一种错误类型的发生,就会使另一种错误发生的概率增加。

如果想同时减少两种错误的发生,就需要增加样本容量,这就是做实验要增加重复样本的原因。

接下来,验证我们提出的假设:

我们一般在检验时需要根据某种分布,求出数据对应的统计量,然后据此判断该值是否落入拒绝域(拒绝原假设的取值范围)中。

那么我们看看目前有哪些分布和检验方法,

二、选择检验方法

2.1 正态分布

这是在统计学中大名鼎鼎的一种分布,最早由德国的天文学家Moivre提出。后来,德国数学家Gauss首先将其应用于天文学研究,故正态分布也叫“高斯分布”。高斯的这项工作对后世的科学研究影响极大,以至于德国10马克的钞票上印的是高斯头像和正态分布。

mark

正态分布的函数表达式:

mark

可以描述为,随机变量X服从一个位置参数μ,尺度参数σ的概率分布,记做mark,或X服从正态分布。一般,μ和σ都是常数,μ代表数据的均值,σ代表数据的标准差。

R语言绘制正态分布:

mark

我们可以从图中看到,均值μ决定正态分布的峰值位置,标准差σ决定分布的矮胖,σ越大越胖。

R代码:

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分布的函数表达式:

mark

可以描述为,当X服从正态分布N(0,1)时,Y服从mark,X于Y相互独立,自由度为n的t分布,记为mark

R语言绘制t分布:

mark

不难看出,t分布和正态分布几乎一样。当自由度n趋于无穷大时,t分布会趋于正态分布。因此,针对小样本数据,可以应用t分布。

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分布的函数表达式:

mark

可以描述为,当样本 markmark,X和Y相互独立,随机变量F服从自由度为(n, m)的F分布,记为F~F(n, m)

R语言绘制F分布

mark

R代码如下

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个独立的随机变量,这些变量都服从标准正态分布,那么这些随机变量的平方和会构成一个新的随机变量,这个随机变量分布规律就是卡方分布

卡方分布的函数表达式:

mark

可以描述为,当样本 mark,其中i=1,2,…,n,Y服从自由度为n的卡方分布,记为 mark

R语言绘制卡方分布

mark

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 使用绘图

查看数据密度分布与正态分布曲线的一致性

mark

蓝色为数据密度分布曲线,红色为正态分布曲线,通过观察,我们会发现这组数据虽然与标准分布有区别,但是总体是符合正态分布的。

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图判断:

mark

可以发现样本数据偏离直线不远,判断数据基本来自于正态分布。

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 使用卡方检验
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检验
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 检验列联表数据

mark

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,这个值是约定俗成的规则,不是绝对的值。只要有足够的理由或文献支持,可以根据自己的需求来调节

使用统计学来分析自然或社会规律的数据,只是为客观事物提供统计学意义的科学参考,并不代表事物一定会向结论发展或发生。但是,如果你想让你的结论为大众所接受,那你在采集和分析数据时,就应遵守数理统计学方法的规范,这才能使自己的结论建立在健全的科学基础上,得到公众的认可。陈希孺教授在《数理统计学简史》 中讲数理统计方法是一个中立性的工具,这“中立”的含义是指,它既不在任何问题上有何主张,也不维护任何利益或在任何学科中坚持任何学理。作为一个工具,谁都可以使用,若是谁不同意这种方法,可以不用它,而去做单纯定性式的讨论。

有时候,我们做的决定并不是为大众所接受的,而是取决于主体的,就像前面到曾小贤抛硬币做决定的同时内心还有段独白:

当面对两个选择时,抛硬币总能奏效,

并不是因为它总能给出对的答案,

而是在你把它抛在空中的那一秒里,

你突然知道你希望它是什么……

这篇关于从零开始统计学 01 | 假设检验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025354

相关文章

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递

Android从零开始搭建MVVM架构(5)—— LifeCycle详解

1.Lifecycle简介 为什么要使用lifecycle? activity 和fragment 是有声明周期的,有时候,我们的很多操作需要写在声明周期的方法中,比如,下载,文件操作等,这样很多情况下回导致,我们在activity中的声明周期方法中写越来越多的代码,activity或者fragment 越来越臃肿,代码维护越来越困难。 使用lifecycle就可以很好的解决这类问题。 lifec

Android从零开始搭建MVVM架构(4)——LiveData

LiveData 介绍 Livedata 是 Google 推荐的 Android 架构组件之一,是一个存放可被观察的数据持有类,有生命周期感知功能,解决了android开发者需要去手动处理生命周期的痛点。 比如当我们使用 Retrofit+Rxjava处理接口回调数据时,需要考虑activity 或 fragment 生命周期,以解决 onStop 或 onDestory之后回调数据的问题。现

Android从零开始搭建MVVM架构(3)——ViewModel

ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据,ViewModel中数据会一直存活即使 activity configuration发生变化。 ViewModel有什么优势? 1.数据持久化 activity 在销毁重建时,之前我们可以用 activity 的onSaveInstanceState()机制保存和恢复数据,但缺点很明显,onSaveInstan

Android自定义view学习笔记01

Android自定义view学习笔记01 昨天看博客的时候看到鸿洋老师的博客里面有关于自定义view的学习教程。一直深感所掌握的东西太少太杂,按照他的Android 自定义View (一)所讲内容,代码实践。根据实际情况稍作修改,并且补充一些在代码过程中知识点,做此笔记。 相关代码 //CustomView01.javapackage mmrx.com.myuserdefinedvi

采药问题 01背包

Description:辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

React+TS 从零开始教程(2):简中简 HelloWolrd

源码链接:https://pan.quark.cn/s/c6fbc31dcb02 这一节,我们来见识React+TS的威力,开始上手开发第一个组件,什么组件呢? 当然是简中简的 HelloWolrd组件啦。 在src下创建一个components,然后新建Hello.tsx 为什么是tsx呢,这个目的就是告诉编译器,我这个文件是支持jsx语法的,如果遇到你看不懂的标签,就当作React Ele

从零开始学数据结构系列之第三章《平衡二叉树基础概念》

文章目录 前言什么是平衡二叉树往期回顾 前言 ​   在前面的学习过程中,我们了解到二叉排序树可以在一定程度上提高查找(搜索)的效率,但仍然会出现特殊情况,让二叉排序树失效。例如,将序列{1,2,3,4,5,6}中的元素依次插入到二叉排序树中,会得到右斜树,这就相当于一个单链表了,搜索效率降低为O(n)。   于是在 1962 年,一个姓 AV 的大佬(G. M. Ade