嗨,我正试图判断多元正态分布,以得到$z_{1}in(1,+2.178)$和$z_{2}\in(2.178,\inty)$的概率.分布的平均值为零,所有方差为1,协方差为$1/\SQRT(2)$.

R中,我通过以下方式获得正确的结果:

library(mnormt)
sadmvn(lower=c(1, 2.178), upper=c(2.178, Inf), mean=0, varcov=matrix(c(1, 1/sqrt(2), 1/sqrt(2), 1),2, 2))

在西西里,我试图:

from scipy import stats
cov = np.array([[1, 1 / np.sqrt(2)], [1 / np.sqrt(2), 1]])
d = stats.multivariate_normal(mean=np.array([0, 0]), cov=cov)
alpha2 = d.cdf([2.178, np.Inf]) - d.cdf([1, 2.178])

但这给出了大约0.14的结果.我怎样才能正确地做这件事?

推荐答案

您可以使用multivariate_normal.cdf方法的lower_limit参数来计算具有角点lower_limitx(第一个位置参数)的超矩形内的CDF.

import numpy as np
from scipy import stats
cov = np.array([[1, 1 / np.sqrt(2)], [1 / np.sqrt(2), 1]])
d = stats.multivariate_normal(mean=np.array([0, 0]), cov=cov)
d.cdf([2.178, np.inf], lower_limit=[1, 2.178])
# 0.00820893693689204

看起来multivariate_normal中的lower_limitx分别对应于sadmvn中的lowerupper.

最初的方法不起作用的原因是,当调用cdf而不调用lower_limit时,积分的下限被假定为[-np.inf, -np.inf].因此,您的代码计算两个超矩形的CDF之间的差异,每个超矩形的下限为[-np.inf, -np.inf].这个 idea 在1D中有效,但在2+维中,这与从角[1, 2.178]到角[2.178, np.inf]的单个超矩形内的CDF不同.

例如,在下图中,由点A和B定义的矩形内的封闭面积与蓝色和红色矩形的面积之差不同.

enter image description here

R相关问答推荐

卸载安装了BRM的模型发出的警告

获取列中值更改的行号

derrr mutate case_when grepl不能在R中正确返回值

lightgbm发动机在tidymmodels中的L1正则化""

当我们有多个反斜杠和/特殊字符时使用Gsubing

R如何计算现有行的总和以添加新的数据行

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

派生程序包| ;无法检索';return()';的正文

正则表达式在第二个管道和第二个T之后拆分R中的列

停止ggplot将多行减少到一行

R中的类别比较

优化从每个面的栅格中提取值

为什么在写入CSV文件时Purrr::Pwalk不起作用

多元正态分布的计算

使用geom_sf跨越日期线时的闭合边界

为什么将负值向量提升到分数次方会得到NaN

每行不同列上的行求和

在GT()中的列之间添加空格

列间序列生成器的功能

使用nls()函数的非线性模型的半正态图