比率检验原理及R语言实现
总体比率的假设检验实际上是业界最常用也是最需要的检验,例如在ABtest中,检验两个实验的转化率是否有显著差异,则需要用到比率检验。本文介绍比率检验的原理,以及R语言的实现代码。
单总体比率的假设检验
前提条件:
- 样本取自两点分布 X∼B(1,p)X \sim B(1,p)X∼B(1,p)
- 样本量nnn很大,能够满足 np>5np>5np>5 且 n(1−p)>5n(1-p)>5n(1−p)>5
记要检验的原假设为为 H0:p=p0H_0: p=p_0H0:p=p0,则样本比率 p~\widetilde{\mathrm{p}}p服从方差为p(1−p)/np(1-p)/np(1−p)/n的正态分布,对应标准化的检验统计量近似服从N(0,1)N(0,1)N(0,1) :
u=n(p~−p0)p0(1−p0)\mathrm{u}=\frac{\sqrt{\mathrm{n}}\left(\widetilde{\mathrm{p}}-\mathrm{p}_{0}\right)}{\sqrt{\mathrm{p}_0\left(1-\mathrm{p}_0\right)}} u=p0(1−p0)n(p−p0)
实际上,当样本量很少时,需要采用精确的比率检验,即直接使用二项分布来检验,具体实现见下文的R代码。
两个总体比率的假设检验
检验前提条件:
- 两总体互相独立
- 变量都取自两点分布,即两总体服从二项分布
- 两总体且每类的样本量满足大于5的要求,从而能用正态分布来近似
那么可知:
(p~1−p~2)−(p1−p2)p1(1−p1)n1+p2(1−p2)n2≈(p~1−p~2)−(p1−p2)p1(1−p~1)n1+p~2(1−p~2)n2∼N(0,1)\frac{\left(\widetilde{\mathrm{p}}_1-\widetilde{\mathrm{p}}_2\right)-\left(\mathrm{p}_1-\mathrm{p}_2\right)}{\frac{\mathrm{p}_1\left(1-\mathrm{p}_1\right)}{\mathrm{n}_1}+\frac{\mathrm{p}_2\left(1-\mathrm{p}_2\right)}{\mathrm{n}_2}} \approx \frac{\left(\widetilde{\mathrm{p}}_1-\widetilde{\mathrm{p}}_2\right)-\left(\mathrm{p}_1-\mathrm{p}_2\right)}{\frac{\mathbb{p}_1\left(1-\widetilde{\mathrm{p}}_1\right)}{\mathrm{n}_1}+\frac{\widetilde{\mathrm{p}}_2\left(1-\widetilde{\mathrm{p}}_2\right)}{\mathrm{n}_2}} \sim \mathrm{N}(0,1) n1p1(1−p1)+n2p2(1−p2)(p1−p2)−(p1−p2)≈n1p1(1−p1)+n2p2(1−p2)(p1−p2)−(p1−p2)∼N(0,1)
因此对应的标准化检验统计量如下:
- 1)当原假设为H0:p1−p2=0H_0:p_1-p_2=0H0:p1−p2=0时,最佳估计量为联合两组样本的比率p^=x1+x2n1+n2=p1n1+p2n2n1+n2\hat{\mathrm{p}}=\frac{\mathrm{x}_1+\mathrm{x}_2}{\mathrm{n}_1+\mathrm{n}_2}=\frac{\mathrm{p}_1 \mathrm{n}_1+\mathrm{p}_2 \mathrm{n}_2}{\mathrm{n}_1+\mathrm{n}_2}p^=n1+n2x1+x2=n1+n2p1n1+p2n2,于是检验统计量如下:
z=(p~1−p~2)−0p^(1−p^)n1+p^(1−p^)n2=(p~1−p~2)p^(1−p^)(1n1+1n2)z=\frac{\left(\widetilde{p}_1-\widetilde{p}_2\right)-0}{\frac{\hat{p}(1-\hat{p})}{n_1}+\frac{\hat{p}(1-\hat{p})}{n_2}}=\frac{\left(\tilde{p}_1-\tilde{p}_2\right)}{\hat{p}(1-\hat{p})\left(\frac{1}{n_1}+\frac{1}{n_2}\right)} z=n1p^(1−p^)+n2p^(1−p^)(p1−p2)−0=p^(1−p^)(n11+n21)(p~1−p~2)
- 2)当原假设为H0:p1−p2=d0(d0≠0)H_0:p_1-p_2=d_0(d_0 \neq 0)H0:p1−p2=d0(d0=0)时,直接用两个样本的比率p~1\widetilde{p}_1p1和p~2\widetilde{p}_2p2相应估计两个总体的的比率p1p_1p1和p2p_2p2,于是检验统计量入下:
z=(pˉ1−pˉ2)−d0pˉ1(1−pˉ1)n1+pˉ2(1−p~2)n2z=\frac{\left(\bar{p}_1-\bar{p}_2\right)-d_0}{\frac{\bar{p}_1\left(1-\bar{p}_1\right)}{n_1}+\frac{\bar{p}_2\left(1-\widetilde{p}_2\right)}{n_2}} z=n1pˉ1(1−pˉ1)+n2pˉ2(1−p2)(pˉ1−pˉ2)−d0
R语言实现
除了直接用代码写上面的公式,实际上可以直接使用现成的检验函数:chisq.test
和 prop.test
,这两个函数默认都会加Yates 校正(修正小样本的影响,具体见文末),但要得到和上文公式一样的结果,则注意限制correct = F
。
- 检验单总体比率是否等于特定的值:
prop.test
,大样本才适用的近似检验- 不加Yates 校正和上文公式结果的平方一致(小样本一般都需要加Yates 校正)
binom.test
,精确的比率检验,即直接使用二项分布检验是否是该比率
- 检验两总体比率是否相等:
chisq.test
,大样本才适应的近似检验- 不加Yates 校正和上文公式结果的平方一致(小样本一般都需要加Yates 校正)
- 正态分布平方,服从自由度为1的卡方分布
- 注意卡方检验的传参:是两个样本分别取0和1的数量(而不是取1的量和整体量n)
- Fisher 精确检验,适用于小样本量(此处暂无示例)
单总体比率检验
x=60
n=2000
p_real=x/n
p0=0.02
u=sqrt(n)*(p_real-p0)/sqrt(p0*(1-p0))
u^2
# 不加校正,得到和u^2一致的结果
prop.test(x, n,p0, correct = F)# > u^2
# [1] 10.20408
# > prop.test(x, n,p0, correct = F)$statistic
# X-squared
# 10.20408
实际上单比率检验,推荐直接使用精确的二项分布的假设检验即可。可以看到p值远小于0.05,因此拒绝比率是 p0p_0p0 的原假设,认为改总体比率不为p0p_0p0 。
# > binom.test(x, n, p0)
# Exact binomial test
#
# data: x and n
# number of successes = 60, number of trials =
# 2000, p-value = 0.002974
# alternative hypothesis: true probability of success is not equal to 0.02
# 95 percent confidence interval:
# 0.02296955 0.03844886
# sample estimates:
# probability of success
# 0.03
两总体比率相等的假设检验
# 检验的样本如下:
a=19;b=22;c=52;d=39
pA=a/(a+c);pB=b/(b+d)
nA=a+c;nB=b+d# 借助chisq.test检验两总体比率是否一致
a1 <- rbind(c(nA*(1-pA),nA*pA), c(nB*(1-pB), nB*pB))
# 此处为了保持一致未加Yates 校正,但实际应用最好设置 correct=T
chisq.test(a1,correct=F)# 直接计算统计量,和上面卡方检验的X-squared一致,都是 1.326693
p_fit=(a+b)/(a+b+c+d)
z2=(pA-pB)/sqrt((1/nA+1/nB)*p_fit*(1-p_fit))
z2^2
# > chisq.test(a1,correct=F)
#
# Pearson's Chi-squared test
#
# data: a1
# X-squared = 1.3267, df = 1, p-value = 0.2494
#
# > z2^2
# [1] 1.326693
可以看到p值大于0.05,认为无法拒绝原假设,即p1=p2p_1=p_2p1=p2
注意只是在这次样本里找不到拒绝的理由,不代表这两个比率就一定相等了
Yates 校正
小样本情况时Yates 校正后的卡方统计量可信度更高(大样本时对其影响很微弱),因此我们最常用加了Yates 校正后的比率检验,对应Yates 校正实际上是对卡方分布的统计量的修正,取平方之前将正偏差(观测-期望)减0.5,负偏差时加0.5,对应公式如下:
X2((n1−1)∗(n2−1))=∑i=1n1∑j=1n2(∣Oij−Eij∣−0.5)2Eij\mathrm{X}^2((n_1-1)*(n_2-1)) = \sum_{i=1}^{n_1}\sum_{j=1}^{n_2} \frac{\left(\left|O_{ij}-E_{ij}\right|-0.5\right)^2}{\mathrm{E}_{\mathrm{ij}}} X2((n1−1)∗(n2−1))=i=1∑n1j=1∑n2Eij(∣Oij−Eij∣−0.5)2
Tips
本文为博主从自己的github主页复制迁移至此,原文链接在博客 https://hetal-cq.github.io/
比率检验原理及R语言实现相关推荐
- r语言平均值显著性检验_8小时整理!t检验原理!R语言实现!一文彻底搞定t检验(上)...
本文中会加一些注解,是对于一些常用混淆概念得解释.主要内容包括t检验适用范围.实际案例以及R语言的实现. 因文章内容过长,所以分为上下两篇 t检验(t test)亦称 t检验,以t分布为基础,是定量资 ...
- ++代码实现 感知机的原理_决策树ID3原理及R语言python代码实现(西瓜书)
决策树ID3原理及R语言python代码实现(西瓜书) 摘要: 决策树是机器学习中一种非常常见的分类与回归方法,可以认为是if-else结构的规则.分类决策树是由节点和有向边组成的树形结构,节点表示特 ...
- 判别分析原理及R语言实现
判别分析内容 判别分析做的好能挖掘数据最大的价值.判别分析(discriminat analysis)他要解决的问题是在一些已知研究对象已经用某种方法分成若干类的情况下,确定新的样品属于已知类别中的哪 ...
- 主成分分析(PCA)原理及R语言实现
在生物信息分析中,PCA.t-SNE和diffusionMap其实是一类东西. StatQuest: Principal Component Analysis (PCA) clearly explai ...
- 机器学习中的K-means算法原理与R语言实例
聚类是将相似对象归到同一个簇中的方法,这有点像全自动分类.簇内的对象越相似,聚类的效果越好.支持向量机.神经网络所讨论的分类问题都是有监督的学习方式,现在我们所介绍的聚类则是无监督的.其中,K均值(K ...
- 主成分分析(PCA)原理及R语言实现及分析实例
主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.最近我们被客户要求撰写关于主成分分析(PCA)的研究报告,包括一些图形和统计输出.例如,使 ...
- 【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享
原文链接:http://tecdat.cn/?p=2687 在贝叶斯方法中,马尔可夫链蒙特卡罗方法尤其神秘(点击文末"阅读原文"获取完整代码数据). 它们肯定是数学繁重且计算量大的 ...
- 主成分分析计算机如何实现,主成分分析(PCA)原理及R语言实现及分析实例
评价美国法官评分中要保留的主成分个数.碎石图(直线与x符号).特征值大于1准则(水平线)和100次模拟的平行分析(虚线)都表明保留一个主成分即可 可以看出只有左上交Component Number为1 ...
- R语言稀疏主成分分析、因子分析、KMO检验和Bartlett球度检验分析上市公司财务指标数据...
全文链接:http://tecdat.cn/?p=31080 R中的主成分分析(PCA)和因子分析是统计分析技术,也称为多元分析技术(点击文末"阅读原文"获取完整代码数据). 当可 ...
最新文章
- 为什么电脑不能打字_为什么新电脑不能安装win7系统?
- python语法手册-Python编程参考手册
- 洛谷 - P2444 - 病毒 - AC自动机
- GARFIELD@11-10-2004
- React Hooks的使用(三)——useRef、useImperativeHandle、useLayoutEffect解析、自定义Hook
- mcq 队列_MCQ | 基础知识 免费和开源软件| 套装3
- 浅谈ButterKnife对Android性能的影响
- 开机直接进入键盘布局_屏幕虚拟键盘的使用
- 常见问题_轴承零件加工常见问题?
- Apache Rewrite 拟静态配置
- 使用nginx时候html页面乱码解决办法
- 精心整理的10套最美Web前端新年特效--提前祝大家新年快乐
- SQL Server 2008 下载地址
- php创建菜单_php实现微信公众号创建自定义菜单
- java两两组合(不重复)
- Python让Excel飞起来—批量处理行、列和单元格
- 报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title featur
- Images to Video(图片转视频软件)v4.0官方版
- python解析omim网页内容
- 读吕林根之《解析几何》