代码之家  ›  专栏  ›  技术社区  ›  Ameya

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

  •  5
  • Ameya  · 技术社区  · 6 年前

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

    set.seed(1)
    x1<-rnorm(1000升)
    x2<-rnorm(10000升)
    X3<-RNORM(100000升)
    x4<-rnorm(1000000升)
    
    plot.hist<-函数(vec、title、brks){
    H<-历史(vec,breaks=brks,density=10,
    col=“lightgray”,main=标题)
    xfit<-seq(最小值(vec),最大值(vec),长度=40)
    yfit<-dnorm(xfit,mean=mean(vec),sd=sd(vec))。
    yfit<-yfit*差异(h$mids[1:2])*长度(vec)
    返回(行(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)
    < /代码> 
    
    

    您会注意到,在每种情况下,都会比较(我不是在进行交叉比较;我知道随着样本大小变大,柱状图和曲线之间的匹配会更好),柱状图近似于标准的Normal Better to the Tails,but better to the mode.简单地说,我试图理解为什么与尾部相比,柱状图在中间比较粗糙。这是一种预期的行为还是我错过了一些基本的东西?

    enter image description here

    你会注意到的 在每种情况下 (我没有做交叉比较;我知道随着样本量的增加,直方图和曲线之间的匹配会更好) ,柱状图更好地向尾部逼近标准法向,但向模式逼近较差。简单地说,我想知道为什么 每个 与尾部相比,中间的柱状图更粗糙。这是一种预期的行为还是我错过了一些基本的东西?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Glen_b    6 年前

    这不仅仅是正常样本的情况。如果我们有固定的垃圾箱(而不是像我们通常那样由数据决定的垃圾箱),并且我们对观察总数进行了限制,那么计数将是 multinomial

    bin中的计数的预期值 i is the n n n·p(i),其中p(i)是落在bin(i)中的人口密度的比例。

    bin中计数的方差 i 将是n·p(i)·(1-p(i))。如果有许多料仓,且密度像正常值一样平稳,那么(1-p(i))将非常接近1;p(i)通常较小(比1/2小得多)。

    计数的方差(及其标准差)是预期高度的一个递增函数:

    对于固定的粮箱宽度,高度与预期计数成正比,粮箱高度的标准偏差是高度的递增函数。

    因此,这就激发了你所看到的一切。

    实际上,仓边界不是固定的;当您添加观察值或生成新样本时,它们将发生变化,但作为样本大小的函数(通常作为立方根,有时作为日志),仓的数量变化相当缓慢,并且需要比这里的更复杂的分析来获得精确的F。奥姆然而,结果是相同的——在通常观察到的条件下,料仓高度的变化通常随料仓高度单调增加。

    那么计数应该是 multinomial .

    bin中计数的预期值 是n·p(i),其中p(i)是落在bin(i)中的人口密度的比例。

    箱中计数的差异 则为N·P(i)·(1-P(i))。如果有许多料仓,且密度像正常值一样平稳,那么(1-p(i))将非常接近1;p(i)通常较小(比1/2小得多)。

    variance function for a bernoulli p(1-p) vs p

    计数的方差(及其标准差)是预期高度的一个递增函数:

    当料仓宽度固定时,高度与预期计数成正比,料仓高度的标准偏差是高度的一个递增函数。

    所以这激发了你所看到的一切。

    实际上,仓边界不是固定的;当您添加观察值或生成新的样本时,它们将发生变化,但作为样本大小的函数(通常作为立方根,有时作为日志),仓的数量变化相当缓慢,并且需要比这里的分析更复杂的分析才能得到准确的形式。然而,结果是相同的——在通常观察到的条件下,料仓高度的变化通常随料仓高度单调增加。

        2
  •  6
  •   Zheyuan Li    6 年前

    我们的眼睛在愚弄我们。模附近的密度很高,所以我们可以更清楚地观察到这种变化。尾巴附近的密度很低,所以我们不能真正发现任何东西。下面的代码执行某种“标准化”,允许我们以相对比例可视化变化。

    set.seed(1)
    x1<-rnorm(1000升)
    x2<-rnorm(10000升)
    X3<-RNORM(100000升)
    x4<-rnorm(1000000升)
    
    foo<-函数(vec、title、brks){
    ##仓位估计
    H<-历史(vec,breaks=brks,plot=false)
    ##计算相邻断点之间的真概率
    p2<-pnorm(h$breaks[-1])
    p1<-pnorm(h$breaks[-长度(h$breaks)])
    P& lt;-P2-P1
    ##计算相邻断点之间的估计概率
    PHAT<-H$计数/长度(vec)
    ##计算并绘制它们的绝对相对差
    V<-Abs(PHAT-P)/P
    ##绘图(H$MIDS,V,MAIN=标题)
    ##用对数标度绘图更好!!
    v.log<-日志(1+v)
    绘图(H$MIDS,V.LOG,MAIN=标题)
    ##无形收益
    不可见(列表(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)
    < /代码> 
    
    

    相对变化在中间附近最低(接近0),但在两个边缘附近非常高。这在统计学中有很好的解释:

    • 我们在中间有更多的样本,所以(sample sd):(sample mean)there is lower;。
    • 我们在边缘附近有几个样本,可能是1或2个,所以(sample sd):(sample mean).there is big.
    • < >

      关于日志转换的一点解释

      v.log=log(1+v)。它的泰勒展开确保v.log->is close tov->code>for very smallv->code>around 0.asvgets larger,log(1+v)gets closer tolog(v),such the normal log transform is recovered.

      低到我们不能真正发现任何东西。下面的代码执行某种“标准化”,允许我们以相对的比例来可视化变化。

      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个,所以(样本SD):(样本平均值)有很大的。

      关于日志转换的一点解释

      v.log = log(1 + v). 它的泰勒展开确保了v.log接近v非常小V大约0。ASV变得更大,log(1 + v)越来越接近log(v)从而恢复通常的日志转换。

        3
  •  1
  •   DanY    6 年前

    rnorm() 绘制一个 随机的 正态分布的样本。样本的大小是 r-() . 所以如果你这样做 hist(rnorm(10)) 当然,你会得到一些不太像正常钟形曲线的东西,因为你的样本太小了。如果你这样做了 hist(rnorm(1000)) 这样会更好,如果你这样做的话 hist(rnorm(1e8)) 你的样品应该很好地近似于曲线。