简介
数据不符合正态分布时,无法直接用t分布和F分布及正态分布来检验数据的显著性。如果检验对于数据分布没有要求,这类检验统称为非参数检验。本文将介绍其中的一种拟合优度检验。
拟合优度检验—期望频数相等
假设,有家餐馆对顾客对于肉类的是否存在偏好进行调研得到如下数据,调研了120人,得到了他们对于肉类的选择频数分布表如下:
如何确定顾客是否对某一特定肉类存在偏好,需要用到拟合优度检验,通过频数所占比例是否存在差异我们即可推断出顾客对于肉类选择是否存在偏好。
1、做出假设:H0:频数所占比例存在差异。H1:频数所占比例不存在差异。
2、选择置信度:0.05
3、选择测试方法:利用卡方分布进行测试
chi-square = Σ[(f0-fe)**2/fe]
自由度为k-1
4、计算:其中fe为期望频数,f0为实际频数,k为种类数。
5、2.200对于的p_value 为0.5319远大于0.05故接受原假设H0。认为顾客对于肉类没有特殊偏好。
利用python编写代码如下:
def GOF_test_EEF(data, sig):n_total = data.iloc[:,0].sum()k = len(data.iloc[:,0])df = k-1fe = n_total/kdata['chi_square'] = (np.square(data.iloc[:,0] - fe))/fechi_square = data['chi_square'].sum()p = stats.chi2.sf(chi_square, df)result = pd.DataFrame(index = ['n_total', 'df', 'f_e', 'chi_square', 'p_value'], columns = ['result'])result['result'] = [n_total, df,fe, chi_square, p]if p<sig:print('在显著度为'+str(sig)+'下, 认为各组分所占比例没有区别')else:print('在显著度为'+str(sig)+'下, 认为各组分所占比例有区别')return result
输出结果如下:
拟合优度检验—期望频数不相等
当期望频数不等时,检验原理依旧和上述方法一致,将fe依据期望比例对应各个组分计算chi-sqaure。
利用python实现代码如下:
#Goodness-of-fit Test: unqual Expected Frequenciesdef GOF_test_UEF(data,sig):n_total = data.iloc[:,0].sum()m_total = data.iloc[:,1].sum()k = len(data.iloc[:,1])df = k-1fp = data.iloc[:,0]/n_totalfe = m_total*fpdata['chi_square'] = (np.square(data.iloc[:,1] - fe))/fechi_square = data['chi_square'].sum()p = stats.chi2.sf(chi_square, df)result = pd.DataFrame(index = [ 'df', 'chi_square', 'p_value'], columns = ['result'])result['result'] = [df,chi_square, p]if p<sig:print('在显著度为'+str(sig)+'下, 两组数据比例存在区别')else:print('在显著度为'+str(sig)+'下, 两组数据比例没有区别')return result