realdata = https://www.dropbox.com/s/pc5tp2lfhafgaiy/realdata.txt
模拟= https://www.dropbox.com/s/5ep95808xg7bon3/simulation.txt
使用带宽= 1.5的此数据的密度图给出了以下图表:
prealdata = scan("realdata.txt")
simulation = scan("simulation.txt")
plot(density(log10(realdata), bw=1.5))
lines(density(log10(simulation), bw=1.5), lty=2)
但是使用ggplot2绘制相同的数据,带宽参数(adjust)似乎工作方式不同。为什么呢?
vec1 = data.frame(x=log10(realdata))
vec2 = data.frame(x=log10(simulation))
require(ggplot2)
ggplot() +
geom_density(aes(x=x, linetype="real data"), data=vec1, adjust=1.5) +
geom_density(aes(x=x, linetype="simulation"), data=vec2, adjust=1.5) +
scale_linetype_manual(name="data", values=c("real data"="solid", "simulation"="dashed"))
非常欢迎有关如何更好地平滑此数据的建议!
答案 0 :(得分:6)
adjust=
与bw=
不同。当你绘制
plot(density(log10(realdata), bw=1.5))
lines(density(log10(simulation), bw=1.5), lty=2)
你得到与ggplot
无论出于何种原因,ggplot
都不允许您指定bw=
参数。默认情况下,density
使用bw.nrd0()
,因此当您使用基本图形更改此图时,您无法使用ggplot
更改此值。但是使用的是adjust*bw
。因为我们知道如何计算默认bw
,我们可以重新计算adjust=
以使用相同的值。
#helper function
bw<-function(b, x) { b/bw.nrd0(x) }
require(ggplot2)
ggplot() +
geom_density(aes(x=x, linetype="real data"), data=vec1, adjust=bw(1.5, vec1$x)) +
geom_density(aes(x=x, linetype="simulation"), data=vec2, adjust=bw(1.5, vec2$x)) +
scale_linetype_manual(name="data",
values=c("real data"="solid", "simulation"="dashed"))
导致
与基本图形图相同。