C4.4
计算卡方值和列联系数
教材页 第4.4节,第126页
任务

计算下表中性别和玩游戏之间的列联表,并计算卡方值和列联系数。
再计算玩游戏和成绩之间的卡方值和列联系数。

数据集

表4.19 学生成绩情况 (教材第120页)


样本编号

性别

年龄

玩游戏

英语

数学

计算机

总分

成绩

1

20

88

89

92

269

优秀

2

20

不玩

83

92

93

268

优秀

3

21

82

93

95

270

优秀

4

20

88

85

83

256

良好

5

21

87

86

85

258

良好

6

20

不玩

94

92

90

276

优秀

7

21

83

82

78

243

中等

8

20

不玩

95

85

85

265

良好

9

20

93

88

93

274

优秀

10

21

不玩

86

83

76

245

中等

Python

from scipy.stats import chi2_contingency

# 创建列联表
obs = [[4,1], [1,4]]

# 执行卡方检验
chi2, p, dof, ex = chi2_contingency(obs)

# 计算列联系数
C = (obs[0][0] * obs[1][1] - obs[0][1] * obs[1][0]) ** 2 / (obs[0][0] + obs[0][1]) / (obs[1][0] + obs[1][1]) / (obs[0][0] + obs[1][0]) / (obs[0][1] + obs[1][1])

print("卡方值为", chi2)
print("列联系数为", C)

from scipy.stats import chi2_contingency

# 创建列联表
obs = [[3,2,4], [1,2,2]]

# 执行卡方检验
chi2, p, dof, ex = chi2_contingency(obs)

# 计算列联系数
C = (obs[0][0] * obs[1][1] - obs[0][1] * obs[1][0]) ** 2 / (obs[0][0] + obs[0][1]) / (obs[1][0] + obs[1][1]) / (obs[0][0] + obs[1][0]) / (obs[0][1] + obs[1][1])

print("卡方值为", chi2)

print("列联系数为", C)
输出

卡方值为 1.6
列联系数为 0.36
卡方值为 0.5703703703703703
列联系数为 0.06666666666666667

书籍 姜维.《数据分析与数据挖掘》、《数据分析与数据挖掘建模与工具》,电子工业出版社, 2023,2024。
软件 Python,C++(附加orsci包)。