【问题标题】:Calculating an area under a continuous density plot计算连续密度图下的面积
【发布时间】:2011-04-22 00:45:25
【问题描述】:

我用这个绘制了两条密度曲线:

Network <- Mydf$Networks
quartiles <-  quantile(Mydf$Avg.Position,  probs=c(25,50,75)/100)
density <- ggplot(Mydf, aes(x = Avg.Position, fill = Network))
d <- density + geom_density(alpha = 0.2) + xlim(1,11) + opts(title = "September 2010") + geom_vline(xintercept = quartiles, colour = "red")
print(d)

我想计算给定 Avg.Position 范围内每条曲线下的面积。有点像正常曲线的 pnorm 。有任何想法吗?

【问题讨论】:

    标签: r ggplot2 area curve


    【解决方案1】:

    分别计算密度并绘制一个开始。然后你可以使用基本的算术来得到估计。通过将一组小正方形的面积相加来近似积分。我使用平均方法。长度是两个 x 值之间的差,高度是间隔开始和结束时 y 值的平均值。我使用 zoo 包中的 rollmeans 函数,但也可以使用 base 包来完成。

    require(zoo)
    
    X <- rnorm(100)
    # calculate the density and check the plot
    Y <- density(X) # see ?density for parameters
    plot(Y$x,Y$y, type="l") #can use ggplot for this too
    # set an Avg.position value
    Avg.pos <- 1
    
    # construct lengths and heights
    xt <- diff(Y$x[Y$x<Avg.pos])
    yt <- rollmean(Y$y[Y$x<Avg.pos],2)
    # This gives you the area
    sum(xt*yt)
    

    这为您提供了小数点后最多 3 位数字的良好近似值。知道密度函数的可以看看?integrate

    【讨论】:

      【解决方案2】:

      三种可能:

      logspline 包提供了另一种估计密度曲线的方法,但它确实包含用于结果的 pnorm 样式函数。

      您还可以通过将密度函数返回的 x 和 y 变量输入到 approxfun 函数并将结果与​​积分函数一起使用来近似面积。除非您对小尾部区域(或非常小的间隔)的精确估计感兴趣,否则这可能会给出合理的近似值。

      密度估计只是以数据为中心的内核的总和,其中一个内核就是正态分布。您可以平均来自 pnorm(或其他内核)的区域,其中 sd 由带宽定义并以您的数据为中心。

      【讨论】:

        猜你喜欢
        • 2016-09-18
        • 2018-01-07
        • 2019-08-27
        • 2017-06-14
        • 1970-01-01
        • 2011-02-08
        • 2020-10-15
        • 2011-06-24
        相关资源
        最近更新 更多