具有不同偏度的两个重叠分布的理想化图?

时间:2013-09-15 23:33:28

标签: r ggplot2 statistics probability

为了显示增加右偏斜的效果,我想创建两个重叠的图,其中一个分布比另一个更偏右。

所以我做了类似下面的事情

library(SuppDists)

tmp1fun <- function(m1=0,m2=1,m3=-0.2,m4=3.7,n=20000) {
    parms <- JohnsonFit(c(m1,m2,m3,m4), 'use')
    rJohnson(n,parms) }

data1.dens <- rbind(data.frame(var1=rep('now',50000),y=tmp1fun(m3=-0.2,n=50000))
    ,data.frame(var1=rep('hist',50000),y=tmp1fun(m3=0.2,n=50000)))

library(ggplot2)
ggplot(data1.dens, aes(y, fill = var1))+
geom_density(alpha = 0.5) + coord_cartesian(xlim=c(-4, 4))

然而,它看起来不正确,看起来更像是分布的平均值相对于另一个。此外,我有点像密度图看起来更平滑。

所以我的问题有两部分 1.我应该使用什么分布和哪些参数,以便一个分布看起来与另一个分布相似,但更偏右? 2.制作此图的最佳图形工具是什么?如果可能的话,我想要一个填充的图表而不仅仅是一条线,并且可能更宽的带宽。

感谢任何提示或建议。

1 个答案:

答案 0 :(得分:3)

最好使用实际概率密度函数来显示理论密度,而不仅仅是随机变量更平滑。特别是当分布是长尾时,因为它可能需要大量的随机变量来准确地表征尾部。概率密度函数也(显然)导致更平滑的密度。

使用密度函数应该明确哪个参数可以做什么。在这里,我更改m1,这会产生您要求的形状。

这是一个与您的示例相似的选项,使用概率密度函数和geom_polygon()

library(SuppDists)
library(ggplot2)
# function to calculate density along a grid
JohnsonDensity = function(m1 = 0, m2 = 1, m3 = -0.2, m4 = 3.7, n = 10000) {
    parms <- JohnsonFit(c(m1, m2, m3, m4))
    J_quantiles = na.omit(qJohnson(seq(0, 1, length.out = n+2), parms))
    J_pdf = dJohnson(J_quantiles, parms)
    return( data.frame(pdf = c(J_pdf, 0, 0), x = c(J_quantiles, J_quantiles[length(J_quantiles)], J_quantiles[1]) ) )
}

# values of the pdf along the grid for two distributions
data_density = rbind(data.frame(var1 = "now", JohnsonDensity() ), data.frame(var1 = "hist", JohnsonDensity(m1 = 0.2)) )

ggplot(data_density, aes(x = x, y = pdf, color = var1, fill = var1)) + geom_polygon(alpha = 0.5)

在此示例中,密度的平滑度由n控制,{{1}}现在是计算密度的网格点数。