如果我计算两个向量的2d密度表面,如下例所示:
library(MASS)
a <- rnorm(1000)
b <- rnorm(1000, sd=2)
f1 <- kde2d(a, b, n = 100)
我得到以下表面
filled.contour(f1)
z值是估计的密度。
我现在的问题是:是否可以计算单个点的概率,例如: a = 1,b = -4
[因为我不是统计学家,这可能是错误的措辞。对不起。我想知道 - 如果这是可能的 - 一个点出现的概率。]
感谢您的每一条评论!
答案 0 :(得分:5)
如果指定区域,则该区域具有相对于密度函数的概率。当然,单个点不具有与零不同的概率。但它在那时确实具有非零密度。那是什么?
当正常面积测量值变为零时,密度是在该区域上积分的概率密度除以正常面积测量值的积分极限。 (实际上很难说正确,需要几次尝试,但仍然不是最佳的。)
这一切都是基本的微积分。编写一个例程来计算该区域密度的积分也相当容易,尽管我认为MASS有标准的方法来使用更复杂的集成技术。这是我根据你的例子拼凑的快速例程:
library(MASS)
n <- 100
a <- rnorm(1000)
b <- rnorm(1000, sd=2)
f1 <- kde2d(a, b, n = 100)
lims <- c(min(a),max(a),min(b),max(b))
filled.contour(f1)
prob <- function(f,xmin,xmax,ymin,ymax,n,lims){
ixmin <- max( 1, n*(xmin-lims[1])/(lims[2]-lims[1]) )
ixmax <- min( n, n*(xmax-lims[1])/(lims[2]-lims[1]) )
iymin <- max( 1, n*(ymin-lims[3])/(lims[4]-lims[3]) )
iymax <- min( n, n*(ymax-lims[3])/(lims[4]-lims[3]) )
avg <- mean(f$z[ixmin:ixmax,iymin:iymax])
probval <- (xmax-xmin)*(ymax-ymin)*avg
return(probval)
}
prob(f1,0.5,1.5,-4.5,-3.5,n,lims)
# [1] 0.004788993
prob(f1,-1,1,-1,1,n,lims)
# [1] 0.2224353
prob(f1,-2,2,-2,2,n,lims)
# [1] 0.5916984
prob(f1,0,1,-1,1,n,lims)
# [1] 0.119455
prob(f1,1,2,-1,1,n,lims)
# [1] 0.05093696
prob(f1,-3,3,-3,3,n,lims)
# [1] 0.8080565
lims
# [1] -3.081773 4.767588 -5.496468 7.040882
警告,例行公事似乎是正确的并且给出了合理的答案,但它没有经历任何接近我将为生产函数提供的审查。
答案 1 :(得分:3)
这里的z值被称为“概率密度”而不是“概率”。正如评论所指出的那样,如果你想要一个估计的概率,你需要整合估计的密度来找到估计表面下的体积。
但是,如果您想要的是特定点的概率密度,那么您可以使用:
kde2d(a, b, n=1, lims=c(1, 1, -4, -4))$z[1,1]
# [1] 0.006056323
这将计算1x1“网格”,其中包含您想要的单个密度估计值。
确认其有效的情节:
z0 <- kde2d(a, b, n=1, lims=c(1, 1, -4, -4))$z[1,1]
filled.contour(
f1,
plot.axes = {
contour(f1, levels=z0, add=TRUE)
abline(v=1, lty=3)
abline(h=-4, lty=3)
axis(1); axis(2)
}
)