【问题标题】:Is there a way to plot a density function over a histogram that was plotted using the PlotRelativeFrequency() function in R有没有办法在使用 R 中的 PlotRelativeFrequency() 函数绘制的直方图上绘制密度函数
【发布时间】:2019-08-20 23:14:28
【问题描述】:

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    由于你的问题被标记为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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 2012-11-09
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多