R语言二维多元正态分布概率计算结果不符的问题求助
二维多元正态分布概率计算的错误修正
错误点说明
- 数值积分逻辑错误:你用
pmvnorm(lower = -Inf, upper = c(2, 3))计算的是$P(X_1 \leq 2, X_2 \leq 3)$的概率,但题目要求的是$P(X_1 > 2, X_2 > 3)$,两者完全相反。 - 结果单位不一致:模拟部分你将结果乘以100转换成了百分比(20.307%),但数值积分结果是原始概率(0-1区间),单位不统一导致看起来结果不匹配。
修正后的代码
library(mvtnorm) # 定义参数 mu <- c(1, 2) Sigma <- matrix(c(9, 5, 5, 36), nrow=2) # 协方差矩阵:sigma1²=9,sigma2²=36,协方差=5 # A) 数值积分求P(X1>2, X2>3) # 正确用法:lower设为(2,3),upper设为Inf,计算右上象限的概率 p_x1_gt_2_and_x2_gt_3 <- pmvnorm(lower = c(2, 3), upper = c(Inf, Inf), mean = mu, sigma = Sigma) cat("数值积分结果(概率):", p_x1_gt_2_and_x2_gt_3, "\n") # B) 模拟法求概率(100000次模拟) set.seed(123) simulated_points <- mvrnorm(100000, mu = mu, Sigma = Sigma) # 计算概率(保持和数值积分一致的单位,不乘以100) prob_gt_2_and_3 <- sum(simulated_points[,1] > 2 & simulated_points[,2] > 3) / nrow(simulated_points) cat("模拟法结果(概率):", prob_gt_2_and_3, "\n")
修正后的结果示例
数值积分结果(概率): 0.2027273 模拟法结果(概率): 0.20307
两者结果已高度一致,误差来自模拟的随机性,增加模拟次数可进一步缩小误差。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

