R语言pmvnorm函数参数理解及特定概率计算问题咨询
关于mvtnorm包pmvnorm函数的参数理解与修正写法
1. 参数lower/upper的正确理解
你的理解完全正确:lower和upper是与变量维度长度一致的向量,每个元素对应单个变量的上下限。以二元正态场景为例:
- 计算
P(X ≤ x, Y ≤ y)时,X的取值范围是-Inf到x,Y的取值范围是-Inf到y,正确代码应为:
注意R语言中无穷大的正确写法是pmvnorm(lower = c(-Inf, -Inf), upper = c(x, y), mean = c(0, 0), corr = cor_mat)-Inf(大写I),小写-inf会被识别为未定义变量,可能引发隐性错误。
2. 计算P(x₂ < X ≤ x₁, Y ≤ y)的正确写法
你得到大于1的结果,大概率是两个原因导致:
x₂ > x₁,使得X的区间上限小于下限,函数返回不合理的计算结果;- 误用小写
-inf,引发变量未定义的隐性错误。
正确写法需满足两个前提:
- 确保
x₂ < x₁(若x₂ > x₁,该概率直接为0); - 严格使用
-Inf表示负无穷,且每个维度的下限≤上限。
对应的正确代码:
# 先判断区间合理性,避免无效计算 if (x2 > x1) { cat("概率为0,因为x2 > x1") } else { pmvnorm(lower = c(x2, -Inf), upper = c(x1, y), mean = c(0, 0), corr = cor_mat) }
额外补充:mean参数建议显式写成二元向量c(0,0)(函数虽支持广播,但显式写法更清晰);corr参数必须是2x2的正定相关矩阵,否则也可能出现计算异常。
内容的提问来源于stack exchange,提问作者fredi96
相关产品推荐
相关产品推荐

