卡方检验是一种常用的统计方法,主要用于分析分类变量之间的差异性或关联性,常见于处理计数数据或构成比的比较。其基本思想是通过将两个或多个总体率(或构成比)的比较,转化为实际观测频数与理论期望频数之间吻合程度的检验,从而判断不同分类变量之间是否存在显著差异。 卡方检验的典型场景包括检验性别与疾病发病率的关联性、基因型分布的差异性,以及治疗效果在不同分组间的差异等。根据数据类型和研究目的,卡方检验可以细分为独立性检验和配对样本的一致性检验等。独立性检验主要用于分析两个分类变量之间是否具有统计学上的关联性,而一致性检验则用于比较观测频率是否符合理论模型。 依据设计类型的不同,卡方检验可分为三类,两组二分类资料对应四格表,多组多酚类资料对应R*C表,配对设计资料则对应配对四格表。 1. 独立样本四格表 R代码: # 创建示例数据library(dplyr)data <- tibble( sex = factor(c(rep("Male", 40),rep("Female", 60))), status =factor(c(rep("disease", 42), rep("healthy",58))))# 使用CrossTable()生成列联表并进行卡方检验library(gmodels)CrossTable(data$sex, data$status, expected = T,chisq = TRUE) 结果解读: 


CrossTable()函数的输出包括以下几个部分:1. 列联表:显示了两个变量的频数分布。2.卡方检验统计量:包括卡方统计量(chi^2)、自由度(d.f.)和p值。期望频数:展示每个单元格的期望频数。3. 连续性校正:如果样本量较小,CrossTable()会默认使用Yates的连续性校正来提高卡方检验的准确性。4. Fisher 确切概率法。 该数据应该选取哪一种结果呢?方法选择如下: 
我们观察到该示例数据中样本量为100,但male-healthy组人数为0,此时应使用Fisher确切概率法的结果。 2. 独立样本R*C列联表 针对R*C列联表的卡方检验需要首先将数据整理成为一个R*C的矩阵或者数据框,其中R表示行数,C表示列数。然后再执行卡方检验 R代码: #构建列联表data_matrix <- matrix(c(199, 164, 118, 7, 18, 26), nrow = 3, byrow = TRUE, dimnames = list(Treatment = c("placebo", "Drug1", "Drug2"), Effect = c("Effective", "Noneffective")))# 执行卡方检验chisq_result <- chisq.test(data_matrix) 结果解读: 
卡方统计量(X-squared):72.477;自由度(df):2;P值(p-value):< 2.2e-16 由于P值远小于常用的显著性水平0.05,可以拒绝零假设,认为治疗方法与效果之间存在显著的关联性。 3. 配对设计资料的卡方检验 和数值资料一样,分类资料也可作配对设计,只是数值资料的配对其结果是数值变量,而分类资料的配对其结果是分类变量。这时应该使用McNemar检验。 假设我们有以下数据: 
我们可以将这些数据整理成一个2×2的列联表: 
a、b、c、d分别表示不同组合的频数 R代码: # 创建数据框data <- data.frame( drug1 = c("有效", "无效", "有效", "无效"), drug2 = c("无效", "有效", "有效", "无效"))# 创建列联表table_data <- table(data$drug1, data$drug2)# 执行McNemar检验mcnemar_result <- mcnemar.test(table_data)

卡方统计量(McNemar's chi-squared):1;自由度(df):1;p值(p-value):1 由于p值大于常用的显著性水平0.05,我们无法拒绝零假设,即认为两种药物的疗效在统计学上没有显著差异。
|