如何从R中的拟合Copula中找出概率?

时间:2017-04-07 09:40:14

标签: r graph 3d probability-theory

我需要使用合适的copula找到概率。例如,使用Student t copula。然后使用范围[0,1]上的tsim01函数生成随机双变量rCopula()

根据我的理解,我应该在相应的点tcopula计算双变量copula函数0< p1, p2<1的值。

我尝试使用包prob()中的函数copula。我设置了p1=0.4p2=0.7和一些小delta=1e-3的值。因此,我已经确定了小超立方体。概率为0.1036955。 我的例子如下。

library(copula)

rm(list=ls(all=TRUE))
N <- 100
set.seed(1)
df = cbind(as.data.frame(rnorm(N)), 
           as.data.frame(rnorm(N))); 

mymargins      = c("norm", "norm")
myparamMargins = list(list(mean=mean(df[,1]), sd=sd(df[,1])), 
                      list(mean=mean(df[,2]), sd=sd(df[,2])))

# Student t copula

tcopula  <- tCopula(dim=2, dispstr="un", df=2, df.fixed=TRUE) 
tfit     <- fitCopula(tcopula, pobs(as.matrix(df)), method='ml')
trho     <- coef(tfit); 

tcopula <- mvdc(copula=tCopula(trho, dim=2, df=3), 
                    margins=mymargins, 
                    paramMargins=myparamMargins)             

tsim01   <- rCopula(N, tCopula(trho, dim=2, df=3))

p1 <- 0.4; p2 <- 0.7; delta <- 1e-3

prob(tCopula(trho, dim=2, df=3), c(p1, p1+delta), c(p2, p2+delta))
# [1] 0.1036955

enter image description here

par(mfrow=c(1,3))
  persp(tcopula, dMvdc, main="pdf", xlim=c(-2,2), ylim=c(-2,2), 
        xlab="x", ylab="y", zlab="c(x,y)")
  contour(tcopula, dMvdc, main="Contour pdf", xlim=c(-2,2), ylim=c(-2,2),
          xlab="x", ylab="y")
  plot(tsim01, main="tCopula, Simulated values on [0,1]^2", 
       xlab="z1", ylab="z2", pch=16, col="blue")
       abline(h=p2,v=p1)

我是否正确应用了prob()功能?如何使用3D pdf图或等高线图检查答案?

编辑。可能的替代方法是使用a conditional CDF

编辑2。可能的替代方式2是使用分位数变换C(p1,p2)= t_df_trho(t_df_trho ^ -1(p1),t_df_trho ^ -1(p2))。< / p>

p1_new <- qt(p1, df=3) # t_df_trho^-1(p1) is the inverce of t_df_trho()
p2_new <- qt(p2, df=3) # t_df_trho^-1(p2)

但我不知道我应该使用什么函数t_df_trho?函数t_df_trho是双变量Student-t分布函数,df是度自由度,trho是相关系数。

0 个答案:

没有答案