在 scipy 中计算多元正态分布

问题描述 投票:0回答:1

嗨,我正在尝试评估多元正态分布,以获得 $z_{1} \in (1, +2.178)$ 和 $z_{2} \in (2.178, \infty)$ 的概率。分布的均值为零,所有方差均为 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))

在 scipy 中我正在尝试:

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 左右的值。我怎样才能正确地做到这一点?

r scipy statistics normal-distribution
1个回答
0
投票

您可以使用

lower_limit
 方法的 
multivariate_normal.cdf
参数来计算具有角
lower_limit
x
(第一个位置参数)的超矩形内的 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
© www.soinside.com 2019 - 2024. All rights reserved.