计算连续密度图下的面积

5

我使用以下方法绘制了两条密度曲线:

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)

我希望计算给定平均位置范围下每个曲线下的面积,有点像正态曲线的pnorm。有什么想法吗?

2个回答

11

先分别计算密度并绘制该图进行起始。然后,您可以使用基本算术方法来获得估计值。积分通过添加一组小正方形的面积来近似。我使用平均方法进行计算。长度是两个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)

这将为您提供小数点后三位的较好近似值。如果您知道密度函数,请查看?integrate


5

有三种可能性:

logspline包提供了一种不同的估计密度曲线的方法,但它包括了用于结果的pnorm风格函数。

您还可以通过将density函数返回的x和y变量提供给approxfun函数,并将结果与integrate函数一起使用来近似计算面积。除非您对小尾部区域(或非常小的间隔)的精确估计感兴趣,否则这通常会给出合理的近似值。

密度估计只是以数据为中心的核之和,其中一种核就是正态分布。您可以平均从pnorm(或其他核)得到的面积,并用带宽定义的标准差居中于您的数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接