2012-01-10 82 views
1

是否有简单的方法来绘制两个概率密度函数之间的差异?两个密度图之间的差异

我可以在同一个图上绘制我的数据集(都是具有大约11000个值的一维向量)的pdf,以获得重叠/差异的想法,但如果我可以对它更有用看到一个差异的阴谋。

沿东西线以下的(尽管这显然是不工作):

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

我是比较新的R和一直无法找到我寻找任何的论坛。

在此先感谢

回答

4

这应该工作:

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时没有采取这一步骤的错误。太糟糕了,我不记得正确的论点。

+0

感谢您的帮助 – 2012-01-10 19:26:15

1

它看起来像你需要花一点时间来学习如何使用R(或任何其他语言,对于这个问题)。帮助文件是你的朋友。 从输出?density

值[即由该函数返回的数据]

如果give.Rkern为真,则数R(K),以其他方式与类 ,其基本结构是一个包含 以下组分的列表中的“密度”的对象。

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

y估计的密度值。这些都将是不可否定的,但可以 为零

所以[ “价值” 为简洁起见删除的剩余部分],做:

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

@Joran - 感谢您的清理。而DWin提供了一个很好的观点:默认情况下,'density'使用512点,但是如果你使用网格或者data1和data2的范围不同,你需要确保foo $ x和bar $ x是“对齐“。 – 2012-01-10 19:18:49

+4

我编辑你的答案(非常),以帮助你避免被标记。我也对初学者感到沮丧,但这个缩写词可能会以错误的方式揉搓人,并且通常在这里受到折磨。 – joran 2012-01-10 19:19:02

+1

感谢您的洞察力。我读过密度,但我想我对R语法不够熟悉,无法正确使用它告诉我的内容。学习过程的所有部分! – 2012-01-10 19:21:14