分类变量的相关性分析(独立性检验)
分类变量的相关性分析常用方法
常见方法有卡方检验
和Fisher's 精确检验
卡方检验
代码示例:
import pandas as pd
from scipy.stats import chi2_contingency
# 读取数据
data = pd.read_excel('表单1_编码后.xlsx')
# 选择要分析的分类变量
var1 = '类型'
var2 = '纹饰'
# 创建列联表
contingency_table = pd.crosstab(data[var1], data[var2])
# 进行独立性检验
chi2, p, dof, expected = chi2_contingency(contingency_table)
# 输出结果
print("卡方值:", chi2)
print("p 值:", p)
print("自由度:", dof)
print("期望频数:")
print(expected)
卡方检验的原假设是两个分类变量之间相互独立。如果 p 值小于显著性水平(通常为 0.05),则可以拒绝原假设,认为两个变量之间存在相关性。
卡方检验的结果主要包括卡方值(chi2)、p 值、自由度(dof)和期望频数(expected)。
- 卡方值:卡方值越大,说明观察值与期望值之间的差异越大,即变量之间的相关性可能越强。
- p 值:p 值是用于判断原假设是否成立的重要指标。通常,当 p 值小于显著性水平(如 0.05)时,我们拒绝原假设,认为变量之间存在相关性;当 p 值大于等于显著性水平时,我们不能拒绝原假设,即没有足够证据表明变量之间存在相关性。
- 自由度:自由度反映了列联表中独立信息的数量。
- 期望频数:期望频数是在假设变量之间相互独立的情况下,每个单元格中应该出现的频数。
Fisher’s 精确检验
Fisher’s 精确检验是一种在样本量较小时或存在极端频数时更适用的检验方法,它直接计算精确的概率,前提是列联表是(2,2)形式。
Fisher 精确检验的结果主要包括比值比(oddsratio)和 p 值。
-
比值比表示两个事件发生的相对概率
。如果比值比大于 1,说明第一个事件发生的概率相对于第二个事件更高;如果比值比小于 1,说明第二个事件发生的概率相对于第一个事件更高;如果比值比等于 1,说明两个事件发生的概率相等。 -
p 值用于判断两个分类变量之间是否存在关联。通常,
当 p 值小于显著性水平(如 0.05)时,我们拒绝原假设,认为两个变量之间存在关联
;当 p 值大于等于显著性水平时,我们不能拒绝原假设,即没有足够证据表明变量之间存在关联。
Fisher 精确检验在样本量较小时或存在极端频数时更为准确
,但在大样本情况下,卡方检验通常也能提供可靠的结果。
from scipy.stats import chi2_contingency,fisher_exact
# 创建列联表
type_pattern_crosstab = pd.crosstab(data['类型'], data['表面风化'])
# 进行独立性检验
# 卡方检验
chi2, p, dof, expected = chi2_contingency(type_pattern_crosstab)
# Fisher's 精确检验
oddsratio, p_value_fisher = fisher_exact(type_pattern_crosstab)
# 输出结果
print("卡方值:", chi2)
print("p 值:", p)
print("自由度:", dof)
print("期望频数:",expected)
print("\nFisher's 精确检验:")
print("比值比 =", oddsratio)
print("p 值 =", p_value_fisher)
独立性检验只是一种统计推断方法,其结果应结合实际问题和背景进行综合分析和解释。此外,样本量的大小、数据的质量等因素也可能会影响检验结果的可靠性。