dat*_*oda 4 curve r area ggplot2
我用这个绘制了两条密度曲线:
Network <- Mydf$Networks
quartiles <- quantile(Mydf$Avg.Position, probs=c(25,50,75)/100)
density <- ggplot(Mydf, aes(x = Avg.Position, fill = Network))
d <- density + geom_density(alpha = 0.2) + xlim(1,11) + opts(title = "September 2010") + geom_vline(xintercept = quartiles, colour = "red")
print(d)
Run Code Online (Sandbox Code Playgroud)
我想为给定的Avg.Position范围计算每条曲线下的面积.有点像普通曲线的pnorm.有任何想法吗?
Jor*_*eys 10
单独计算密度并绘制一个开始的密度.然后你可以使用基本的算术来获得估计.通过将一组小方块的面积相加来近似积分.我使用均值方法.长度是两个x值之间的差值,高度是间隔开始和结束时y值的平均值.我在zoo包中使用rollmeans函数,但这也可以使用基本包来完成.
require(zoo)
X <- rnorm(100)
# calculate the density and check the plot
Y <- density(X) # see ?density for parameters
plot(Y$x,Y$y, type="l") #can use ggplot for this too
# set an Avg.position value
Avg.pos <- 1
# construct lengths and heights
xt <- diff(Y$x[Y$x<Avg.pos])
yt <- rollmean(Y$y[Y$x<Avg.pos],2)
# This gives you the area
sum(xt*yt)
Run Code Online (Sandbox Code Playgroud)
这为您提供了小数字后面最多3位数的良好近似值.如果你知道密度函数,请看一下?integrate
三种可能性:
logspline 包提供了一种不同的估计密度曲线的方法,但它确实包含结果的 pnorm 样式函数。
您还可以通过将密度函数返回的 x 和 y 变量输入到 approxfun 函数并将结果与Integrate 函数一起使用来近似面积。除非您对小尾部区域(或非常小的间隔)的精确估计感兴趣,否则这可能会给出合理的近似值。
密度估计只是以数据为中心的核的总和,这样的核就是正态分布。您可以使用由带宽定义并以数据为中心的 sd 对 pnorm(或其他内核)的面积进行平均。