我正在尝试找到一个点位于椭圆内的概率? 例如,如果我在95%椭圆体区域中绘制300个数据集的双变量数据(x,y),我该如何计算300个点中有多少次我的点落入 椭圆?
继承我正在使用的代码
library(MASS)
seed<-1234
x<-NULL
k<-1
Sigma2 <- matrix(c(.72,.57,.57,.46),2,2)
Sigma2
rho <- Sigma2[1,2]/sqrt(Sigma2[1,1]*Sigma2[2,2])
rho
eta1<-replicate(300,mvrnorm(k, mu=c(-1.59,-2.44), Sigma2))
library(car)
dataEllipse(eta1[1,],eta1[2,], levels=c(0.05, 0.95))
感谢您的帮助。
答案 0 :(得分:5)
我不明白为什么人们会跳过OP。在上下文中,它显然是一个编程问题:它是关于在给定椭圆内获得数据点的经验频率,而不是理论概率。 OP甚至发布了代码和图表,显示了他们试图获取的内容。
可能他们并不完全理解95%椭圆背后的统计理论,但他们并没有提出这个问题。此外,制作情节并计算这样的频率是掌握理论的绝佳方式。
无论如何,这里有一些代码可以回答狭义的问题,即如何计算通过正态分布获得的椭圆内的点(这是dataEllipse
的基础)。我们的想法是通过主成分将数据转换为单位圆,然后得到原点半径范围内的点。
within.ellipse <- function(x, y, plot.ellipse=TRUE)
{
if(missing(y) && is.matrix(x) && ncol(x) == 2)
{
y <- x[,2]
x <- x[,1]
}
if(plot.ellipse)
dataEllipse(x, y, levels=0.95)
d <- scale(prcomp(cbind(x, y), scale.=TRUE)$x)
rad <- sqrt(2 * qf(.95, 2, nrow(d) - 1))
mean(sqrt(d[,1]^2 + d[,2]^2) < rad)
}
还评论说,95%的数据椭圆按定义包含95%的数据。这肯定不是真的,至少对于正常理论椭圆来说是这样。如果您的分布特别糟糕,随着样本量的增加,覆盖频率甚至可能无法收敛到假定的水平。考虑一般化的帕累托分布,例如:
library(evd) # for rgpd
# generalised pareto has no variance for shape > 0.5
z <- sapply(1:1000, function(...) within.ellipse(rgpd(100, shape=5), rgpd(100, shape=5), FALSE))
mean(z)
[[1] 0.97451
z <- sapply(1:1000, function(...) within.ellipse(rgpd(10000, shape=5), rgpd(10000, shape=5), FALSE))
mean(z)
[1] 0.9995808