2010-10-06 70 views
4

下計算的區域我有使用這種兩條密度曲線繪製:連續密度圖

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) 

我想計算對於給定的Avg.Position範圍內的各曲線下的面積。正常曲線的類似pnorm。有任何想法嗎?

回答

10

分別計算密度並繪製一個開始。然後你可以使用基本的算術來得到估計值。通過將一組小方塊的面積相加來近似整合。我使用平均方法。長度是兩個x值之間的差值,高度是間隔開始和結束時y值的平均值。我在動物園包中使用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) 

這給你一個很好的近似值,小數點後面最多3位數。如果知道密度函數,請看?integrate

4

三種可能性:

的logspline包提供了一種估計密度曲線的一種不同的方法,但它確實包括用於結果pnorm樣式的功能。

您也可以通過將由密度函數返回的x和y變量提供給approxfun函數並使用帶有積分函數的結果來近似該區域。除非您對小尾巴區域(或非常小的區間)的精確估計感興趣,否則這可能會給出合理的近似值。

密度估計值只是以數據爲中心的內核的總和,其中一個內核就是正態分佈。您可以將pnorm(或其他內核)中的區域與由帶寬定義的sd進行平均並以數據爲中心。