介绍
比例Z检验主要用于检验样本比例与总体比例是否存在显著差异,或者两个独立样本的比例之间是否存在显著差异。通常,这种检验用于大样本(通常样本大小大于30)和二项式分布数据。
比例Z检验基于中心极限定理。当样本量足够大时,样本比例的抽样分布近似服从正态分布。
相关笔记:均值Z检验
应用场景
-
单样本比例检验:检验样本比例是否与已知或假设的总体比例显著不同。
政府决定扶持员工少数民族占比超过15%的公司。一家公司共73人,其中13人是少数民族。则该公司员工少数民族占比是否显著超过政府规定的15%?
一个推荐系统上线前的预期点击转化率为50%。上线后,曝光用户数为10000,其中5100个用户点击了推荐物品,真实点击转化率为51%,高于预期的50%。但是在曝光用户数为10000的量级上,高于预期1%是否能够说明真实和预期点击转化率有显著差异呢?
-
双样本比例检验:比较两个独立样本的比例是否存在显著差异。
为了解聚乙二醇400(PEG 400)对儿童功能性便秘的治疗效果,某医生将符合试验条件的216名8岁以上功能性便秘患儿随机分为试验组和对照组,实验组口服PFG400治疗,对照组口服乳果糖治疗。其中试验组105人,两周缓解76人;果乳糖组111人,两周缓解49人。试比较试验组和对照组治疗后便秘的两周缓解率有无差别。
在一次政治票选中,46%的男性和49%的女性声称他们支持特朗普称为总统。如果该次统计当中包含247名男性和185名女性,那么男性和女性对于特朗普的支持率是否有显著差异?
注意事项:
- 这些检验假设样本量足够大(通常n > 30)。
- 对于单样本比例检验,还假设np > 5且n(1-p) > 5。
- 对于两个比例的差异Z检验,假设n1p1 > 5, n1(1-p1) > 5, n2p2 > 5, n2(1-p2) > 5。
如果这些假设不满足,可能需要考虑使用其他方法,如Fisher’s exact test或卡方检验。
公式
-
单样本的比例Z检验
比例的Z检验用于检验样本比例与总体比例是否有显著差异。其公式为:
Z=np(1−p)p^−p
其中:
- p^ 是样本比例
- p 是假设的总体比例
- n 是样本量
-
独立双样本的比例Z检验
用于检验两个独立样本的比例是否有显著差异。其公式为:
Z=n1p^1(1−p^1)+n2p^2(1−p^2)(p^1−p^2)−(p1−p2)
其中:
- p^1 和 p^2 分别是两个样本的比例
- p1 和 p2 分别是两个总体的比例
- n1 和 n2 分别是两个样本的样本量
当原假设为 H0:p1=p2 时,我们可以使用池化估计:
Z=p^(1−p^)(n11+n21)p^1−p^2
其中,p^=n1+n2x1+x2 是池化比例估计,x1 和 x2 分别是两个样本中具有某特征的个数。
代码实现
matlab实现
用MATLAB实现单样本比例检验和两个比例的差异Z检验。将分别创建两个函数来实现这两种检验。
单样本比例检验
首先,让我们实现单样本比例检验的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| function [z, p_value] = proportion_z_test(x, n, p0, alpha)
if nargin < 4 alpha = 0.05; end
p_hat = x / n; se = sqrt(p0 * (1 - p0) / n); z = (p_hat - p0) / se;
p_value = 2 * (1 - normcdf(abs(z)));
fprintf('Z统计量: %.4f\n', z); fprintf('P值: %.4f\n', p_value); fprintf('在%.2f的显著性水平下:\n', alpha); if p_value < alpha fprintf('拒绝原假设,样本比例与总体比例有显著差异\n'); else fprintf('不能拒绝原假设,样本比例与总体比例无显著差异\n'); end
end
|
使用示例:
1 2
| [z, p] = proportion_z_test(60, 100, 0.5);
|
两个比例的差异Z检验
现在,让我们实现两个比例的差异Z检验的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| function [z, p_value] = two_proportion_z_test(x1, n1, x2, n2, alpha)
if nargin < 5 alpha = 0.05; end
p1 = x1 / n1; p2 = x2 / n2; p_pooled = (x1 + x2) / (n1 + n2);
se = sqrt(p_pooled * (1 - p_pooled) * (1/n1 + 1/n2)); z = (p1 - p2) / se;
p_value = 2 * (1 - normcdf(abs(z)));
fprintf('Z统计量: %.4f\n', z); fprintf('P值: %.4f\n', p_value); fprintf('在%.2f的显著性水平下:\n', alpha); if p_value < alpha fprintf('拒绝原假设,两个样本的比例有显著差异\n'); else fprintf('不能拒绝原假设,两个样本的比例无显著差异\n'); end
end
|
使用示例:
1 2
| [z, p] = two_proportion_z_test(60, 100, 80, 150);
|
Python实现
单样本比例检验
1 2 3 4 5 6 7 8
| # 检验样本合格率与0.38是否有差异 import numpy as np from statsmodels.stats.proportion import proportions_ztest
counts=200; nobs=500; value=0.38
# 计算z检验统计量及p值 proportions_ztest(counts, nobs, value)
|
双样本比例差异检验
1 2 3 4 5 6 7 8 9 10 11 12
| # 两样本合格率是否有差异 import numpy as np from statsmodels.stats.proportion import proportions_ztest
count1=200; nobs1=500 count2=150; nobs2=500
counts=np.array([count1,count2]) nobs=np.array([nobs1,nobs2])
# 计算z检验统计量及p值 proportions_ztest(counts, nobs)
|
R
在R中,也可以使用内置函数进行这些检验:
- 对于单样本比例检验,可以使用
prop.test()
函数。
- 对于两个比例的差异检验,也可以使用
prop.test()
函数,只需提供两个样本的数据。
例如:
1 2 3 4 5
| r prop.test(60, 100, p = 0.5)
prop.test(c(60, 80), c(100, 150))
|
这些内置函数提供了更多的统计信息,如置信区间等,可能在某些情况下更为有用。