r - 使用 ggplot2 显示平滑(卷积)密度

标签 r ggplot2

我试图在 ggplot2 中显示一些与高斯核卷积的频率。我尝试用以下方法平滑线条:

+ stat_smooth(se = F,method = "lm", formula = y ~ poly(x, 24))

没有成功。

我读到一篇文章建议频率应与高斯核进行卷积。 ggplot2 的 stat_密度函数 ( http://docs.ggplot2.org/current/stat_density.html ) 似乎能够生成。

但是,我似乎无法用 stat_密度替换我的几何图形。我的代码有什么问题吗?

require(reshape2)
library(ggplot2)
library(RColorBrewer)

fileName = "/1.csv" # downloadable there: https://www.dropbox.com/s/l5j7ckmm5s9lo8j/1.csv?dl=0

mydata = read.csv(fileName,sep=",", header=TRUE)

dataM = melt(mydata,c("bins"))

myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))

ggplot(data=dataM,
aes(x=bins, y=value, colour=variable)) +
geom_line() + scale_x_continuous(limits = c(0, 2))

此代码生成以下图:

enter image description here

我正在考虑稍微平滑一下线条,所以它们看起来更像这样:

enter image description here

(来自 http://journal.frontiersin.org/Journal/10.3389/fncom.2013.00189/full )

最佳答案

既然我的评论解决了您的问题,我会将它们转换为答案:

密度函数进行单独测量并通过卷积计算核密度分布(高斯是默认核)。例如,绘图(密度(rnorm(1000)))。您可以使用bw(带宽)参数控制平滑度。例如,plot(密度(rnorm(1000),bw=0.01))

但是您的数据框已经是密度分布(类似于密度函数的输出)。要生成更平滑的密度估计,您需要从基础数据开始,对其运行密度,调整 bw 以获得所需的平滑度。

如果您无法访问基础数据,您可以平滑现有的密度分布,如下所示:

ggplot(data=dataM, aes(x=bins, y=value, colour=variable)) + 
          geom_smooth(se=FALSE, span=0.3) + 
          scale_x_continuous(limits = c(0, 2)). 

使用 span 参数来获得您想要的平滑度。

关于r - 使用 ggplot2 显示平滑(卷积)密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127699/

相关文章:

r - 计算 R 中来自不同数据帧的两列之间的相关性

r - R 和 Hadoop 有关系吗?

r - 下拉菜单未在 Shiny 的 tabPanel 中扩展

r - 进行 Tobit 回归时的奇异性错误

r - 将 stat_binhex() 与 ggpairs() 结合使用

r - mtcars ggplot 不知道如何处理数字类

r - 在 R 脚本中定义编码?

r - 显示每个方面而不是整体的摘要行

r - 如何将数据系列规范化为起始值 = 0?

r - ggplot2:强制为空的二级类别留出空间