You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带高斯边缘分布的Copula等高线图绘制异常:输出与预期不符求助

问题分析与解决

你的核心问题是混淆了Copula密度和带高斯边缘的联合分布密度:

  • 直接调用dCopula计算的是Copula本身的密度,其定义域是[0,1]×[0,1],所以你得到的图是Copula密度的等高线,和你期望的联合正态分布密度图完全不同。
  • 你想要的是通过Copula连接高斯边缘后的联合分布密度,需要把Copula和边缘分布结合起来计算。

修正后的代码

library(copula)
library(mvtnorm)

# 1. 创建正态Copula
norm_cop <- normalCopula(0.7)

# 2. 定义联合分布:Copula + 高斯边缘分布
joint_dist <- mvdc(norm_cop, margins = c("norm", "norm"),
                   paramMargins = list(list(mean = 0, sd = 1), list(mean = 0, sd = 1)))

# 3. 绘制联合分布的等高线图
contour(joint_dist, dMvdc, n = 200, nlevels = 20, xlim = c(-3, 3), ylim = c(-3, 3))

# 或者直接用mvtnorm绘制联合正态分布(效果一致,因为正态Copula+正态边缘就是联合正态)
x <- seq(-3, 3, length.out = 200)
y <- seq(-3, 3, length.out = 200)
z <- outer(x, y, function(a, b) dmvnorm(cbind(a, b), sigma = matrix(c(1, 0.7, 0.7, 1), ncol = 2)))
contour(x, y, z, nlevels = 20)

代码说明

  • mvdc函数用来构建由Copula和边缘分布组成的多元分布,这里边缘选标准正态分布。
  • dMvdc是多元分布的密度函数,用它来绘制等高线,就能得到你期望的类似二维正态分布的等高线图。
  • 另外,由于正态Copula搭配正态边缘就是标准的二维联合正态分布,所以也可以直接用mvtnorm包的dmvnorm直接计算并绘图,结果完全一致。

内容的提问来源于stack exchange,提问作者TPQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:09:55