验证性分析—相关假设检验
前文中我们谈到了不同变量层次的相关计算,但那仅仅局限于样本,如果想对总体进行相关推导,就要进行相关假设检验。
针对不同的变量层次变量,有四种相关假设检验方法:
定类-定类 定类-定序 | 卡方检验 |
定序-定序 | Gamma检验 |
定类-定距 | 方差分析(F检验) |
定距-定距 | 回归检验 |
1.卡方检验
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。
步骤
(1)设A代表某个类别的观察频数,E代表基于H0计算出的期望频数,A与E之差称为残差。
(2)显然,残差可以表示某一个类别观察值和理论值的偏离程度,但如果将残差简单相加以表示各类别观察频数与期望频数的差别,则有一定的不足之处。因为残差有正有负,相加后会彼此抵消,总和仍然为0,为此可以将残差平方后求和。
(3)另一方面,残差大小是一个相对的概念,相对于期望频数为10时,期望频数为20的残差非常大,但相对于期望频数为1 000时20的残差就很小了。考虑到这一点,人们又将残差平方除以期望频数再求和,以估计观察频数与期望频数的差别。
进行上述操作之后,就得到了常用的χ2统计量,由于它最初是由英国统计学家Karl Pearson在1900年首次提出的,因此也称之为Pearson χ2,其计算公式为
(i=1,2,3,…,k)
其中,A**i为i水平的观察频数,E**i为i水平的期望频数,n为总频数,p**i为i水平的期望频率。i水平的期望频数E**i等于总频数n×i水平的期望概率p**i,k为单元格数。当n比较大时,χ2统计量近似服从k-1(计算E**i时用到的参数个数)个自由度的卡方分布。
2.Gamma检验
3.方差分析
方差分析(ANOVA)又称“变异数分析”或“F检验”,用于两个及两个以上样本均数差别的显著性检验。
由于各种因素的影响,研究所得的数据呈现波动状。造成波动的原因可分成两类,一是不可控的随机因素,另一是研究中施加的对结果形成影响的可控因素。
一个复杂的事物,其中往往有许多因素互相制约又互相依存。方差分析的目的是通过数据分析找出对该事物有显著影响的因素,各因素之间的交互作用,以及显著影响因素的最佳水平等。方差分析是在可比较的数组中,把数据间的总的“变差”按各指定的变差来源进行分解的一种技术。对变差的度量,采用离差平方和。方差分析方法就是从总离差平方和分解出可追溯到指定来源的部分离差平方和,这是一个很重要的思想。
步骤
需要构造三个误差平方和,总平方和(SST)、组间平方和(SSA)和组内平方和(SSE)。且SST=SSA+SSE。其中,组内平方和SSE体现了随机抽样因素对总方差的贡献,而组间平方和SSA体现了随机因素和不同水平对总方差的贡献。因此,如果SSA比SSE大很多,达到一定的显著性水平,可以认为因素的不同水平对因变量影响显著。
SST:全部观测值与总均值的误差平方和
SSA:各组均值与总均值的误差平方和,反映各样本均值之间的差异程度。
SSE:每个水平或组的样本数据与其组均值的误差平方和。
计算统计量
各平方误差除以它们所对应的自由度,称为均方。
SST的自由度为n-1,其中n为全部观测值个数;
SSA的自由度为k-1,k为因素水平的个数
SSE的自由度为n-k。
MST=SST/n-1;
MSA=SSA/k-1;
MSE=SSE/n-k;
则F=MSA/MSE~F(k-1,n-k)分布。
4.回归系数与方程检验
回归系数显著性检验(significant test of regression coefficient)是检验某些回归系数是否为零的假设检验。考虑线性回归模型:
不失一般性,可假定要检验后k个(1≤k≤p)回归系数是否为零
为假定后k个系数为零时(即少了k个自变量)的模型的残差平方和。
python实现
import pandas as pd
import numpy as np
#卡方检验
#将数据格式化为技术表
contingency_table = pd.crosstab(workhour_by_sex['sex'],workhour_by_sex['hours_per_week_categories'],margins = True)
#进行数据选取
f_obs = np.array([contingency_table.iloc[0][0:6].values,
contingency_table.iloc[1][0:6].values])
#进行检验
from scipy import stats
stats.chi2_contingency(f_obs)[0:3]
#方差分析
d1 = df[df['group']==1]['value']
d2 = df[df['group']==2]['value']
d3 = df[df['group']==3]['value']
d4 = df[df['group']==4]['value']
d5 = df[df['group']==5]['value']
args = [d1,d2,d3,d4,d5]
f,p = stats.f_oneway(*args)
print(f,p)
#回归方程检验
from statsmodels.formula.api import ols
data = pd.DataFrame({'x':x, 'y':y})
model = ols('y~x', data).fit()
print(model.summary())