为何R中qnorm()计算结果与summary()分位数不一致?
为什么qnorm()结果和summary()输出的分位数存在差异?
你用R生成了一组正态分布的随机样本,发现qnorm()计算的分位数和summary()给出的样本分位数不一样,代码和运行结果如下:
set.seed(123) X<-rnorm(100,10,1) summary(X) qnorm(0.5,10,1) qnorm(0.25,10,1) qnorm(0.75,10,1)
运行输出:
> summary(X) Min. 1st Qu. Median Mean 3rd Qu. Max. 7.691 9.506 10.062 10.090 10.692 12.187 > qnorm(0.5,10,1) [1] 10 > qnorm(0.25,10,1) [1] 9.32551 > qnorm(0.75,10,1) [1] 10.67449
差异的核心原因有两个:
- 计算对象完全不同:
qnorm(p, mean, sd)计算的是理论正态分布的分位数,是基于你指定的均值、标准差的理想正态分布,通过CDF反函数得到的精确理论值,和样本无关。比如qnorm(0.25,10,1)就是均值10、标准差1的正态分布中,有25%的数据小于这个值,这是固定的理论结果。 - summary()的分位数是样本统计量:
summary()给出的是你生成的100个随机样本的分位数,它是基于样本数据排序后,用R默认的type=7分位数算法插值得到的。样本本身是随机生成的,哪怕固定了随机种子,这也只是这一组样本的统计结果,必然会和理论值有偏差——毕竟样本只是理论分布的“近似”,不是完美复刻。
另外,样本量也会影响偏差大小:如果把样本量从100改成10000,再运行代码,你会发现summary()的分位数会非常接近qnorm()的结果,样本量越大,样本统计量就越接近理论参数。
内容的提问来源于stack exchange,提问作者Roshan Ahmad Shaheen
相关产品推荐
相关产品推荐

