如何避免因样本量过小导致R中t.test()函数报错?
解决分组t检验置信区间报错的条件检查
要彻底避免t.test()的报错,需要同时检查两个核心条件:
- 组内样本量小于2:t检验的自由度为
n-1,当n=1时自由度为0,根本无法计算置信区间 - 组内样本方差为0:所有观测值完全相同,此时标准误为0,t检验无法进行计算
另外注意:直接用sd(var) == 0判断方差为0可能因为浮点运算误差失效,建议用sd(var) < 1e-8这种容错性更强的判断方式。
修改后的代码如下:
library(tidyverse) n <- 10 test_df <- data.frame(var = sample(1:5, size=n, replace=TRUE), grp = sample(c("A", "B", "C"), size = n, replace=TRUE)) test_df %>% group_by(grp) %>% summarise(mean = mean(var, na.rm=TRUE), n = n(), uci = if(n < 2 | sd(var, na.rm=TRUE) < 1e-8) { NA } else { t.test(var, conf.level = .95)$conf.int[[2]] }, lci = if(n < 2 | sd(var, na.rm=TRUE) < 1e-8) { NA } else { t.test(var, conf.level = .95)$conf.int[[1]] })
为什么之前的方法失效?
你之前只检查了方差为0的情况,但当随机抽样出现某组样本量仅为1时,t.test()依然会报错——这就是多次运行代码偶尔报错的原因。同时加上样本量的判断,就能覆盖所有导致t.test()无法计算的场景。
内容的提问来源于stack exchange,提问作者D. Studer
相关产品推荐
相关产品推荐

