0%

假设检验 | 卡方检验 Chi-squared Test

$\chi^2$-test

卡方检验

  • 用于检验单个正态总体方差

假设$x_1,\cdots,x_n$是来自正态总体$N(\mu,\sigma^2)$的样本,对方差考虑如下三个检验问题:

  1. $$H_0:\sigma^2 \leq \sigma_0^2 \quad \mathrm{vs} \quad H_1:\sigma^2 > \sigma^2_0$$
  2. $$H_0:\sigma^2 \geq \sigma_0^2 \quad \mathrm{vs} \quad H_1:\sigma^2 < \sigma^2_0$$
  3. $$H_0:\sigma^2 = \sigma_0^2 \quad \mathrm{vs} \quad H_1:\sigma^2 \neq \sigma^2_0$$

其中$\sigma_0^2$是已知常数。通常假定$\mu$未知。

以上假设检验采用的检验统计量
$$ \chi^ = (n-1) \frac{s^2}{ \sigma_0^2 }$$

当$ \sigma^2 = \sigma_0^2 $时,有$ \chi^2 \sim \chi^2(n-1)$。

若取显著性水平为$\alpha$,则对应三个检验问题的拒绝域分别为
$$W_1={\chi^2 \geq \chi^2_{ 1-\alpha }(n-1) }$$
$$W_2={\chi^2 \leq \chi^2_\alpha(n-1) }$$
$$W_3={\chi^2 \leq \chi^2_{ \frac{ \alpha }{2} }(n-1) } \mbox{或} { \chi^2 \geq \chi_{ 1-\frac{\alpha}{2} }(n-1) }$$

  • $\chi^2$分布是偏态分布

三个检验问题的p值分别为
$$p_1=P(\chi^2 \geq \chi_0^2)$$
$$p_2=P(\chi^2 \leq \chi_0^2)$$
$$p_3=2 \min \left\brace P(\chi\geq\chi2_0),P(\chi2\leq\chi^2_0) \right\rbrace $$

$\chi^2$拟合优度检验

分类数据的$\chi^2$拟合优度检验

根据某项指标,总体被分为$K$类:$A_1,A_2,\cdots,A_K$。关心各类元素在总体中所占的比率:
$$H_0:A_i \mbox{所占的比率是} p_{i0}, \quad i=1,\cdots,K.$$
其中,$p_{i0}$已知且满足$\sum_{i=1}^Kp_{i0}=1$。

记$x_1,\cdots,x_n$是从该总体抽出的样本,且其中属于$A_i$类别的样本数为$n_i$。

当零假设$H_0$成立时,在$n$个样本中属于$A_i$类的“理论个数”/“期望个数”为$np_{i0}$,而实际观测得到的值是$n_i$,当$H_0$成立时,$n_i$与$np_{i0}$应相差不大。因此,使用统计量(Pearson提出的)
$$\chi^2 = \sum_{i=1}^K \frac{(n_i-np_{i0})^2}{ np_{i0} } $$
来衡量“理论个数”$np_{i0}$与实际个数$n_i$间的差异。

当$H_0$为真时,该统计量的值应该比较小。因此,拒绝域为
$${\chi^2\geq c}$$
其中$c$为待确定的临界值。

定理*

在前述各项假定下,在$H_0$成立时,检验统计量$\chi^2 = \sum_{i=1}^K \frac{(n_i-np_{i0})^2}{ np_{i0} }$有
$$\chi^2\stackrel{L}{\longrightarrow} \chi^2(K-1)$$

显著性水平为$\alpha$时检验的拒绝域为
$$W={ \chi^2 \geq \chi^2_{1-\alpha} (K-1) }$$

在实际问题中,第$i$类$A_i$出现的概率$p_{i}$并不一定已知,可以先用最大似然估计方法估计出$p_i$依赖的参数($r$个),然后再算出$p_i$的估计值 $\hat{p}i$,则统计量为
$$ \chi^2 = \sum
{i=1}^K \frac{ (n_i - n \hat{p}_i )^2 }{n \hat{p}_i }$$
当$n\rightarrow \infty$时,该统计量渐近服从自由度为$K-r-1$的$\chi^2$分布。

上述两个检验统计量主要用于大样本场合,在实际应用中,一般要求各类的观测数均不小于5。当有些类的样本数不满足要求时,需要将一些相邻的类合并以达到要求。

Python

基本实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from scipy.stats import chi2_contingency

def chi2_test(df1, df2, col):
'''
### input ###
df1, df2: 待检验的两组样本(DataFrame)
col: 待检验的指标(列名)

### output ###
stat: 检验统计量
pval: 检验p值
d_f: 统计量分布的自由度
expected: 统计量的期望值
'''
n_table = []

vals1 = df1[col].unique().to_list()
vals2 = df2[col].unique().to_list()
col_vals = set(vals1 + vals2) ## 待检验指标的类别枚举值

for val in col_vals:
if val in vals1:
a = len(df1[df1[col] == val])
else:
a = 0
if val in vals2:
b = len(df2[df2[col] == val])
else:
b = 0
n_table.append([a, b])

stat, pval, d_f, expected = chi2_contingency(n_table)
return pval

最小样本量

  • 使用Python的statsmodels库计算:
1
2
3
4
5
6
7
8
9
from statsmodels.stats.power import GofChisquarePower
from statsmodels.stats.proportion import proportion_effectsize as es

GofChisquarePower().solve_power(
effect_size=es(prop1=prop1, prop2=prop2, method='normal'),
alpha=0.05, power=0.8, n_bins=2
)
## prop1、prop2是两组样本的比率
## alpha是显著性水平;power是统计功效,一般取0.8

参考资料

Thank you for your approval.

欢迎关注我的其它发布渠道