我需要使用合适的copula找到概率。例如,使用Student t copula。然后使用范围[0,1]上的tsim01
函数生成随机双变量rCopula()
。
根据我的理解,我应该在相应的点tcopula
计算双变量copula函数0< p1, p2<1
的值。
我尝试使用包prob()
中的函数copula
。我设置了p1=0.4
,p2=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
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
是相关系数。