在双变量椭圆中的观察

时间:2013-07-12 22:56:32

标签: r

enter image description here我正在尝试找到一个点位于椭圆内的概率? 例如,如果我在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))

感谢您的帮助。

1 个答案:

答案 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