r - 二元正态分布的离散近似

标签 r statistics distribution normal-distribution

我想对二元正态分布进行离散近似。也就是说,我想计算一个矩阵,其中每个条目是落入下图小方块之一的概率。

enter image description here

这是我到目前为止所做的。

library(mvtnorm)
library(graphics)

euclide = function(x,y){sqrt(x^2+y^2)}
maxdist = 40
sigma = diag(2)
m = matrix(0,ncol=maxdist*2 + 1, nrow=maxdist*2 + 1)
for (row in -maxdist:maxdist){
    for (col in -maxdist:maxdist){
        if ( euclide(abs(row), abs(col)) < maxdist ){
            lower = c(row-0.5, col-0.5)
            upper = c(row+0.5, col+0.5)
            p = pmvnorm(lower = lower , upper = upper, mean = c(0,0), sigma = sigma)    
        } else {
            p = 0
        }
        m[row + maxdist + 1,col + maxdist + 1] = p
    }
}
m = m[rowSums(m)!=0,colSums(m)!=0]
contour(m, levels = exp(-20:0), xlim=c(0.3,0.7), ylim=c(0.3,0.7))

enter image description here

它工作正常。虽然它很慢(对于大型 maxdist ),但我希望改善其计算时间。但这不是我的主要问题......

主要问题是,使用我的方法,我无法更改靠近中心的小方块的数量以更好地接近均值。我只能在周围添加正方形。换句话说,我希望能够设置二元正态分布的两个轴的方差。

最佳答案

我不是 R 人,但我确信正态分布有一个 CDF 函数。如果你想要的是从字面上描述落入每个方块的概率矩阵,我们可以使用这个 CDF 函数来得到答案。由于 2D 正态分布具有独立的边际分布,因此这里的问题只是针对轴位置 [x_left, x_right] 和 [y_left, y_right] 描述的每个正方形提出 2 个问题:

  • 一维正态随机变量在区间 [x_left, x_right] 中的概率是多少?
  • 另一个独立的一维正态随机变量在区间 [y_left, y_right] 中的概率是多少?

  • 由于两者是独立的,平方的全概率为:
    P = (CDF(x_right) - CDF(x_left))*(CDF(y_right) - CDF(y_left))
    

    这是一个准确的答案,所以计算时间应该不是问题!

    编辑:我还应该说,您可以选择每个轴上有更多刻度接近零的网格,以获得您想要的分辨率。上述每个方格的概率公式仍然成立。

    关于r - 二元正态分布的离散近似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216151/

    相关文章:

    r - Shiny - 在数据表中选择记录时如何突出显示传单 map 上的对象?

    statistics - 了解归一化平方欧氏距离吗?

    r - 在 R 中拟合三参数对数正态分布

    python - 在seaborn中可视化直方图

    java - 如何分发 Java 应用程序

    r - 如何在 Shiny 中使用 rhandsontable 删除列

    r - 修复随机列表中的第一个和最后一个数字

    r - 在 Julia 中链接操作时显式指定参数

    algorithm - 计算机图形学中的核密度估计

    r - 为整数生成数字分区