使用 R 中的 Copula 计算条件分布

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

我有三个随机变量

X
Z
Y
,并且我知道它们的分布函数
F(X)
F(Z)
F(Y)
。然而,它们之间的依赖结构尚不清楚。我想计算给定
F(Y|X)
F(X|Y)
X
的条件分布
Z
Y

我使用 R 中的

copula
gamlss.dist
包来生成 theta=2 的 Gumbel copula 并创建多元分布 (
mvdc
)。下面的代码片段使用生成的联结函数生成特定概率:

pacman::p_load(copula, gamlss.dist)

# Generate Gumbel copula with theta=2
thetaVal <- 2
copula <- gumbelCopula(thetaVal, dim = 3)

copPre <- mvdc(copula, c("SHASH", "norm", "norm"),
               list(
                 list(mu = 46, sigma = 5, nu = 2, tau = 1),  # X SHASH
                 list(mean = 46, sd = 1),                      # Y normal
                 list(mean = 23, sd = 1)))                     # Z normal

pMvdc(c(47, 45, 22), copPre)

最后一行代码给出了

(X ≤ 47),(Y ≤ 45), and (Z ≤ 22)
的概率。 我想要使用为
F(Y|X)
F(X|Y)
X
提供的值以及 copula 模型计算条件分布
Z
Y
的指导。

预先感谢您的协助!

r probability copula
1个回答
0
投票

要获得像

Pr(X <= x | Y <= y)
这样的条件概率,您可以使用公式
Pr(X <= x, Y <= y) / Pr(Y <= y)
:

library(copula)
library(gamlss.dist)


# Generate Gumbel copula with theta=2
thetaVal <- 2
copula <- gumbelCopula(thetaVal, dim = 3)

copPre <- mvdc(copula, c("SHASH", "norm", "norm"),
               list(
                 list(mu = 46, sigma = 5, nu = 2, tau = 1),  # X SHASH
                 list(mean = 46, sd = 1),                      # Y normal
                 list(mean = 23, sd = 1)))                     # Z normal

pMvdc(c(47, 45, 22), copPre)

# Pr(X <= x | Y <= 45)
x <- 50
pMvdc(c(x, 45, Inf), copPre) / pnorm(45, 46, 1)
# or:
pMvdc(c(x, 45, Inf), copPre) / pMvdc(c(Inf, 45, Inf), copPre)
© www.soinside.com 2019 - 2024. All rights reserved.