我有一个样本均值向量,我一直试图使用hist(x)和ggplot绘制概率直方图,但是bin超过1(这对于概率分布来说非常不寻常),然后我使用了PlotRelativeFrequency( hist(x))函数强制R绘制概率直方图,它起作用了!但是我的问题是,我无法在直方图上绘制密度函数。当我使用lines(density(x))函数时,它绘制的密度函数偏离了图形。
答案 0 :(得分:0)
由于您的问题是用ggplot标记的,因此我将给出一个ggplot答案。
要使直方图相对,必须设置aes(y = stat(density))
使其积分为1。然后,可以为stat_function()
提供任何理论分布的相关密度函数。缺点是您必须预先计算参数。
df <- data.frame(x = rnorm(500, 10, 2))
pars <- list(mean = mean(df$x), sd = sd(df$x))
library(ggplot2)
ggplot(df, aes(x)) +
geom_histogram(binwidth = 1, aes(y = stat(density))) +
stat_function(fun = function(x) {dnorm(x, mean = pars$mean, sd = pars$sd)})
接下来,我们可以使用核密度估计来绘制经验密度,这几乎可以自动完成所有工作:
ggplot(df, aes(x)) +
geom_histogram(binwidth = 1, aes(y = stat(density))) +
geom_density()
最后,您可以看看这个stats function,它实际上是第一个版本的自动化。完全免责声明:我是该github存储库的作者。
library(ggnomics)
ggplot(df, aes(x)) +
geom_histogram(binwidth = 1, aes(y = stat(density))) +
stat_theodensity()