avatar


6.卡方检验(分类数据分析)

什么是分类数据

分类数据是对事物进行分类的结果,其特征是,调查结果虽然用数值表示,但不同数值描述了调查对象的不同特征。

上述的描述,我是认可的。
但是,在有些资料中,举了如下一个例子,对于这个例子,我不认可。

例如,研究青少年家庭状况与行为之间的关系,青少年家庭状况是一个分类数据,可以分为"完整家庭"和"离异家庭",如果调查结果为"1",表示被调查者来自完整家庭,调查结果为"2",则表示被调查者来自离异家庭。青少年行为也可以分为两类,“犯罪"和"未犯罪”,分别用"1"和"2"表示。对这类问题是在汇总数据的基础上进行分析的,数据汇总的结果表现为频数。

上述的例子,用"1"表示"完整家庭",用"2"表示"离异家庭",用"1"表示"犯罪",用"2"表示"未犯罪";存在一个问题,这样"完整家庭"和"离异家庭",“犯罪"和"未犯罪"存在了数字上的大小关系。
(这个例子,也有违背"调查结果虽然用数值表示,但不同数值描述了调查对象的不同特征。”)

应该用One-Hot编码,关于One-Hot编码,可以参考:

卡方统计量

χ2\chi^2统计量可以用于测定两个分类变量之间的相关程度。

若用f0f_0表示观察值频数(observed frequency),用fef_e表示期望值频数(expected frequency),则χ2\chi^2统计量可以写为:

χ2=(f0fe)2fe\chi^2 = \sum \frac{(f_0 - f_e)^2}{f_e}

χ2\chi^2统计量具有以下特征:

  1. χ20\chi^2 \geq 0,因为χ2\chi^2是对平方结果的汇总。
  2. χ2\chi^2统计量的分布与自由度有关。
  3. χ2\chi^2统计量描述了观察值与期望值的接近程度。两者越接近,f0fe|f_0 - f_e|越小,计算出的χ2\chi^2值就越小;反之,计算出的χ2\chi^2值也越大。
  4. χ2\chi^2检验正是通过对χ2\chi^2的计算结果与χ2\chi^2分布中临界值进行比较,作出是否拒绝原假设的统计决策。

拟合优度检验

方法

拟合优度检验:是用χ2\chi^2统计量进行统计显著性检验的重要内容之一。是依据总体分布状况,计算出分类变量中各类别的期望频数,与分布的观察频数进行对比,判断期望频数与观察频数是否有显著性差异,从而达到对分类变量进行分析的目的。

案例

1912年4月15日,豪华巨轮泰坦尼克号与冰山相撞沉没。当时船上共有22082208人,其中男性17381738人,女性470470人。海难发生后,幸存者共718718人,其中男性374374人,女性344344人,以α=0.1\alpha=0.1的显著性水平检验存活状况与性别是否有关。

根据题意,船上共有22082208人,幸存者共718718人,海难后存活比率为7182208=0.325\frac{718}{2208}=0.325。如果是否活下来与性别没有关系,那么按照这个比率,在17381738位男性中应该存活1738×0.325=5651738 \times 0.325 = 565人,在470470位女性中应该存活470×0.325=153470 \times 0.325=153人。565565153153就是期望频数,而实际存活结果就是观察频数。
通过期望频数和观察频数的比较,能够从统计角度作出存活与性别是否有关的判断。

原假设和备择假设为:

H0:观察频数与期望频数一致H1:观察频数与期望频数不一致\begin{aligned} H_0 & : \text{观察频数与期望频数一致} \\ H_1 & : \text{观察频数与期望频数不一致} \end{aligned}

对于男性,有:

f0=374fe=565f0fe=191(f0fe)2=36481(f0fe)2fe=64.6\begin{aligned} f_0 & = 374 \\ f_e & = 565 \\ f_0 - f_e & = -191 \\ (f_0 - f_e)^2 & = 36481 \\ \frac{(f_0 - f_e)^2}{f_e} & = 64.6 \end{aligned}

对于女性,有:

f0=344fe=153f0fe=191(f0fe)2=36481(f0fe)2fe=238.4\begin{aligned} f_0 & = 344 \\ f_e & = 153 \\ f_0 - f_e & = 191 \\ (f_0 - f_e)^2 & = 36481 \\ \frac{(f_0 - f_e)^2}{f_e} & = 238.4 \end{aligned}

χ2\chi^2统计量为:

χ2=(f0fe)2fe=303\chi^2 = \sum \frac{(f_0 - f_e)^2}{f_e} = 303

自由度的计算公式为df=R1df = R - 1RR为分类变量类型的个数。由于本例中有男女两个性别,故
R=1R=1,自由度为11

χ0.12(1)=2.706\chi_{0.1}^2(1) = 2.706

因为χ2\chi^2大于χ0.12\chi_{0.1}^2,故拒绝H0H_0,接受H1H_1,说明存活状况与性别显著相关。

与"两个总体比例之差的检验"的区别

最主要的区别是应用场景的不同

  • 在"两个总体比例之差的检验"中,我们检验的是:
    • 检验两个总体比例之差为零的假设
    • 检验两个总体比例之差某个不为零的常数的假设
  • 在"拟合优度检验"中,我们检验的是:
    • “期望频数与观察频数是否有显著性差异”

此外:

  • 在统计量方面
    • "两个总体比例之差的检验"用的是zz统计量
    • "拟合优度检验"用的是χ2\chi^2统计量
  • 适用条件
    • “两个总体比例之差的检验”,需要满足两个总体相互独立,且每个总体内部的数据可以近似为二项分布,且样本量足够大以保证正态分布的近似有效。
    • “两个总体比例之差的检验”,数据通常被分组到预定义的类别或区间内。

总结来说,"拟合优度检验"关注的是数据是否符合某一特定的理论分布,而"两个总体比例之差的检验"则聚焦于比较两个独立群体中某个变量比例的差异。

列联分析:独立性检验

拟合优度检验是对一个分类变量的检验,列联分析是对两个分类变量的分析。

什么是列联表

列联表:由两个以上的变量进行交叉分类的频数分布表。

例如,一所大学准备采取一项学生对餐厅改革意见的调查,为了了解男女学生对这一措施的看法,分别抽取了300300名男学生和240240名女学生进行调查。得到的结果如下:

男同学 女同学 合计
赞成 90 84 174
中立 100 56 156
反对 110 100 210
合计 300 240 540

除去"合计",一共三行两列,即这是一个3×23 \times 2的列联表。

独立性检验

方法

独立性检验:分析列联表中行变量和列变量是否相互独立。

一般地,可以采用下式计算任何一个单元中频数的期望值:

fe=RTn×CTn×n=RT×CTn\begin{aligned} f_e & = \frac{RT}{n} \times \frac{CT}{n} \times n \\ & = \frac{RT \times CT}{n} \end{aligned}

  • fef_e为给定单元中的频数的期望值
  • RTRT为给定单元所在行的合计
  • CTCT为给定单元所在列的合计
  • nn为观察值的总个数,即样本量

对自由度的解释:
χ2\chi^2检验的自由度 = (行数1)(列数1)=(R1)(C1)(\text{行数}-1) (\text{列数}-1) = (R-1) (C-1)

案例

一种原料来自三个不同的地区,原料质量被分为三个不同等级。从这批原料中随机抽取500500件进行检验,结果如下:

一级 二级 三级 合计
甲地区 52 64 24 140
乙地区 60 59 52 171
丙地区 50 65 74 189
合计 162 188 150 500

要求检验各个地区和原料质量之间是否存在依赖关系(α=0.05\alpha = 0.05)?

原假设和备择假设为:

H0:地区和原料等级是独立的(不存在依赖关系)H1:地区和原料等级之间不独立(存在依赖关系)\begin{aligned} H_0 & : \text{地区和原料等级是独立的(不存在依赖关系)} \\ H_1 & : \text{地区和原料等级之间不独立(存在依赖关系)} \end{aligned}

在第一行,甲地区的合计为140140,用140500\frac{140}{500}作为甲地区原料比例的估计量;在第一列,一级原料的合计为162162,用162500\frac{162}{500}作为一级原料比例的估计值。

如果地区和原料等级之间是独立的,则可以用下面的公式估计第一个单元(第一行第一列,即甲地区一级)中的期望比例。

令:

A=样本单位来自甲地区的事件B=样本单位属于一级原材料的事件\begin{aligned} A & = \text{样本单位来自甲地区的事件} \\ B & = \text{样本单位属于一级原材料的事件} \end{aligned}

根据独立性的概率乘法公式,有

P(第一个单元)=P(AB)=P(A)P(B)=(140500)(162500)=0.09072\begin{aligned} P(\text{第一个单元}) & = P(AB) \\ & = P(A)P(B) \\ & = (\frac{140}{500})(\frac{162}{500}) \\ & = 0.09072 \end{aligned}

0.090720.09072是第一个单元的期望比例,其对应的频数期望为:

500×0.09072=45.36500 \times 0.09072 = 45.36

而根据抽样,我们知道甲地区一级的观察频数f0=52f_0=52

所以有如下的结果:

f0fe=6.64(f0fe)2=44.09(f0fe)2fe=0.97\begin{aligned} f_0 - f_e & = 6.64 \\ (f_0 - f_e)^2 & = 44.09 \\ \frac{(f_0 - f_e)^2}{f_e} & = 0.97 \end{aligned}

对于其他单元,计算方法相同,结果如下:

f0f_0 fef_e f0fef_0 - f_e (f0fe)2(f_0 - f_e)^2 (f0fe)2fe\frac{(f_0 - f_e)^2}{f_e}
1 1 52 45.36 6.64 44.09 0.97
1 2 64 52.64 11.36 129.05 2.45
1 3 24 42.00 -18 324 7.71
2 1 60 55.40 4.60 21.16 0.38
2 2 59 64.30 -5.3 28.09 0.44
2 3 52 51.30 0.7 0.49 0.01
3 1 50 61.24 -11.24 126.34 2.06
3 2 65 71.06 -6.06 36.72 0.52
3 3 74 56.70 17.30 299.29 5.28

计算χ2\chi^2统计量:

χ2=(f0fe)2fe=19.82\chi^2 = \sum \frac{(f_0 - f_e)^2}{f_e} = 19.82

χ2\chi^2的自由度=(R1)(C1)=4(R-1)(C-1)=4

α=0.05\alpha=0.05,可知χ0.052(4)=9.488\chi_{0.05}^2(4)=9.488

因为χ2>χ0.052(4)\chi^2 > \chi_{0.05}^2(4),所以故拒绝H0H_0,接受H1H_1,即地区和原料等级之间存在依赖关系,原料的质量受地区的影响。

注意事项

条件百分表的方向

不一定列联分析中的列,就一定在表格的列的位置,也可能因为各种原因,在表格的行的位置。
需要我们具体情况具体分析。

卡方分布的期望值准则

对于χ2\chi^2分布进行独立性检验,需要样本量必须足够大,特别是每个单元的期望频数不能过小,
否则χ2\chi^2检验否则会得出错误的结论。
因此,关于小单元的频数通常有两条准则:

  1. 如果只有两个单元,每个单元的期望频数必须是5555以上。
  2. 倘若有两个以上的单元,如果20%20\%的单元期望频数fef_e小于55,则不能使用χ2\chi^2检验。

列联表中的相关测量

phi相关系数

φ\varphi相关系数:描述2×22 \times 2列联表数据相关程度最常用的一种相关系数,计算公式为:

φ=χ2n\varphi = \sqrt{\frac{\chi^2}{n}}

式中,χ2\chi^2代表统计量;nn为列联表中的总频数,也即样本量。

对于2×22 \times 2列联表,系数的取值范围在[0,1][0,1]之间。
φ\varphi越接近11,表示两个变量之间的关系越强;φ\varphi越接近00,表示关系越弱。
但是,当列联表的行数或列数大于2时,φ\varphi系数会随着行数或列数的增加而变大且没有上限。这时φ\varphi系数的含义不易解释。

c相关系数

cc相关系数,又称列联相关系数、列联系数,主要用于大于2×22 \times 2列联表的情况。
cc系数的计算公式为:

c=χ2χ2+nc = \frac{\chi^2}{\chi^2 + n}

当列联表中的两个变量相互独立时,系数c=1c=1,但它不可能大于11
cc系数的特点是:其可能的最大值依赖于列联表的行数和列数,且随着RRCC的增大而增大。
因此,根据不同的行和列计算的列联系数不便于比较,且对总体的分布没有任何要求。

V相关系数

鉴于φ\varphi系数无上限,cc系数小于11的情况,克莱默提出了VV相关系数。
VV相关系数的计算公式为:

V=χ2n×min[(R1),(C1)]V = \sqrt{\frac{\chi^2}{n \times \min[(R-1),(C-1)]}}

它的计算以χ2\chi^2值为基础。
当两个变量相互独立时,V=0V=0;当两个变量完全相关时,V=1V=1
所以,V的取值在[0,1][0,1]
如果列联表中有一维为2,即min[(R1),(C1)]=1\min[(R-1),(C-1)]=1,则VV值就等于φ\varphi值。

案例

在上例中,通过检验可以发现原材料等级和地区之间存在相关关系。那么相关程度具体多高?
分别计算φ\varphi系数,cc系数和VV系数。

由前已知,计算的χ2=19.82\chi^2=19.82,列联表的总频数n=500n=500。这是一个3×33 \times 3的列联表,min[(R1),(C1)]=2\min[(R-1),(C-1)]=2,于是:

φ=χ2n=19.82500=0.199c=χ2χ2+n=19.8219.82+500=0.195V=χ2n×min[(R1),(C1)]=19.82500×2=0.141\begin{aligned} \varphi & = \sqrt{\frac{\chi^2}{n}} \\ & = \sqrt{\frac{19.82}{500}} \\ & = 0.199\\ c & = \sqrt{\frac{\chi^2}{\chi^2 + n}} \\ & = \sqrt{\frac{19.82}{19.82 + 500}} \\ & = 0.195 \\ V & = \sqrt{\frac{\chi^2}{n \times \min[(R-1),(C-1)]}} \\ & = \sqrt{\frac{19.82}{500 \times 2}} \\ & = 0.141 \end{aligned}

对于φ\varphi而言,当R>2R>2C>2C>2时,φ\varphi值有可能突破11,相比之下,φ=0.199\varphi= 0.199不能认为很大。
对于cc而言,其结果必然低于φ\varphi值,因为cc值总是小于11。本例中cc的取值依然很小。
对于VV而言,V=0.141V=0.141则更小。

综合起来可以认为,虽然检验结果表明原料的等级和地区存在一定的关系,但这种关系密切程度却不太高。这意味着,除了地区之外,还有其他因素对原料的质量起着更重要的影响。

Python计算

一个类别变量的拟合优度检验

期望频数相等

为研究消费者对不同类型的饮料是否有明显偏好,一家调查公司随机调查了20002000个消费者对44种类型饮料的偏好情况,得到不同类型饮料的偏好数据如表所示。

检验消费者对不同类型饮料的偏好是否有显著差异(α=0.05\alpha = 0.05)。

饮料类型 人数
碳酸饮料 525
矿泉水 550
果汁 470
其他 455
合计 2000

原假设和备择假设:

H0:f0=fe(观察频数与期望频数无显著差异)H1:f0fe(观察频数与期望频数有显著差异)\begin{aligned} H_0 & : f_0 = f_e \quad (\text{观察频数与期望频数无显著差异}) \\ H_1 & : f_0 \neq f_e \quad (\text{观察频数与期望频数有显著差异}) \\ \end{aligned}

示例代码:

1
2
3
4
5
6
7
8
import pandas as pd
from scipy.stats import chisquare

df = pd.read_csv('XXX.csv')

chi2, p_value = chisquare(f_obs=df['人数'])

print(chi2, p_value)

运行结果:

1
12.100000000000001 0.00704833637156134

在该项检验中,χ2=12.10\chi^2 = 12.10p=0.007048p=0.007048,由于p<0.05p<0.05,拒绝H0H_0,表明消费者对不同类型饮料的偏好有显著差异。

期望频数不等

如果各类别的期望频数不相等,做拟合优度检验时,需要先计算出各类别的期望频数,然后按公式计算χ2\chi^2统计量。

χ2=(f0fe)2fe\chi^2 = \sum \frac{(f_0 - f_e)^2}{f_e}

一项社会学研究认为,离婚率的高低与受教育程度有关,而且由于社会经济发展程度及生活方式等因素的影响,不同地区也有一定差异。在对全国离婚家庭样本的研究中发现,离婚家庭中受教育程度为小学及以下的家庭所占的比例为20%20\%,初中家庭为35%35\%,高中家庭为25%25\%,大学家庭为12%12\%,研究生家庭为8%8\%。在对南部地区260260个离婚家庭的调查中,不同受教育程度的离婚家庭分布如表所示。

检验南部地区不同受教育程度的离婚家庭数与期望频数是否一致(α=0.05\alpha =0.05)。

受教育程度 离婚家庭数
小学及以下 30
初中 110
高中 80
大学 25
研究生 15
合计 260

原假设和备择假设:

H0:f0=fe(不同受教育程度的离婚家庭数与期望频数无显著差异)H1:f0fe(不同受教育程度的离婚家庭数与期望频数有显著差异)\begin{aligned} H_0 & : f_0 = f_e \quad (\text{不同受教育程度的离婚家庭数与期望频数无显著差异}) \\ H_1 & : f_0 \neq f_e \quad (\text{不同受教育程度的离婚家庭数与期望频数有显著差异}) \end{aligned}

示例代码:

1
2
3
4
5
6
7
8
9
import pandas as pd
from scipy.stats import chisquare

df = pd.read_csv('XXX.csv')
x = df['离婚家庭数']

chi2, p_value = chisquare(f_obs=x, f_exp=x.sum() * df['期望比例'])

print(chi2,p_value)

运行结果:

1
19.58562271062271 0.0006027964032005588

在该项检验中,χ2=19.5856\chi^2=19.5856p=0.0006028p=0.0006028,由于p<0.05p<0.05,拒绝H0H_0,表明南部地区不同受教育程度的离婚家庭数与期望频数有显著差异。

两个类别变量的独立性检验

一家购物网站对在本网站购物的客户做了一项调查。调查的客户来自东部、中部、西部三个地区,共500人。调查结果如下表。
检验客户满意度与地区是否独立(α=0.05\alpha = 0.05)。

满意度 东部 中部 西部 合计
满意 126 158 35 319
不满意 34 82 65 181
合计 160 240 100 500

原假设和备择假设:

H0:满意度与地区独立H1:满意度与地区不独立\begin{aligned} H_0 & : \text{满意度与地区独立} \\ H_1 & : \text{满意度与地区不独立} \end{aligned}

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
from scipy.stats import chi2_contingency

# 频数
x = [[126, 158, 35], [34, 82, 65]]
# 列联表
d = pd.DataFrame(x, index=['满意', '不满意'], columns=['东部', '中部', '西部'])

chi2, p_value, df, f_exp = chi2_contingency(d)

print(chi2)
print(p_value)
print(df)
print(f_exp)

运行结果:

1
2
3
4
5
51.82661055208206
5.571787064349422e-12
2
[[102.08 153.12 63.8 ]
[ 57.92 86.88 36.2 ]]

在该项检验中,χ2=51.8266\chi^2 = 51.8266p=5.572e12p=5.572e-12,由于p<0.05p<0.05,拒绝H0H_0,认为满意度与地区不独立,即满意度与地区有关。

两个类别变量的相关性度量

在上例子,已只χ2=51.8266\chi^2 = 51.8266n=500n=500r=2r=2c=3c=3

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
import math

n = 500
chi2 = 51.827

phi = math.sqrt(chi2 / n)
c = math.sqrt(chi2 / (chi2 + n))
v = math.sqrt(chi2 / n * (min(2, 3) - 1))

print(phi)
print(c)
print(v)

运行结果:

1
2
3
0.32195341277892986
0.3064619511292651
0.32195341277892986
文章作者: Kaka Wan Yifan
文章链接: https://kakawanyifan.com/30106
版权声明: 本博客所有文章版权为文章作者所有,未经书面许可,任何机构和个人不得以任何形式转载、摘编或复制。

留言板