Python 如何执行卡方拟合度检验
Data Scientists经常使用统计方法进行假设检验,以从数据集中获取洞察。虽然有多种统计方法可用,但本文将讨论卡方拟合度检验及其在Python中的实现。卡方检验验证了分类变量的观察分布与预期分布是否一致。它告诉我们可用事件值是否与预期值不同。
卡方检验
您可以执行卡方检验来验证观察事件的数据集分布。卡方检验有一些假设,如下所示:
- 变量是独立的。
- 只存在一个分类特征。
- 每个变量必须包含具有超过五个频率计数的类别。
- 随机抽样的数据集。
- 每个数据组的频率计数必须显示互斥性。
卡方检验统计量
卡方检验使用以下公式给出统计输出:
其中
- v表示自由度
- O表示样本观察值
- E表示总体预期值
- n表示变量类别计数
现在让我们学习如何执行卡方检验。
假设检验步骤
执行卡方检验有几个步骤,如下所示:
- 首先,需要创建一个原假设H0和一个备择假设H1。
- 然后,需要决定接受或拒绝原假设的概率阈值。通常情况下,该阈值的值为5%,相应的临界值取决于分布。
- 然后,使用上述公式计算卡方统计量。
- 最后,比较检验统计值与临界值。如果检验统计量大于临界值,则拒绝原假设;否则,无法拒绝原假设。
让我们使用上述步骤来实现测试。
在这里,原假设是变量按预定方式分布。备择假设是变量分布不同。我们将使用两种方法实现卡方检验,如下所述:
使用内置函数实现卡方检验
语法
chi_square_test_statistic, p_value = stats.chisquare(
experience_in_years, Salary)
这个函数接受两个特征,对它们应用卡方公式,并返回卡方检验统计量和p值。
步骤
- 加载所需的依赖项,如scipy和numpy。
-
将要应用测试统计量的特征传递给scipy.stats的卡方函数。
-
获取测试统计量和p值。
-
根据p值和卡方统计量接受或拒绝零假设和备择假设。
示例
该过程从加载所有必要的依赖项开始。
# importing packages
import scipy.stats as stats
import numpy as np
让我们准备一个演示数据,其中包括两列“经验年限”和“薪水”。对于这些数据,我们将进行卡方检验。
# No of years of experience of an employee
# Yearly Salary package in lakhs
experience_in_years= [8, 6, 10, 7, 8, 11, 9]
Salary= [9, 8, 11, 8, 10, 7, 6]
# Chi-Square Goodness of Fit Test
chi_square_test_statistic, p_value = stats.chisquare(
experience_in_years, Salary)
# chi square test statistic and p value
print('chi_square_test_statistic is : ' +
str(chi_square_test_statistic))
print('p_value : ' + str(p_value))
# find Chi-Square critical value
print(stats.chi2.ppf(1-0.05, df=6))
解释
上述代码是使用Scipy库中的内置函数实现的Chi-Square检验的Python实现。从stats中导入了chisquare方法,它返回两个值:卡方检验统计量和p值。该方法接受两个特征,并将比较两个变量,并应用上述卡方公式来计算卡方统计量。在这里,我们比较了工作经验年限和年薪之间的关系。
输出
chi_square_test_statistic is : 5.0127344877344875
p_value : 0.542180861413329
12.591587243743977
正如我们在这里可以看到的那样,p值为0.54,临界值为12.59。检验统计量小于临界值,因此我们可以接受原假设并拒绝备择假设。
从头开始实施卡方检验
语法
chi_square_test_statistic1 = chi_square_test_statistic1 + \
(np.square(experience_in_years[i]-salary[i]))/salary[i]
使用上述公式计算数据集中每个样本的卡方值,并将它们加在一起得到最终得分。
步骤
- 加载所需的依赖项,如numpy。
-
用值为0的变量初始化,该变量将存储统计量的最终值。
-
对数据中的每个样本进行迭代,计算每个样本的统计量,并将其添加到包含统计量最终值的变量中。
-
一旦计算出统计量,接受或拒绝零假设和备择假设。
示例
该方法将使用公式实现卡方适合度检验。这种方法将产生与上述方法相同的结果。
import scipy.stats as stats
import numpy as np
# No of years of experience of an employee
# Yearly Salary package in lakhs
experience_in_years= [8, 6, 10, 7, 8, 11, 9]
salary= [9, 8, 11, 8, 10, 7, 6]
# determining chi square goodness of fit using formula
chi_square_test_statistic1 = 0
for i in range(len(experience_in_years)):
chi_square_test_statistic1 = chi_square_test_statistic1 + \
(np.square(experience_in_years[i]-salary[i]))/salary[i]
print('chi square value determined by formula : ' +
str(chi_square_test_statistic1))
# find Chi-Square critical value
print(stats.chi2.ppf(1-0.05, df=6))
解释
上述代码已在Python中实现,用于对相同数据进行卡方检验。在此方法中,我们只使用Python实现了卡方统计公式,而没有导入内置方法。for循环帮助迭代数据集。然后,我们使用NumPy实现了上述公式,并将分数与以前的分数相加,以获得整个数据集的总分。最后,我们检查使用此方法得到的卡方统计。
输出
chi square value determined by formula : 5.0127344877344875
12.591587243743977
正如我们所预期的那样,结果与我们使用上一方法得到的结果相同。这个结果还表明我们不应拒绝零假设,但我们可以拒绝备择假设。
结论
我们学习了卡方拟合优度检验以及如何使用Python实施它。让我们用以下几个关键要点总结本文:
-
卡方检验验证了观察到的分类变量与期望变量分布的一致性。
-
卡方检验有一些假设,包括只有一个分类变量、独立变量、至少五个唯一类别和随机抽样的数据。
-
我们通过接受或拒绝零假设来得出检验结果。
-
阈值必须小于临界值才能接受零假设。