有没有一种方法可以在R

时间:2019-08-20 23:14:28

标签: r ggplot2

我有一个样本均值向量,我一直试图使用hist(x)和ggplot绘制概率直方图,但是bin超过1(这对于概率分布来说非常不寻常),然后我使用了PlotRelativeFrequency( hist(x))函数强制R绘制概率直方图,它起作用了!但是我的问题是,我无法在直方图上绘制密度函数。当我使用lines(density(x))函数时,它绘制的密度函数偏离了图形。

1 个答案:

答案 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)})

enter image description here

接下来,我们可以使用核密度估计来绘制经验密度,这几乎可以自动完成所有工作:

ggplot(df, aes(x)) +
  geom_histogram(binwidth = 1, aes(y = stat(density))) +
  geom_density()

enter image description here

最后,您可以看看这个stats function,它实际上是第一个版本的自动化。完全免责声明:我是该github存储库的作者。

library(ggnomics)
ggplot(df, aes(x)) +
  geom_histogram(binwidth = 1, aes(y = stat(density))) +
  stat_theodensity()

enter image description here