超几何分布检验(hypergeometric test)与费歇尔精确检验(fisher‘s exact test)

article/2025/11/6 5:05:47

1,超几何分布检验常用来对venn图两个圈overlap的显著性进行检验,费歇尔精确检验常用来对2x2的列联表进行检验。

2,假设有如下的统计数据:

smokenon-smoke
lung cancer106
normal112

现在对其进行费歇尔精确检验,有两种提零假设的方法:
2.1 对比抽烟组和非抽烟组
H0:抽烟组得肺癌的概率p1和非抽烟组得肺癌的概率p2相同; H1: p1和p2不同(可以分为双侧检验p1 不等于 p2,或者单侧检验p1>p2 or p1<p2)。
其中p1=10/(10+1),p2=6/(6+12)。

对于上述2x2表,穷尽所有可能为:
在这里插入图片描述
对每一种可能,根据超几何分布,可以计算概率为

P1=choose(16, 11)*choose(13,0)/choose(29, 11)=0.00013
P2=choose(16, 10)*choose(13,1)/choose(29, 11)=0.0030
P3=choose(16, 9)*choose(13,2)/choose(29, 11)=0.026
P4=choose(16, 8)*choose(13,3)/choose(29, 11)=0.11
P5=choose(16, 7)*choose(13,4)/choose(29, 11)=0.24
P6=choose(16, 6)*choose(13,5)/choose(29, 11)=0.30
P7=choose(16, 5)*choose(13,6)/choose(29, 11)=0.22
P8=choose(16, 4)*choose(13,7)/choose(29, 11)=0.090
P9=choose(16, 3)*choose(13,8)/choose(29, 11)=0.021
P10=choose(16, 2)*choose(13,9)/choose(29, 11)=0.0025
P11=choose(16, 1)*choose(13,10)/choose(29, 11)=0.00013
p12=choose(16, 0)*choose(13,11)/choose(29, 11)=2.25e-06

很明显对于我们的数据,处在P2的位置,
2.11 则对于双侧检验(H1为 p 1 ≠ p 2 p1 \neq p2 p1=p2),
p-value=2*(P1+P2)=0.00626
2.12 对于单侧检验(H1为 p 1 < p 2 p1 < p2 p1<p2),
p-value=P2+P3+…+P12=0.99987
2.13 对于单侧检验(H1为 p 1 > p 2 p1 > p2 p1>p2),
p-value=P1+P2=0.00313

2.2 对比肺癌患者和正常人
H0:肺癌患者中抽烟的概率p1和正常人抽烟的概率p2相同; H1: p1和p2不同(可以分为双侧检验p1 不等于 p2,或者单侧检验p1>p2 or p1<p2)。
其中p1=10/(10+6),p2=1/(1+12)。

此时数据服从的超几何分布和2.1中一样,
2.21 则对于双侧检验(H1为 p 1 ≠ p 2 p1 \neq p2 p1=p2),
p-value=2*(P1+P2)=0.00626
2.22 对于单侧检验(H1为 p 1 > p 2 p1 > p2 p1>p2),
p-value=P1+P2=0.00313
2.12 对于单侧检验(H1为 p 1 < p 2 p1 < p2 p1<p2),
p-value=P2+P3+…+P12=0.99987

用R语言对上述结果的计算命令为
fisher.test(matrix(c(10,1,6,12),nrow=2))Fisher's Exact Test for Count Datadata:  matrix(c(10, 1, 6, 12), nrow = 2)
p-value = 0.00575
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:1.820063 932.303503
sample estimates:
odds ratio 17.83676
可以看出R的计算结果跟我们并不一样,这是因为R的零假设和备择假设跟我们不一样,R的H0和H1分别为

H0: true odds ratio is equal to 1;
H1: true odds ratio is not equal to 1.
它的详细计算过程见:R的stats包中fisher.test()计算过程详解。

3,用超几何分布检验对上述结果进行检验

3.1 设总共有29个人,其中11个吸烟者,18个非吸烟者,现从中随机抽取16个样本(在此实验中对应着肺癌病人),有10个是吸烟者,这样的事件是否显著?用venn图表示为
在这里插入图片描述
(左边的圈为抽样出来的16个样本,可以分为两类:吸烟者和非吸烟者)

用R语言计算:
p-value=phyper(10-1, 11, 18, 16, lower.tail=F)=0.003135274
可以看出此结果跟我们在2中手动算出来的结果相同,为单侧检验。

3.2 设总共有29个人,其中16个癌症患者,13个正常人,现从中随机选出11个人(对应着所有抽烟的人),有10个是癌症患者,这样的事件是否显著?用venn图表示为
在这里插入图片描述
(左边的圈为抽样出来的11个样本,可以分为两类:癌症患者和非癌症患者)

p-value=phyper(10-1, 16, 13, 11, lower.tail=F)=0.003135274

结果与上述都相符。

4,fisher exact test只能用在count数据上,不能用在ratio数据上。


http://chatgpt.dhexx.cn/article/11xvtWb4.shtml

相关文章

【Python计量】异方差性的检验

目录 一、画残差图 二、BP检验 &#xff08;一&#xff09;手动编制函数进行BP检验 &#xff08;二&#xff09;调用statsmodels的函数进行BP检验 三、怀特检验 &#xff08;一&#xff09;手动编制函数进行White检验 &#xff08;二&#xff09;调用statsmodels的函数进…

stata 异方差专题【计量经济系列(四)】

stata 异方差专题【计量经济系列&#xff08;四&#xff09;】 文章目录 1. 异方差检验方法2. 散点图法3. BP检验4. 怀特检验5. FWLS 可行权的最小二乘法6. 小练习 ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯…

Python的strip()函数

