生成多组随机数据测试置信区间检验函数的R代码运行异常求助
R置信区间检验函数异常问题排查与解决
核心问题原因
- 函数返回值逻辑错误:
matrix(Within_interval,width)的写法不符合R的matrix()参数规则,第二个参数默认是矩阵行数,你传入的置信区间宽度width是数值型变量,会被强制转为整数作为行数,最终返回的矩阵长度随机,和预期输出完全不符。 - 依赖函数未明确加载:你用到的
between()是dplyr包的专属函数,如果没有提前加载dplyr或者写全命名空间调用,会直接触发函数不存在的报错,也可以用基础R的逻辑判断代替,避免额外依赖。 - 输出结构不匹配:
apply()逐行调用函数时要求每次返回的结果长度一致,你原来的函数返回长度由随机的区间宽度决定,最终输出结构会完全混乱。
修正后的代码
优化后的检验函数
checkInt <- function(x, target_mean=20){ conf_int <- t.test(x)$conf.int lower <- conf_int[1] upper <- conf_int[2] # 用基础R逻辑判断,无需依赖第三方包 Within_interval <- ifelse(target_mean >= lower & target_mean <= upper, 1, 0) width <- upper - lower # 返回命名向量,结构固定长度为2,方便后续处理 return(c(Within_interval = Within_interval, interval_width = width)) }
调用代码
# 生成5组、每组300个服从rate=1/20的指数分布样本 many_set <- t(replicate(5, rexp(n=300, rate=1/20))) # 逐行应用检验函数,转置后输出为5行2列的结构化结果 result <- t(apply(many_set , 1 , checkInt)) print(result)
效果说明
修正后运行会得到5行2列的矩阵,第一列取值为1或0,代表对应组的95%t检验置信区间是否包含目标均值20;第二列为对应置信区间的宽度。你的样本量为300属于大样本,即使指数分布右偏,t检验置信区间也近似有效,最终大概95%的组结果会为1,符合置信区间的统计定义。
内容的提问来源于stack exchange,提问作者Andyy Hu
相关产品推荐
相关产品推荐

