如何在Python中执行卡方拟合优度检验
在统计学上,卡方拟合优度检验是一种常见的假设检验方法,用于检测一组样本数据是否来自于一个理论分布。在Python中,我们可以使用SciPy库中的chisquare函数来进行卡方拟合优度检验,并且只需要几行代码即可完成。
理论知识
卡方拟合优度检验需要先假设一个理论的分布模型,并将这个分布模型中的参数估计出来。然后,使用样本数据与理论分布进行比较,计算出一个卡方值。卡方值越大,样本数据与理论分布的偏差就越大。最后,使用卡方分布表来判断卡方值是否达到显著程度。
卡方拟合优度检验的假设条件:
1. 样本数据是随机样本,并且每个样本之间是相互独立的。
2. 每个样本都必须满足最小的样本限制。
3. 样本所在的总体必须是随机的,并且可以用一个理论分布来描述。
卡方拟合优度检验的步骤:
1. 假设一个理论分布,并且计算出理论分布的概率密度函数。
2. 统计样本数据中每个取值的出现次数。
3. 根据理论分布的概率密度函数和样本数据中每个取值的出现次数,计算出期望频数。
4. 根据期望频数和样本数据中每个取值的出现次数,计算出卡方值。
5. 计算出卡方值的自由度,并且查找卡方分布表中自由度为自由度的列。
6. 在卡方分布表中查找卡方值所对应的显著性水平,如果显著性水平小于设定的显著性水平,那么就认为拒绝原假设,否则不拒绝原假设。
Python实现
我们来看一组示例数据,假设我们有一个骰子,它有六面,每个面的点数是1,2,3,4,5,6。我们进行了100次随机投掷,记录每个点数出现的次数,数据如下:
import numpy as np
observed_values = [18, 27, 21, 13, 15, 6]
我们的假设是这个骰子是均匀的,那么每个点数的概率应该是1/6。我们可以使用numpy库的repeat函数,将1/6重复6次,得到一个长度为6的列表,表示所有点数的概率。
expected_values = np.repeat(1/6, 6) * 100
接下来,我们使用SciPy库中的chisquare函数,传入观察值和期望值列表,即可得到卡方值和p值。
from scipy.stats import chisquare
chisq, p = chisquare(observed_values, expected_values)
print('卡方值为:', chisq)
print('p值为:', p)
代码输出结果为:
卡方值为: 5.6
p值为: 0.34527943895596873
由于我们使用的显著性水平是0.05,即置信度为95%,那么如果p值小于0.05,就可以拒绝原假设,即表示我们的样本数据不符合假设的理论分布。在本例中,p值为0.345,大于0.05,因此我们不能拒绝原假设,即表示我们的样本数据符合均匀分布的假设。
除了手动计算期望值和卡方值外,还可以使用SciPy库中的stats模块来进行卡方拟合优度检验。我们可以使用chisquare函数,传入观察值和理论概率(可以是一个列表或一个函数,表示每个取值的概率),即可得到卡方值和p值。
示例代码如下:
from scipy.stats import chisquare
observed_values = [18, 27, 21, 13, 15, 6]
expected_values = [100 / 6] * 6 # 理论概率为1/6
chisq, p = chisquare(observed_values, f_exp=expected_values)
print("卡方值为:", chisq)
print("p值为:", p)
输出结果与前面手动计算的一致。
结论
卡方拟合优度检验是一种常见的假设检验方法,可以用来检测样本数据是否符合一个理论分布。在Python中,我们可以使用SciPy库中的chisquare函数来进行卡方拟合优度检验,只需要传入观察值和理论概率或期望值,即可得到卡方值和p值。通过卡方值和p值的比较,可以判断样本数据是否符合假设的理论分布。