如何在Python中执行 McNemar 测试
McNemar 检验:这是对成对标称数据的非参数检验。当我们想要找到成对数据的比例变化时使用此测试。该检验也称为 McNemar 卡方检验。这是因为检验统计量具有卡方分布。
McNemar 检验的假设:
以下是测试的主要假设:
- 我们必须有一个具有两个类别(二分变量)的名义变量和一个具有两个连接组的自变量。
- 两组因变量必须互斥。简而言之,参与者不能属于多个组。
- 样本必须是随机样本。
在Python中进行 McNemar 的测试:
让我们考虑一下,研究人员有兴趣知道某个产品的广告视频是否可以改变人们对该产品的看法。对 50 人进行了一项调查,以确定他们是否想购买该产品。然后,将广告视频展示给所有 50 人,并在他们观看视频后再次进行调查。数据如下表所示。 Support Do Not Support Before advertisement Video 30 20 After advertisement Video 10 40
要了解观看视频前后想要购买产品的人的比例是否存在统计学上的显着差异,我们可以进行 McNemar 检验。执行 McNermar 的测试是一个循序渐进的过程。下面解释这些步骤。
第 1 步:创建数据。
Python3
# Create a dataset
data = [[30, 20],
[10, 40]]
Python3
# Import library
from statsmodels.stats.contingency_tables import mcnemar
# Create a dataset
data = [[30, 20],
[10, 40]]
# McNemar's Test without any continuity correction
print(mcnemar(data, exact=False))
# McNemar's Test with the continuity correction
print(mcnemar(data, exact=False, correction=False))
第 2 步:进行 McNemar 测试。
现在让我们进行 McNemar 测试。 Statsmodels 在Python库中提供了 mcnemar()函数,其语法如下所示。
Syntax:
mcnemar(table, exact=True, correction=True)
Parameters:
- table: It represents the square contingency table
- exact = True: The binomial distribution will be used.
- exact = False: The Chi-Square distribution will be used
- correction = True: Then the continuity correction would be used. As a rule. this correction would be applied any cell counts in the table is not more than 4
例子:
Python3
# Import library
from statsmodels.stats.contingency_tables import mcnemar
# Create a dataset
data = [[30, 20],
[10, 40]]
# McNemar's Test without any continuity correction
print(mcnemar(data, exact=False))
# McNemar's Test with the continuity correction
print(mcnemar(data, exact=False, correction=False))
输出:
对于这两种情况,无论我们是否应用连续性校正,检验的 p 值均不小于 0.05。这意味着在这两种情况下,我们都不能拒绝零假设,并且可以得出结论,在观看营销视频之前和之后支持该产品的人的比例在统计上没有显着差异。