使用R进行卡方检验和fisher精确检验

使用卡方分布可以检验分类×分类数据是否存在显著差异。

举例

以下是一个示例数据集,包含男人和女人在不同学历层次(小学、初中、高中和大学)的人数。然后我将展示如何使用 R 进行卡方检验。

示例数据

我们假设以下样本数量:

学历 男性人数 女性人数
小学 30 25
初中 40 50
高中 35 45
大学 20 30

在 R 中进行卡方检验

下面是使用 R 进行卡方检验的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建数据框
data <- matrix(c(30, 25, 40, 50, 35, 45, 20, 30),
nrow = 4,
byrow = TRUE)

# 指定行和列名称
rownames(data) <- c("小学", "初中", "高中", "大学")
colnames(data) <- c("男性", "女性")

# 显示数据
print(data)

# 执行卡方检验
chi_square_test <- chisq.test(data)

# 输出检验结果
print(chi_square_test)

解释输出

运行上述代码后,你将看到卡方检验的结果,

1
2
3
4
        Pearson's Chi-squared test

data: data
X-squared = 2.5641, df = 3, p-value = 0.4638

其中包括:

  • 卡方统计量(Chi-squared value)
  • 自由度(Degrees of freedom)
  • P 值(p-value)

根据得到的 P 值,可以判断学历与性别之间是否存在显著性差异。如果 P 值小于显著性水平(如 0.05),则可以拒绝零假设,认为学历和性别之间存在显著相关性。

举例2

这里构建矩阵的行和列的顺序不重要,下面将行和列的顺序进行对调,使得学历分布在列中,而性别在行中。

性别 小学 初中 高中 大学
男性 30 40 35 20
女性 25 50 45 30

在 R 中进行卡方检验

下面是更新后的 R 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建数据框
data <- matrix(c(30, 40, 35, 20, 25, 50, 45, 30),
nrow = 2,
byrow = TRUE)

# 指定行和列名称
rownames(data) <- c("男性", "女性")
colnames(data) <- c("小学", "初中", "高中", "大学")

# 显示数据
print(data)

# 执行卡方检验
chi_square_test <- chisq.test(data)

# 输出检验结果
print(chi_square_test)

解释输出

运行上述代码后,你将得到与之前相同的信息,包括卡方统计量、自由度和 P 值。

1
2
3
4
        Pearson's Chi-squared test

data: data
X-squared = 2.5641, df = 3, p-value = 0.4638

fisher精确检验

当存在某个频数小于5时,需要使用 fisher 精确检验。

这里只需要将 chisq.test() 函数换成 fisher.test() 函数即可。

如果只需要提取P值结果,则可以使用

1
2
chisq.test(data)$p.value
fisher.test(data)$p.value
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2024 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信