在R中进行双样本t检验:性别与收入占比的组间差异分析问题
问题描述
我有如下数据框:
df <- structure(list(ID = c(243, 292, 317, 388, 398, 404, 463, 473, 842, 844, 858, 862, 869, 871, 879, 888), Zone = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2), Gen = c("Male", "Male", "Other Gender Identity", "Male", "Male", "Male", "Male", "Female", "Female", "Male", "Female", "Male", "Male", "Male", "Male", "Female" ), Month_Inc = c("< $1,500", "< $1,500", "< $1,500", "$1,500 - $1,999", "$1,500 - $1,999", "< $1,500", "< $1,500", "< $1,500", "$1,500 - $1,999", "$2,000 - $2,499", "$1,500 - $1,999", "< $1,500", "$2,500 - $2,999", "< $1,500", "< $1,500", "< $1,500")), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame"))
需要完成两个检验:
- 检验两个区域中女性占比的统计差异(原假设H₀:两区域女性占比相等;备择假设H₁:两区域女性占比不相等)
- 检验两个区域中收入水平的组间占比差异
尝试用t.test(Gen ~ Zone, mu = 0, alt = "two.sided", conf= 0.95, paired = FALSE, ver.equal = FALSE, data= df)未得到预期结果,需要修正代码。
解决方案
核心问题是错误地将t检验用于分类变量的比例/分布检验:t检验仅适用于连续变量的均值比较,而你要检验的是分类变量(性别、收入)在不同区域的分布差异,需选择对应方法:
一、检验两区域女性占比差异
需将性别变量转换为二分类聚焦女性群体,使用两样本比例检验(prop.test):
步骤1:统计各区域女性及总人数
# 生成区域与是否为女性的交叉表 female_counts <- table(df$Zone, df$Gen == "Female") female_counts
输出示例:
FALSE TRUE 1 7 1 2 5 3
步骤2:执行比例检验
# x为各区域女性人数,n为各区域总人数 prop.test(x = c(1, 3), n = c(8, 8), alternative = "two.sided", conf.level = 0.95)
该检验直接针对两区域女性占比是否相等完成假设检验,完全匹配你的需求。
二、检验两区域收入水平的分布差异
收入是多分类变量,使用卡方独立性检验(chisq.test),验证收入水平与区域是否独立:
步骤1:生成收入与区域的列联表
income_table <- table(df$Zone, df$Month_Inc) income_table
步骤2:执行卡方检验
chisq.test(income_table)
若单元格期望频数过小(如<5),可添加模拟参数提升结果可靠性:
chisq.test(income_table, simulate.p.value = TRUE)
原代码无效原因
t.test要求因变量为连续数值型变量,而Gen是字符型分类变量,无法计算均值,因此输出无意义结果。必须针对分类变量的比例/分布选择对应检验方法。
内容的提问来源于stack exchange,提问作者Tathagato
相关产品推荐
相关产品推荐

