分类变量分析通常从计数开始。单变量频数表描述各类别出现多少次,比例表表达它们占总体多少,列联表则展示两个或更多分类变量的联合分布。
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 精确检验或其他方法。
先报告计数和比例,再报告检验结果,读者才能同时判断差异的大小和数据是否稀疏。