在python API中这样解释strip()函数&#xff1a; 声明&#xff1a;s为字符串&#xff0c;rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头、结尾处&#xff0c;位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处&#xff0c;位于 rm删除序列的字符 …

.strip().split('t')和.strip().split()

.strip().split(t) line nihao, zhenhao,dajiahao print(line).strip().split(t) .strip().split() line nihao, zhenhao,dajiahao print(line.strip().split())

Python Strip()使用详解

一、函数定义 可使用快捷键ctrlb&#xff0c;查看函数的定义。 函数功能&#xff1a;默认删除字符前后的空格&#xff0c;如果有指定字符删除自定字符前后指定字符。 注意&#xff0c;该函数只能删除字符前后的字符&#xff0c;不能删除字符中间的字符。 二、默认情况下删除…

python中的strip()和split()

一.strip() strip()简单来说就是&#xff1a; 返回删除前导和尾随空格的字符串副本。如果给定了chars而不是None&#xff0c;则删除chars中的字符。 下面来举几个例子&#xff1a; 1.strip()括号内无任何字符 2.strip()括号内存在字符 二.split() split()函数通常是对字符…

python中strip的使用

今天聊聊python去除字符串空格的函数&#xff1a;strip&#xff08;&#xff09;和replace&#xff08;&#xff09; 1.strip(): 函数功能描述&#xff1a;Python strip() 方法用于移除字符串头尾指定的字符&#xff08;默认为空格或换行符&#xff09;或字符序列。 注意&#…

Python 中strip()方法怎么用?

Python strip() 方法用于去除字符串开头和结尾处指定的字符(默认为空格或换行符)或字符序列&#xff0c;不会去除字符串中间对应的字符。 相关函数有lstrip()和rstrip() 。用法与strip()相同。 lstrip()方法用于去除左边(开始)的空白字符; rstrip()方法用于去除右边(末尾)的…

Linux中source filename .(点)filename ./filename sh filename的区别

在shell中source filename 和 . filename是一样的&#xff0c;但source和 ./filename.sh的执行结果有很大区别&#xff0c;借用一张网上的图。如下 可以看到通过./filename.sh执行shell脚本&#xff0c;脚本内执行的命令和设置的环境变量不影响执行shell脚本的shell环境变量…

is not valid as filename in directory

svn在checkout/update动作时报错&#xff1a;is not valid as filename in directory 进入版本库浏览器查看发现有文件或文件夹名称带空格导致的。 解决方案&#xff1a; 在svn服务器中将文件名按要求命名规范&#xff0c;再本地执行update

git报错Filename too long

描述 碰见一个小小问题&#xff0c;Git在拉代码的时候提示Filename too long&#xff0c;具体如图 刚开始&#xff0c;一开始我是使用git自带的那个工具有问题了&#xff0c;然后我就下载了一个tortoisegit&#xff0c;结果还是有问题&#xff0c;这可是22G文件&#xff0c;我…

__dirname与__filename

&#xff08;1&#xff09; __filename变量 node.js中&#xff0c;在任何模块文件内部&#xff0c;可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名。 在应用程序根目录下新建app.js文件&#xff0c;其中代码如下所示。 var testModule1require(‘./tes…

with open()as filename

使用文件用with的好处 1.会在运行完后自动关闭文件 2.很简单 打开文件并读取 with open(c.xls,r) as t1:content t1.read()print(content) with open(c.xls,r) as t1:content t1.read()con t1.readlines()print(content)print(con) open参数的解释&#xff1a; &#…

__dirname和__filename

1. 概念 __dirname 可以用来动态获取当前文件所属目录的绝对路径__filename 可以用来动态获取当前文件的绝对路径&#xff0c;包含当前文件__dirname 和 __filename 是不受执行node命令所属路径影响的 2. 代码演示 目录结构 app.js文件&#xff0c;使用node app.js 命令执行…

Linux利用filename=${fileuser:-filename}设置文档名

该语句的意思是&#xff1a;如果输入fileuser的有值的话&#xff0c;将该值付给filename 如果在读入变量fileuser的时候直接回车&#xff0c;意思是fileuser里面没有值&#xff0c;那么将”filename”赋予给filename。 以《鸟哥的linux私房菜》chap13中为例&#xff0c;创建的…

Already included file name .......

vue项目修改.vue的文件名之后会发生引入文件时报错 类似于这样 解决办法&#xff1a; 快捷键&#xff1a;Ctrl shift P&#xff0c;打开&#xff1a;“命令面板”&#xff0c;输入&#xff1a;重新加载 详情请见&#xff1a;Already included file name。。。。。Root file…

source 命令的用法(与 sh Filename、./Filename的区别)

source 命令简单来说&#xff0c;就是读取脚本里的语句&#xff0c;并在当前Shell中执行&#xff0c;脚本里面所有新建、改变变量的语句都会保存在当前shell里。 目录 1、source 命令的使用方法 2、source命令的妙用 3、source Filename 和 ./Filename的区别 1、source 命令…

C++ #include expects “FILENAME“ or <FILENAME>

include 标签只能是 #include<FILENAME> 或者 #include "" 要加引号啊

matlab中的imread (line 340) fullname = get_full_filename(filename);

错误提示 错误原因 没有将运行的文件添加到路径中。 解决方法 右击运行文件的文件夹 2.点击添加到路径–>选定的文件夹和子文件夹 3.最后再次尝试运行&#xff0c;问题解决

Already included file name

Already included file name ‘c:/Users/Administrator/Desktop/test/src/components/detailList.vue’ differs from file name ‘c:/Users/Administrator/Desktop/test/src/components/detaillist.vue’ only in casing. The file is in the program because: Imported via ‘…