0

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 だと思います) は、特に異なる密度曲線が異なる間隔を使用する場合、問題になる可能性があるようです。

4

1 に答える 1

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コード内で) 見えるようにするために必要な帯域幅で、実際の積分を行うことができた場合に得られるものに非常に近いためです。

于 2013-11-01T19:57:51.593 に答える