06频数、比例与列联表

使用 table、prop.table、ftable 和 dplyr 汇总分类变量,并分清总体、行与列比例。

2025-07-30
StatisticsFrequency TablesProportionsContingency TablesR
本章目录 · 6

分类变量分析通常从计数开始。单变量频数表描述各类别出现多少次,比例表表达它们占总体多少,列联表则展示两个或更多分类变量的联合分布。

library(dplyr)
library(palmerpenguins)

单变量频数与比例

Base R 的 table() 返回每个类别的计数:

species_n <- table(penguins$species)
species_n

转换为比例:

prop.table(species_n)

用 dplyr 可以直接生成适合后续整理的数据框:

penguins |>
  count(species, name = "n") |>
  mutate(proportion = n / sum(n))

计数是样本规模,比例便于不同总体规模之间比较。正式表格通常应同时保留两者。

二维列联表

species_island <- table(
  species = penguins$species,
  island = penguins$island
)

species_island

整表比例、行比例和列比例回答不同问题:

prop.table(species_island)
prop.table(species_island, margin = 1)
prop.table(species_island, margin = 2)
  • 整表比例:每个组合占全部样本多少;
  • 行比例:给定行类别时,各列如何分布;
  • 列比例:给定列类别时,各行如何分布。

报告百分比时必须说明分母。只写“44%”而不说明是总体、行还是列百分比,很容易造成误读。

多维列联表

三个以上分类变量可以继续传给 table(),并用 ftable() 展平显示:

multiway <- with(
  penguins,
  table(species, island, sex, useNA = "ifany")
)

ftable(multiway)

维度增加后,单元格会快速变稀疏。多维表适合检查数据结构,但不一定适合直接放进报告;可以根据问题分层展示,或用模型处理多个变量的关系。

缺失值

table() 默认忽略缺失值。需要检查缺失时应显式设置:

table(penguins$sex, useNA = "ifany")

缺失不是普通类别。将其显示在描述表中有助于质量检查,但进行比例或检验时,应明确分母是否包含缺失观测。

使用 gtsummary 生成展示表

library(gtsummary)

penguins |>
  select(species, island, sex) |>
  tbl_summary(by = species)

gtsummary 适合生成带标签、缺失统计和分组百分比的报告表;table()count() 更适合计算、检查和后续编程。不要让美化后的输出替代对原始计数与分母的核查。

从描述到检验

列联表先回答样本中观察到了什么。若要推断总体中的分类变量是否独立,再根据抽样设计、期望频数和配对结构选择卡方检验、Fisher 精确检验或其他方法。

先报告计数和比例,再报告检验结果,读者才能同时判断差异的大小和数据是否稀疏。