【问题标题】:How to show the value of the AUC from geom_density/stat_density如何从 geom_density/stat_density 显示 AUC 的值
【发布时间】:2013-11-01 19:42:56
【问题描述】:

我使用 ggplot2 和 stat_density 制作了一些密度图。我的同事提到他不相信每条曲线下的面积总和为 1。所以,我开始计算曲线下的面积,我想知道是否有比我所做的更好的方法。

这是我所做的一个例子:

data(iris)

p<-ggplot(iris,aes(x=Petal.Length))+
          stat_density(aes(colour=Species),geom="line",position="identity")

q<-print(p)
q<-q$data[[1]]

# calculate interval between density estimates for a given point.
# assume it is the same interval for all estimates
interval<-q$x[2]-q$x[1] 

# calculate AUC by summing interval*height for the density estimate at each point
tapply(q$density*interval,  
       q$group,
       sum)

结果:

    1         2         3 
0.9913514 1.0009785 0.9817040 

它似乎工作得很好,但我想知道是否有更好的方法来做到这一点。特别是,我计算的区间(即 dx,我想)似乎是个问题,特别是如果不同的密度曲线使用不同的区间。

【问题讨论】:

    标签: r ggplot2 kernel-density auc


    【解决方案1】:

    你的方法已经很好了。

    另一种方法是使用梯形规则:

    data <- cbind(q$x, q$y)
    by(data, q$group, FUN = function(x) trapz(x[, 1], x[, 2]))
    

    结果几乎一样:

    INDICES: 1
    [1] 0.9903457
    
    INDICES: 2
    [1] 1.000978
    
    INDICES: 3
    [1] 0.9811152
    

    这是因为在使密度图看起来合理所需的带宽(您的代码中的interval),如果您可以进行实际积分,您将非常接近您将获得的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2019-05-19
      • 1970-01-01
      • 2014-10-07
      • 2018-01-22
      • 2019-06-09
      • 2017-08-15
      相关资源
      最近更新 更多