3

ggplot/を使用easyGgplot2して、2 つのグループの密度プロットを作成しています。2 つの曲線の間にどれだけの交差があるかを示すメトリックまたは指標が必要です。(いくつかの異なるデータ グループの) どのグループがより明確であるかを測定できる限り、曲線を使用せずに他のソリューションを使用することもできます。

Rでこれを行う簡単な方法はありますか?

たとえば、このサンプルを使用すると、このプロットが生成されます

ここに画像の説明を入力

両方に共通する面積の割合をどのように推定できますか?

ggplot2.density(data=weight, xName='weight', groupName='sex',
    legendPosition="top",
    alpha=0.5, fillGroupDensity=TRUE )
4

2 に答える 2

3

前の回答が気に入っていますが、これはもう少し直感的かもしれません。また、共通の帯域幅を使用するようにしました:

library ( "caTools" )

# Extract common bandwidth
Bw <- ( density ( iris$Petal.Width ))$bw

# Get iris data
Sample <- with ( iris, split ( Petal.Width, Species ))[ 2:3 ]

# Estimate kernel densities using common bandwidth
Densities <- lapply ( Sample, density,
                      bw = bw,
                      n = 512,
                      from = -1,
                      to = 3 )

# Plot
plot( Densities [[ 1 ]], xlim = c ( -1, 3 ),
      col = "steelblue",
      main = "" )
lines ( Densities [[ 2 ]], col = "orange" )

# Overlap
X <- Densities [[ 1 ]]$x
Y1 <- Densities [[ 1 ]]$y
Y2 <- Densities [[ 2 ]]$y

Overlap <- pmin ( Y1, Y2 )
polygon ( c ( X, X [ 1 ]), c ( Overlap, Overlap [ 1 ]),
    lwd = 2, col = "hotpink", border = "n", density = 20) 

# Integrate
Total <- trapz ( X, Y1 ) + trapz ( X, Y2 )
(Surface <- trapz ( X, Overlap ) / Total)
SText <- paste ( sprintf ( "%.3f", 100*Surface ), "%" )
text ( X [ which.max ( Overlap )], 1.2 * max ( Overlap ), SText )

versicolor と virginica の花びらの幅の密度の重なり

于 2015-07-24T06:32:34.943 に答える