gpt4 book ai didi

r - 为什么正常样本的直方图在模式附近比在尾部附近更粗糙?

转载 作者:行者123 更新时间:2023-12-03 20:51:01 25 4
gpt4 key购买 nike

我试图了解从 rnorm 生成的样本直方图的特定行为.

set.seed(1)
x1 <- rnorm(1000L)
x2 <- rnorm(10000L)
x3 <- rnorm(100000L)
x4 <- rnorm(1000000L)

plot.hist <- function(vec, title, brks) {
h <- hist(vec, breaks = brks, density = 10,
col = "lightgray", main = title)
xfit <- seq(min(vec), max(vec), length = 40)
yfit <- dnorm(xfit, mean = mean(vec), sd = sd(vec))
yfit <- yfit * diff(h$mids[1:2]) * length(vec)
return(lines(xfit, yfit, col = "black", lwd = 2))
}

par(mfrow = c(2, 2))
plot.hist(x1, title = 'Sample = 1E3', brks = 100)
plot.hist(x2, title = 'Sample = 1E4', brks = 500)
plot.hist(x3, title = 'Sample = 1E5', brks = 1000)
plot.hist(x4, title = 'Sample = 1E6', brks = 1000)

enter image description here

您会注意到 在每种情况下 (我不是在进行交叉比较;我知道随着样本量变大,直方图和曲线之间的匹配更好),直方图在尾部更接近标准法线,但在模式方面较差。简单地说,我试图理解为什么 每个与尾部相比,中间的直方图更粗糙。这是预期的行为还是我错过了一些基本的东西?

最佳答案

我们的眼睛在欺骗我们。模式附近的密度很高,因此我们可以更明显地观察到变化。尾部附近的密度非常低,以至于我们无法真正发现任何东西。以下代码执行某种“标准化”,使我们能够在相对尺度上可视化变化。

set.seed(1)
x1 <- rnorm(1000L)
x2 <- rnorm(10000L)
x3 <- rnorm(100000L)
x4 <- rnorm(1000000L)

foo <- function(vec, title, brks) {
## bin estimation
h <- hist(vec, breaks = brks, plot = FALSE)
## compute true probability between adjacent break points
p2 <- pnorm(h$breaks[-1])
p1 <- pnorm(h$breaks[-length(h$breaks)])
p <- p2 - p1
## compute estimated probability between adjacent break points
phat <- h$count / length(vec)
## compute and plot their absolute relative difference
v <- abs(phat - p) / p
##plot(h$mids, v, main = title)
## plotting on log scale is much better!!
v.log <- log(1 + v)
plot(h$mids, v.log, main = title)
## invisible return
invisible(list(v = v, v.log = v.log))
}

par(mfrow = c(2, 2))
v1 <- foo(x1, title = 'Sample = 1E3', brks = 100)
v2 <- foo(x2, title = 'Sample = 1E4', brks = 500)
v3 <- foo(x3, title = 'Sample = 1E5', brks = 1000)
v4 <- foo(x4, title = 'Sample = 1E6', brks = 1000)

enter image description here

相对变化在中间附近(向 0)最低,但在两个边缘附近非常高。这在统计学中有很好的解释:
  • 我们在中间附近有更多的样本,所以 (sample sd) : (sample mean)有更低;
  • 我们在边缘附近的样本很少,可能是 1 或 2,所以 (sample sd) : (sample mean)有大。


  • 关于我采用的对数变换的一点解释
    v.log = log(1 + v) .其泰勒展开确保 v.log靠近 v非常小的 v大约 0。如 v变大, log(1 + v)越来越接近 log(v) ,因此恢复了通常的对数变换。

    关于r - 为什么正常样本的直方图在模式附近比在尾部附近更粗糙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508546/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com