如何在 Python 中执行卡方拟合优度检验
介绍
数据科学家经常使用统计方法进行假设检验,以从数据集中获得见解。虽然有多种可用的统计方法,但这篇文章将讨论卡方拟合优度检验及其在 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 库中的内置函数实现卡方检验的 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 实现它。让我们用一些关键要点总结一下这篇文章:
卡方检验验证了观察到的分类变量的分布与预期变量分布是否一致。
卡方检验做了一些假设,包括只有一个分类变量、独立变量、至少五个唯一类别和随机抽样的数据。
我们通过接受或拒绝零假设来得出检验结果。
为了接受零假设,阈值必须小于临界值。