机器学习 - 比较检验

时间:2024-07-09 22:46:57

列联表

列联表(Contingency Table)是一种用于显示两个或多个分类变量之间关系的表格。它广泛应用于统计学中的分类数据分析,尤其在独立性检验和关联性分析时。列联表的每个单元格展示了相应分类变量组合的频数(或比例)。

列联表的结构

列联表通常呈现为矩阵形式,行和列表示不同的分类变量。例如,一个简单的2x2列联表如下:

变量B的类别1 变量B的类别2
变量A的类别1 a b
变量A的类别2 c d

其中:

  • a, b, c, d分别表示变量A的不同类别与变量B的不同类别组合的频数。

列联表的应用

  1. 卡方检验(Chi-Square Test):用于检验两个分类变量之间是否存在统计显著性的关联。
  2. Fisher精确检验(Fisher’s Exact Test):当样本量较小时,Fisher精确检验比卡方检验更合适。
  3. McNemar检验:用于配对样本的二分类数据,常用于前后对比实验中的数据分析。
  4. 独立性检验:通过分析列联表,确定两个变量是否相互独立。

示例

假设我们有一个关于是否喜欢某种产品的调查,调查结果包括性别和是否喜欢产品两个变量。可以用一个2x2列联表来表示:

性别 \ 喜欢产品
男性 30 20
女性 25 25

这个列联表展示了男性和女性分别喜欢和不喜欢产品的频数。

总结

列联表是一种显示两个或多个分类变量之间关系的表格。通过分析列联表中的频数分布,可以了解变量之间的关联性,并进行统计检验。

交叉验证t检验

交叉验证是一种评估机器学习模型性能的方法。它通过将数据集分成若干个子集,反复训练和验证模型来评估其性能稳定性和预测能力。常用的交叉验证方法包括k折交叉验证和留一法。

t检验是一种统计方法,用于比较两组数据的均值是否存在显著差异。常见的t检验类型包括:

  • 独立样本t检验:用于比较两个独立样本的均值。
  • 配对样本t检验:用于比较同一组样本在不同条件下的均值。

交叉验证t检验结合交叉验证与t检验,通过交叉验证评估模型性能,并使用t检验判断性能差异是否显著。交叉验证t检验并不是基于列联表的,它侧重于连续数据的均值比较。

McNemar检验

McNemar检验是一种非参数统计检验,用于比较配对样本的二分类数据,常用于分析前后变化的数据。例如,评估某种治疗方法前后患者症状的改善情况。McNemar检验使用2x2列联表,其中包含两个分类变量的频数分布:

事件B发生 事件B不发生
事件A发生 a b
事件A不发生 c d

McNemar检验通过比较b和c的差异来判断两个分类变量是否具有显著变化。它确实是基于列联表的。

实例与公式

卡方检验

公式
[ \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} ]

其中,( O_i ) 是观察频数,( E_i ) 是期望频数。

示例

假设我们有一个列联表如下:

喜欢 不喜欢
男性 30 20
女性 25 25

我们可以使用卡方检验来判断性别和是否喜欢产品之间是否存在关联。

import scipy.stats as stats

# 构建列联表
data = [[30, 20], [25, 25]]

# 进行卡方检验
chi2, p, dof, expected = stats.chi2_contingency(data)

print(f"Chi2: {chi2}, p-value: {p}")
McNemar检验

公式
[ \chi^2 = \frac{(b - c)^2}{b + c} ]

示例

假设我们有如下2x2列联表用于McNemar检验:

后者阳性 后者阴性
前者阳性 10 5
前者阴性 15 20

我们可以使用McNemar检验来分析前后情况的变化。

import statsmodels.api as sm

# 构建列联表
data = [[10, 5], [15, 20]]

# 进行McNemar检验
result = sm.stats.mcnemar(data)

print(f"Chi2: {result.statistic}, p-value: {result.pvalue}")

以上代码展示了如何使用Python进行卡方检验和McNemar检验的具体操作。通过这些实例和公式,可以更好地理解这些检验方法的应用和实现。