卡方检验的原理与R语言实现
1. 卡方检验的假设
卡方检验与其他常见检验不同,它不依赖于连续正态分布数据等假设,因为分类数据并非连续的,所以不能呈正态分布。不过,卡方检验仍有两个重要假设:
-
数据独立性
:每个个体、项目或实体只能对列联表中的一个单元格有贡献。例如,不能对重复测量设计的数据使用卡方检验。假如先训练一些猫用食物奖励看它们是否会跳舞,再用同样的猫用情感奖励看它们是否会跳舞,就不能用皮尔逊卡方检验来分析这些数据。
-
期望频率大于5
:虽然在较大的列联表中,允许最多20%的期望频率低于5,但这会导致统计功效降低,可能无法检测到真实效应。而且,即使在较大的列联表中,期望频率也不应低于1。若遇到期望频率低于5的情况,可考虑使用费舍尔精确检验。
此外,当样本量足够大时,即使单元格频率的差异相对较小,也可能导致变量之间存在统计上显著的关联。因此,需要查看行和列的百分比来解释效应。
2. 使用R进行卡方检验
2.1 数据输入
2.1.1 输入原始分数
若输入原始分数,数据编辑器的每一行代表一个实体。以猫的训练为例,创建两个编码:“Training”和“Dance”。“Training”包含两个值,分别表示食物奖励和情感奖励;“Dance”包含“Yes”或“No”,表示猫是否跳舞。共有200只猫,所以有200行数据。可通过以下代码加载数据文件:
catData<-read.delim("cats.dat", header = TRUE)
部分数据示例如下:
| Training | Dance |
|-------------------|-------|
| Food as Reward | Yes |
| Food as Reward | Yes |
| Food as Reward | Yes |
| … | … |
| Food as Reward | No |
| … | … |
| Affection as Reward | Yes |
| … | … |
| Affection as Reward | No |
2.1.2 输入列联表
另一种数据输入方法是直接输入列联表。例如,已知有38只猫接受食物奖励,其中28只跳舞;162只猫接受情感奖励,其中48只跳舞。可通过以下代码输入数据:
food <- c(10, 28)
affection <- c(114, 48)
catsTable <- cbind(food, affection)
结果数据如下:
| | food | affection |
|------|------|-----------|
| [1,] | 10 | 114 |
| [2,] | 28 | 48 |
列代表训练方式(食物或情感),行表示猫是否跳舞。这种方法比输入原始数据更简单。
2.2 使用R Commander运行分析
- 导入数据:使用“Data⇒Import data⇒from text file, clipboard, or URL…”选择文件“cats.dat”。
- 进行卡方检验:选择“Statistics⇒Proportions⇒Two - sample proportions test…”打开对话框。选择“Groups”列表中定义组间差异的变量(这里是“Training”),以及“Response Variable”列表中的结果变量(这里是“Dance”)。
- 选择检验类型:默认选择双侧检验,也可根据预测选择单侧检验。可选择“Normal approximation”进行皮尔逊卡方检验,或选择“Normal approximation with continuity correction”进行耶茨校正卡方检验。
分析结果显示,当使用情感奖励时,29.6%的猫跳舞;当使用食物奖励时,73.7%的猫跳舞。卡方值为25.36,自由度为1,p值小于0.05,具有高度显著性。
2.3 使用R运行分析
可使用
gmodels
包中的
CrossTable()
函数进行卡方分析。根据输入数据是原始数据还是列联表,函数有两种基本形式:
- 对于原始数据:
CrossTable(predictor, outcome, fisher = TRUE, chisq = TRUE, expected = TRUE,
sresid = TRUE, format = "SAS"/"SPSS")
- 对于列联表:
CrossTable(contingencyTable, fisher = TRUE, chisq = TRUE, expected = TRUE,
sresid = TRUE, format = "SAS"/"SPSS")
以猫的数据为例,可执行以下代码:
# 原始分数
CrossTable(catsData$Training, catsData$Dance, fisher = TRUE, chisq = TRUE,
expected = TRUE, sresid = TRUE, format = "SPSS")
# 列联表数据
CrossTable(catsTable, fisher = TRUE, chisq = TRUE, expected = TRUE, sresid =
TRUE, format = "SPSS")
CrossTable()
函数还有其他有用选项,如下表所示:
| 选项 | 描述 |
|------|------|
| digits = x | 指定输出中单元格比例的小数点后位数 |
| mcnemar = TRUE | 进行麦克尼马尔检验,用于检验两个相关组的名义数据差异 |
| prop.c = FALSE | 不显示列比例 |
| prop.t = FALSE | 不显示总比例 |
| prop.chisq = FALSE | 不显示卡方比例 |
| resid = TRUE | 在列联表中生成皮尔逊残差 |
| sresid = TRUE | 在列联表中生成标准化残差 |
| asresid = TRUE | 在列联表中生成调整后的标准化残差 |
| Format = “SAS”/“SPSS” | 设置输出格式模仿SAS(默认)或SPSS,若要查看残差,需设置为SPSS |
2.4
CrossTable()
函数的输出
输出首先显示列联表,包含每个训练方式下猫的数量、期望频率、卡方贡献、行比例、列比例、总比例和标准化残差。例如:
| | catsData$Dance | | |
| ---- | ---- | ---- | ---- |
| catsData$Training | Yes | No | Row Total |
| Food as Reward | 28 | 10 | 38 |
| | 14.440 | 23.560 | |
| | 12.734 | 7.804 | |
| | 73.684% | 26.316% | 19.000% |
| | 36.842% | 8.065% | |
| | 14.000% | 5.000% | |
| | 3.568 | -2.794 | |
| Affection as Reward | 48 | 114 | 162 |
| | 61.560 | 100.440 | |
| | 2.987 | 1.831 | |
| | 29.630% | 70.370% | 81.000% |
| | 63.158% | 91.935% | |
| | 24.000% | 57.000% | |
| | -1.728 | 1.353 | |
| Column Total | 76 | 124 | 200 |
| | 38.000% | 62.000% | |
从列联表可以看出,使用食物奖励时,大部分猫会跳舞;使用情感奖励时,大部分猫拒绝跳舞。在查看检验统计量之前,需检查卡方检验的假设是否满足,即2×2列联表中所有期望频率应大于5。此例中最小期望计数为14.44,满足假设。
输出还包含皮尔逊卡方检验、耶茨校正卡方检验和费舍尔精确检验的结果。皮尔逊卡方统计量为25.356,自由度为1,p值小于0.001,表明训练方式对猫是否跳舞有显著影响。费舍尔精确检验也显示应拒绝原假设。
2.5 用标准化残差分解显著卡方检验
在较大的列联表中,可使用标准化残差对显著的卡方检验结果进行更细致的分析。标准化残差是观测频率与期望频率之间的误差,通过除以期望频率的平方根进行标准化。
标准化残差具有两个重要特点:
1. 卡方统计量可看作标准化残差的总和,查看单个标准化残差有助于分解卡方统计量所衡量的总体关联。
2. 标准化残差类似于z分数,若值超出±1.96,则在p < 0.05水平上显著;超出±2.58,则在p < 0.01水平上显著;超出±3.29,则在p < 0.001水平上显著。
在猫的例子中,当使用食物奖励时,跳舞和不跳舞的标准化残差都显著,表明使用食物奖励时,跳舞的猫比预期多,不跳舞的猫比预期少;当使用情感奖励时,标准化残差不显著,表明跳舞和不跳舞的猫数量与预期相符。因此,奖励类型与跳舞之间的关联主要由食物奖励驱动。
2.6 计算效应量
对于分类数据,最常用且有用的效应量度量是优势比。在2×2列联表中,优势比易于解释。
以猫的例子计算优势比:
- 食物奖励时跳舞的优势:
odds_dancing_after_food = 28 / 10 = 2.8
- 情感奖励时跳舞的优势:
odds_dancing_after_affection = 48 / 114 = 0.421
- 优势比:
odds_ratio = 2.8 / 0.421 = 6.65
这表明用食物训练的猫跳舞的优势是用情感训练的猫的6.65倍。
若在
CrossTable()
函数中设置
fisher = TRUE
,输出将包含更复杂的优势比估计和置信区间。此例中,优势比为6.58,置信区间为2.84至16.43。重要的是,置信区间不跨越1,说明食物训练使猫跳舞的优势更大。
2.7 报告卡方检验结果
报告皮尔逊卡方检验结果时,需说明检验统计量的值、自由度和显著性值。例如:
有显著关联表明训练方式与猫是否跳舞有关,χ²(1) = 25.36,p < 0.001。基于优势比,用食物训练的猫跳舞的优势是用情感训练的猫的6.58(2.84, 16.43)倍。
2.8 卡方检验小贴士
- 若要检验两个分类变量之间的关系,可使用卡方检验。
- 查看卡方检验的p值,若小于0.05,则两个变量之间存在显著关系。
- 确保期望频率不小于5。
- 查看交叉表,找出变量之间的关系。更好的方法是关注显著的标准化残差(值超出±1.96),并计算优势比。
- 报告χ²统计量、自由度、显著性值和列联表。
2.9 实际研究案例
有一项关于美国黑人心理状态的研究,向3443名不同职业的美国黑人提出三个问题:他们是否认为美国黑人幸福、他们个人作为美国黑人是否幸福以及美国黑人是否应该幸福,每个问题只能回答“是”或“否”。可使用该研究的频率数据文件“Beckham1929.dat”进行三次卡方检验(每个问题一次),以得出相关结论。
通过以上内容,我们详细了解了卡方检验的原理、数据输入方法、分析过程、结果解读以及效应量计算等方面的知识,并通过实际案例加深了理解。希望这些内容能帮助你在实际研究中正确应用卡方检验。
3. 卡方检验的应用场景与注意事项
3.1 应用场景
卡方检验在多个领域都有广泛的应用,以下是一些常见的场景:
-
医学研究
:研究某种疾病与特定因素(如生活习惯、遗传因素等)之间的关联。例如,研究吸烟与肺癌之间的关系,可将人群分为吸烟和不吸烟两组,观察患肺癌和未患肺癌的人数,通过卡方检验判断吸烟与肺癌是否存在显著关联。
-
市场调研
:分析消费者的购买行为与产品特征、广告宣传等因素之间的关系。比如,研究不同年龄段的消费者对某种产品的喜好程度,可将消费者按年龄分组,统计每组中喜欢和不喜欢该产品的人数,用卡方检验确定年龄与产品喜好之间是否有关联。
-
教育领域
:评估教学方法、课程设置等对学生成绩的影响。例如,比较两种不同的教学方法下学生的及格和不及格情况,通过卡方检验判断教学方法与学生成绩是否存在显著关系。
3.2 注意事项
在使用卡方检验时,需要注意以下几点:
-
数据独立性
:必须确保每个个体、项目或实体只能对列联表中的一个单元格有贡献。如果数据不独立,如重复测量设计的数据,使用卡方检验可能会得出错误的结果。
-
期望频率
:要保证期望频率大于5,虽然在较大的列联表中允许最多20%的期望频率低于5,但这会降低统计功效。若期望频率低于1,卡方检验的结果可能不可靠,此时应考虑使用费舍尔精确检验。
-
样本量
:当样本量足够大时,即使单元格频率的差异相对较小,也可能导致变量之间存在统计上显著的关联。因此,不能仅仅依据卡方检验的显著性来判断关联的实际意义,还需要结合效应量(如优势比)进行综合分析。
3.3 卡方检验的局限性
卡方检验虽然是一种常用的统计方法,但也存在一定的局限性:
-
只能检测关联
:卡方检验只能判断两个分类变量之间是否存在关联,但不能确定这种关联的因果关系。例如,在研究吸烟与肺癌的关系时,卡方检验只能表明两者之间存在关联,但不能说明吸烟就是导致肺癌的原因。
-
对样本量敏感
:样本量的大小会影响卡方检验的结果。当样本量较小时,卡方检验的统计功效较低,可能无法检测到真实的关联;当样本量过大时,即使微小的差异也可能被检测为显著关联,但这种关联可能在实际中并无重要意义。
-
不适用于连续数据
:卡方检验适用于分类数据,对于连续数据需要先进行分组转化为分类数据后才能使用卡方检验,这可能会丢失一些信息。
4. 卡方检验与其他统计方法的比较
4.1 与t检验的比较
- 数据类型 :t检验主要用于比较两组连续数据的均值差异,要求数据服从正态分布;而卡方检验用于分析两个分类变量之间的关联,数据为分类数据。
- 研究目的 :t检验的目的是判断两组数据的均值是否存在显著差异;卡方检验的目的是判断两个分类变量之间是否存在关联。
- 应用场景 :例如,在比较两组学生的考试成绩时,由于考试成绩是连续数据,可使用t检验;而在研究学生的性别与是否通过考试之间的关系时,由于性别和是否通过考试都是分类数据,应使用卡方检验。
4.2 与方差分析的比较
- 数据类型 :方差分析用于比较多组连续数据的均值差异,要求数据服从正态分布且方差齐性;卡方检验用于分析分类数据之间的关联。
- 研究目的 :方差分析的目的是判断多组数据的均值是否存在显著差异;卡方检验的目的是判断两个分类变量之间是否存在关联。
- 应用场景 :例如,在比较三个不同班级学生的平均身高时,由于身高是连续数据,可使用方差分析;而在研究不同班级学生的学科偏好(文科或理科)与班级之间的关系时,由于学科偏好和班级都是分类数据,应使用卡方检验。
4.3 与相关分析的比较
- 数据类型 :相关分析主要用于分析两个连续变量之间的线性关系,要求数据服从正态分布;卡方检验用于分析分类数据之间的关联。
- 研究目的 :相关分析的目的是衡量两个连续变量之间的线性相关程度;卡方检验的目的是判断两个分类变量之间是否存在关联。
- 应用场景 :例如,在研究学生的身高和体重之间的关系时,由于身高和体重都是连续数据,可使用相关分析;而在研究学生的血型与是否患有某种疾病之间的关系时,由于血型和是否患有疾病都是分类数据,应使用卡方检验。
5. 总结与展望
5.1 总结
卡方检验是一种重要的统计方法,用于分析两个分类变量之间的关联。在使用卡方检验时,需要满足数据独立性和期望频率大于5的假设。通过R语言可以方便地进行卡方检验,包括数据输入、分析和结果解读。在分析结果时,不仅要关注卡方检验的显著性,还要结合效应量(如优势比)和标准化残差进行综合分析。同时,要注意卡方检验的局限性,不能仅仅依据卡方检验的结果来判断因果关系。
5.2 展望
随着数据科学和统计学的不断发展,卡方检验也在不断改进和拓展。未来,可能会出现更高效、更准确的卡方检验方法,以适应不同类型的数据和复杂的研究问题。同时,卡方检验与其他统计方法的结合应用也将更加广泛,为科学研究和实际应用提供更有力的支持。例如,将卡方检验与机器学习算法相结合,可以更好地挖掘数据中的潜在信息和模式。
此外,随着大数据时代的到来,数据的规模和复杂性不断增加,如何在大规模数据上高效地进行卡方检验也是一个值得研究的问题。未来的研究可能会关注如何优化卡方检验的算法,提高计算效率,以应对大规模数据的挑战。
总之,卡方检验作为一种经典的统计方法,在未来仍将发挥重要的作用,同时也需要不断地发展和创新,以适应不断变化的研究需求。
通过以上内容,我们对卡方检验有了更全面、深入的了解,希望这些知识能帮助你在实际研究和工作中正确应用卡方检验,做出更准确的决策。
下面是一个简单的mermaid流程图,展示卡方检验的基本流程:
graph LR
A[确定研究问题和变量] --> B[收集分类数据]
B --> C[检查数据独立性和期望频率]
C -->|满足假设| D[选择合适的数据输入方式]
C -->|不满足假设| E[考虑其他方法(如Fisher精确检验)]
D --> F[使用R进行卡方检验]
F --> G[查看检验结果(卡方值、p值等)]
G -->|p < 0.05| H[拒绝原假设,存在显著关联]
G -->|p >= 0.05| I[接受原假设,无显著关联]
H --> J[分析标准化残差和效应量]
I --> K[结束分析]
J --> L[得出结论并报告结果]
这个流程图展示了卡方检验的基本步骤,从确定研究问题到最终得出结论,帮助我们更清晰地理解卡方检验的过程。
超级会员免费看

2215

被折叠的 条评论
为什么被折叠?



