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

如何用Copula函数与边缘分布表示联合PDF/CDF(R语言实现)

在R中通过Copula函数构造联合PDF与CDF

核心原理

联合概率密度函数(PDF)的计算公式为:
联合PDF = Copula密度函数(在边缘CDF处的取值) × 各边缘PDF的乘积

联合累积分布函数(CDF)则是通过Copula函数将边缘CDF结合得到:
联合CDF = Copula分布函数(输入为各边缘CDF)


实现步骤与代码

1. 加载依赖包

R中处理Copula常用copula包,若未安装先执行安装命令:

install.packages("copula")
library(copula)

2. 定义边缘分布参数

沿用你提供的二维正态边缘参数:

mux <- c(3, 4)    # 边缘均值
sigmax <- c(1, 1) # 边缘标准差
x <- mux          # 待计算联合分布的点

3. 创建Gaussian Copula对象

指定Copula类型为Gaussian,相关系数参数为0.5:

# 构造二维Gaussian Copula,相关系数矩阵为[[1, 0.5], [0.5, 1]]
gauss_cop <- normalCopula(param = 0.5, dim = 2)

4. 构造联合分布(Copula + 边缘分布)

将Copula与两个正态边缘分布组合成联合分布对象:

mvd <- mvdc(
  copula = gauss_cop,
  margins = c("norm", "norm"),  # 两个边缘均为正态分布
  paramMargins = list(
    list(mean = mux[1], sd = sigmax[1]),  # 第一个边缘的参数
    list(mean = mux[2], sd = sigmax[2])   # 第二个边缘的参数
  )
)

5. 计算联合CDF与PDF

直接使用copula包的函数计算:

# 计算联合CDF
joint_cdf <- pmvdc(x, mvd)

# 计算联合PDF
joint_pdf <- dmvdc(x, mvd)

6. 手动验证联合PDF(对应公式原理)

你可以手动拆解计算过程,验证结果一致性:

# 计算边缘CDF与PDF(和你提供的代码一致)
cdfx <- c(pnorm(x[1], mux[1], sigmax[1]), pnorm(x[2], mux[2], sigmax[2]))
pdfx <- c(dnorm(x[1], mux[1], sigmax[1]), dnorm(x[2], mux[2], sigmax[2]))

# 计算Copula在边缘CDF处的密度值
cop_density <- dCopula(cdfx, gauss_cop)

# 手动计算联合PDF
joint_pdf_manual <- cop_density * prod(pdfx)

7. 与直接多元正态分布结果对比

由于Gaussian Copula+正态边缘等价于多元正态分布,可通过mvtnorm包验证:

install.packages("mvtnorm")
library(mvtnorm)

# 构造多元正态协方差矩阵
cov_mat <- matrix(
  c(sigmax[1]^2, 0.5*sigmax[1]*sigmax[2],
    0.5*sigmax[1]*sigmax[2], sigmax[2]^2),
  nrow = 2
)

# 直接计算多元正态PDF
joint_pdf_mvtnorm <- dmvnorm(x, mean = mux, sigma = cov_mat)

上述三种方式得到的joint_pdf、joint_pdf_manual、joint_pdf_mvtnorm结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:04:50