卡方检验:离散变量的关联性分析

简介

转载于:卡方检验:离散变量的关联性分析

遇到了不是连续变量,而是两个离散变量的该如何判断其是否相关呢?

这里简单聊聊啥是离散变量,例如常见的性别,学历等等。这就要用到卡方检验了

卡方检验$\chi^2$

卡方检验是一种计数资料的假设检验方法。属于非参数检验的范畴,
主要是比较两个及两个以上样本率(构成比)以及两个二值型离散变量关联性分析

其根本思想就是在于比较理论频数实际频数吻合程度或拟合优度问题。

用通俗的话来分析一下它的定义:

  • $\chi^2$检验是非参数检验,就是我们根本不知道分类变量的分布。
  • 比较理论频数和实际频数的吻合程度

其实就是独立性检验的反向检验,如果不独立,那肯定有关联

这里用的是Pearson $\chi^2$检验

举个热身的例子:

我要检验一个骰子是否均匀

  • 假设每个面出现的概率为 $\frac{1}{6}$
  • 设计实验:投骰子 $n$ 次,记录每个面出现的次数 $c_1 \cdots c_6$ ,用 $\frac{c_i}{n}(i=1, \ldots, 6)$ 求出每个面频率 $p_1 \ldots p_6$
  • 用 $p_1 \ldots p_6$ 与 $\frac{1}{6}$ 比较,如果各个面的频率与 $\frac{1}{6}$ 相差不大,说明骰子是均匀的,如果每个面频 率与 $\frac{1}{6}$ 相差很大,说明骰子是不均匀的

原理:就是比较理论频数 $\frac{1}{6}$ 与实际频数 $p_1 \cdots p_6$ 的吻合程度

什么是卡方$\chi^2$

$\chi^2$ 衡量观察值理论值之间的偏离程度

还是拿”检验一个骰子是否均匀“作为例子。

设总体 $X$ 可以分成 $r$ 类,可以分成 6 类,记为 $A_1, A_2, \ldots, A_r$,这里就是骰子出现的点数 $1,2, \ldots, 6$

要检验的假设为: $H_0: P\left(A_i\right)=p_i, i=1,2, \ldots, r$

对应的 $H_0: P(X=i)=\frac{1}{6} i=1,2, \ldots, 6$ , $p_i$ 不一定为同一个数,可设出现 1 点概率为 $\frac{1}{2}$ ,出现 2 点概率为 $\frac{1}{3}$ 等等

现在对总体作了 $n$ 次观测,各类出现的频数分别为 $n_1, \ldots, n_r$ 且 $\Sigma_{i=1}^r n_i=n$,投骰子 100000 次。

用 R语言 来模拟一下(不严谨,请轻喷)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 生成1到6的随机数
# sample()就是有放回抽样
> X <- sample(1:6, size = 100000, replace = T)

> head(X)
[1] 6 3 1 5 1 6
> tail(X)
[1] 1 2 6 3 5 3

# 计算出各个值的频数
> count_table <- table(X)
> count_table
X
1 2 3 4 5 6
16619 16572 16704 16819 16695 16591

# 计算各个值的频率
> prop.table(count_table)
X
1 2 3 4 5 6
0.16619 0.16572 0.16704 0.16819 0.16695 0.16591

都在 0.166 上下浮动,也就是 $\approx \frac{1}{6}$。据此想法,可以直接用 $\chi^2$ 统计量来表示

看分子:$\left(n_i-n p_i\right)^2$ ,对应的就是实验出现的次数 $n_i$ 与根据理论概率值计算出来次数 $n p_i$ 的误差,因 为有正有负,所以加平方。

看分母:$n p_i$ 就是根据理论概率值计算出来次数,通俗来说就是看总误差占比大不大。

当样本容量 $n$ 充分大, $H_0$ 为真时,分子的每一项误差都不会太大,每个分类的误差的占比也不 会太大,最后误差的总占比也不会太大, $\chi^2$ 就会近似服从自由度为 $r-1$ (分类数少一个) 的 $\chi^2$ 分布

如果 $\chi^2$ 过大,人们就会认为原假设 $H_0$ 就会不真。 $\chi^2$ 就会落入拒绝域 $W=\left(\chi^2 \geq c\right)$

所以在给定显著水平 $\alpha$ ,由分布 $\chi^2(r-1)$ 可算出 $c=\chi_{1-\alpha}^2(r-1)$

结论: 如果 $\chi^2>c=\chi_{1-\alpha}^2(r-1)$ ,拒绝原假设 $H_0$

离散变量的关联性分析

具体跟着例子就明白了:

检验:性别和化妆是否有关联

原假设: $H_0$ : 性别与化妆没有关联 (性别 与 化妆 相互独立)

第一张表

这张表怎么来的?

举例子,一般我们都会读到下面的数据表

1
2
3
4
5
6
7
8
9
10
11
12
> df
Id sex make_up
1 1 male yes
2 2 male yes
3 3 male yes
4 4 male yes
5 5 male yes
6 6 female no
7 7 female no
8 8 female no
9 9 female no
10 10 female no

xtabs() 函数就能得到列联表,再用addmargins()函数就能得到带边际频数的列联表,用 addmargins(prop.table(...)) 函数就能得到带边际频率的列联表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
> mytable = xtabs(~ sex+make_up, data = df)
> mytable
make_up
sex no yes
female 5 0
male 0 5

# 带边际频数
> addmargins(mytable)
make_up
sex no yes Sum
female 5 0 5
male 0 5 5
Sum 5 5 10

# 带比例
> addmargins(prop.table(mytable))
make_up
sex no yes Sum
female 0.5 0.0 0.5
male 0.0 0.5 0.5
Sum 0.5 0.5 1.0

继续说回上面,

比例就是,化妆人数占性别总人数的比例

红色标红的比例,就是无论男女,化妆人数占总人数的比例为55%(理论值)

第二张表:根据理论值来算出来的对应的理论人数

把实际值和理论值作差取平方

上代码检验一下我们算得是否正确

1
2
3
4
5
6
7
8
> x <- c(15, 95, 85, 5)
> dim(x) <- c(2, 2)
> chisq.test(x, correct = FALSE)

Pearson's Chi-squared test

data: x
X-squared = 129.29, df = 1, p-value < 2.2e-16

X-squared=129.29 跟我们算得一样

【注意】如果 $\chi^2$ 的值接近于 0 ,说明两者独立,几平没有什么关联性

先看看卡方分布分布图

分别是自由度为 $3 、 6 、 9 、 18$ 的 $\chi^2$ 分布图

而这题是自由度 $d f$ 为 $1 , \alpha=0.05$ 即置信度为 $95 \%$ 对应的 $\chi^2=3.84$

因为

所以落入拒绝域,拒绝原假设 $H_0$

数值越大, $H_0$ 的拒绝程度越大,就是化妆与性别无关的概率越低(有点拗口)

数值越小, $H_0$ 的接受程度越大,就是化妆和性别真的可能无关,概率越高

现在 $\chi^2$ 的值比 3.84 大,

$p-$ value $<2.2 e-16$ 即 $p-$ value $<0.05$ ,拒绝原假设 $H_0$

结论:化妆和性别是存在关联的

一分一毛,也是心意。