【问题标题】:Difference between two density plots两个密度图之间的差异
【发布时间】:2012-01-10 18:47:56
【问题描述】:

有没有一种简单的方法来绘制两个概率密度函数之间的差异?

我可以在同一个图上绘制我的数据集的 pdf(两者都是具有大约 11000 个值的一维向量),以了解重叠/差异,但如果我能看到它会对我更有用差异图。

类似于以下内容(尽管这显然行不通):

> plot(density(data1)-density(data2))

我对 R 比较陌生,在任何论坛上都找不到我想要的东西。

提前致谢

【问题讨论】:

    标签: r plot


    【解决方案1】:

    这应该可行:

    plot(x =density(data1, from= range(c(data1, data2))[1], 
                           to=range(c(data1, data2))[2] )$x, 
      y=  density(data1, from= range(c(data1, data2))[1], 
                         to=range(c(data1, data2))[2] )$y-
           density(data2,  from= range(c(data1, data2))[1], 
                          to=range(c(data1, data2))[2] )$y )
    

    诀窍是确保密度具有相同的限制。然后你可以在相同的位置绘制它们的差异。我对相同限制需要的理解来自于在回答similar question on Rhelp several years ago 时犯了没有采取这一步的错误。太糟糕了,我不记得正确的论点了。

    【讨论】:

      【解决方案2】:

      看来您需要花一点时间学习如何使用 R(或任何其他语言,就此而言)。帮助文件是您的朋友。 来自?density 的输出:

      值[即函数返回的数据]

      如果 give.Rkern 为真,则为数 R(K),否则为具有类的对象 “密度”,其底层结构是一个包含 以下组件。

      x 估计密度的点的 n 个坐标。

      y 估计的密度值。这些将是非负的,但可以 为零[为简洁起见,删除“值”的其余部分]

      所以,做:

      foo<- density(data1) 
      bar<- density(data2)
      plot(foo$y-bar$y) 
      

      【讨论】:

      • @Joran - 感谢清理。 DWin 提出了一个很好的观点:默认情况下,density 使用 512 个点,但是如果您使用网格或者 data1 和 data2 的范围不同,您需要确保 foo$x 和 bar$x 是 "对齐”。
      • 我(非常)稍微编辑了您的答案,以帮助您避免被标记。我也对初学者感到沮丧,但这个首字母缩略词会以错误的方式惹恼人们,并且在这里通常不受欢迎。
      • 感谢您的洞察力。我读过 ?density,但我想我对 R 语法不够熟悉,无法正确使用它告诉我的内容。学习过程的所有部分!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多