从零开始统计学 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

相关文章

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

BIRT--商业智能和报表工具,从零开始

1.简介 BIRT (Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 JavaEE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。 2.下载 官网下载网址:http://download.ec

从零开始学习JVM(七)- StringTable字符串常量池

1 概述 String应该是Java使用最多的类吧,很少有Java程序没有使用到String的。在Java中创建对象是一件挺耗费性能的事,而且我们又经常使用相同的String对象,那么创建这些相同的对象不是白白浪费性能吗。所以就有了StringTable这一特殊的存在,StringTable叫做字符串常量池,用于存放字符串常量,这样当我们使用相同的字符串对象时,就可以直接从StringTable

从零开始构建大语言模型并进行微调:全面指南

要从0开始搭建并训练一个大语言模型(LLM),涉及到多个步骤和资源,包括理论理解、工具使用、数据准备、模型训练与微调。以下是一个从基础到应用的指南,帮助你理解并逐步实现这一目标。 1. 理解基础概念 在开始搭建大语言模型之前,了解以下基本概念至关重要: 生成式AI:通过大语言模型生成自然语言文本,例如GPT、BERT等。机器学习:通过数据训练模型,使其具备从数据中学习规律的能力。深度学习:机

如何使用 Python 读取 Excel 文件:从零开始的超详细教程

“日出东海落西山 愁也一天 喜也一天 遇事不钻牛角尖” 文章目录 前言文章有误敬请斧正 不胜感恩!||Day03为什么要用 Python 读取 Excel 文件?准备工作:安装所需工具安装 Python安装 Pandas安装 openpyxl 使用 Pandas 读取 Excel 文件什么是 Pandas?读取 Excel 文件的简单示例查看数据的前几行选择特定工作表只读取部分列跳过

【虚拟机/服务器】在Ubuntu Server上从零开始配置Nginx、Mysql、PHP7.0

1、升级当前系统数据源 sudo apt-get update && sudo apt-get upgrade 遇到询问是否继续,输入 y 或直接回车继续就好了 2、安装 Nginx sudo apt-get install nginx 安装完成之后就会默认自动开启 Nginx 服务器,可以通过 ps -ef | grep nginx 查看。 3、配置 Nginx 环境 1)替换默认

从零开始学cv-14:图像边缘检测

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、图像边缘是什么?二、Sobel 算子三、Scharr 算子四、Prewitt算子五、Canny算子 前言 边缘检测是OpenCV中的一个重要组成部分,它用于识别图像中亮度变化显著的点,即边缘。通过边缘检测,我们可以从图像中提取出重要的特征,为后续的图像分析、形状识别和物体跟踪等任务奠定