R语言单样本方差卡方检验(Chi-squared test)实现疑问咨询
单样本方差检验实现问题解答
现有代码的错误原因
- 第一版使用
t.test()的实现逻辑错误:t.test()是针对总体均值的假设检验工具,你基于它的均值估计计算离均差平方和直接和假设方差比较的逻辑,完全不符合单样本方差检验的统计规范,返回的TRUE没有参考价值。 - 直接调用
chisq.test()的调用方式错误:R基础包的chisq.test()默认执行卡方拟合优度检验,用于比对观测频数和理论频数的吻合度,并不支持直接传入连续型样本做方差检验。你传入样本向量后函数将其误判为计数数据,输出的p=1是无意义的错误结果,不代表原假设100%成立。
单样本方差检验的正确实现
单样本方差检验的核心逻辑是:原假设H₀为总体方差等于给定值σ₀²,构造检验统计量χ² = (n-1)*s²/σ₀²,该统计量服从自由度为n-1的卡方分布,基于该分布计算p值即可完成检验。
手动实现代码
# 预设参数 sigma2_0 <- 0.0001 # 待检验的假设总体方差 sample_data <- c(8.99, 9.01, 8.98, 9.00, 9.01) alpha <- 0.05 n <- length(sample_data) # 计算检验统计量 sample_var <- var(sample_data) chisq_stat <- (n-1)*sample_var / sigma2_0 # 计算双侧检验p值 p_value <- 2 * min( pchisq(chisq_stat, df = n-1), 1 - pchisq(chisq_stat, df = n-1) ) # 结果输出与判断 cat("卡方统计量:", round(chisq_stat,3), "\n") cat("自由度:", n-1, "\n") cat("p值:", round(p_value,3), "\n") if(p_value < alpha){ cat("显著性水平0.05下拒绝原假设,总体方差不等于", sigma2_0) }else{ cat("显著性水平0.05下无法拒绝原假设,没有足够证据说明总体方差不等于", sigma2_0) }
结果说明
运行上述代码可得p值约为0.302,大于0.05,因此无法拒绝原假设,没有足够证据证明该样本对应的总体方差不等于0.0001。
补充说明
假设检验中不存在“原假设100%成立”的结论,p值仅反映原假设成立的前提下观测到当前样本的概率,p值大于显著性水平仅能说明没有足够证据拒绝原假设,不能直接证明原假设为真。
内容的提问来源于stack exchange,提问作者WPHakoon
相关产品推荐
相关产品推荐

