R语言基于research_funding_rates构建2×2列联表执行chisq.test报错求解
报错原因
summarise() 返回的是 tibble(数据框类结构),直接将其传入 matrix() 时,R会把整个数据框作为列表处理,而不是提取内部的4个数值构建矩阵,最终生成的表格结构不符合卡方检验的输入要求。
修复方案
最简修改方式
如果仅调整你原有代码的错误,只需要在构造矩阵时加unlist()把tibble转成数值向量即可:
t <- as.table(matrix(unlist(r_s_t), ncol = 2, byrow=TRUE)) chisq.test(t)
完整规范实现
带行列标注的可直接复用的完整代码如下:
# 加载依赖包 library(dslabs) library(tidyverse) data("research_funding_rates") # 计算未获奖人数、汇总全学科数据 r_s <- research_funding_rates %>% mutate(not_awarded_men = applications_men - awards_men, not_awarded_women = applications_women - awards_women) sum_v <- r_s %>% summarise(awarded_men = sum(awards_men), not_awarded_men = sum(not_awarded_men), awarded_women = sum(awards_women), not_awarded_women = sum(not_awarded_women)) %>% unlist() # 构建带语义标注的2×2列联表 cont_table <- matrix(sum_v, nrow = 2, byrow = TRUE, dimnames = list(性别 = c("男性", "女性"), 获奖状态 = c("获奖", "未获奖"))) # 执行卡方检验 chisq.test(cont_table)
运行后会正常输出卡方值、自由度、p值等检验结果。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

