I have read the Q&A, and Consultation Paper, Article 26, p. 47-48.

I tried to fit a t-copula. I have found the coefficients rho.1 and df and their standard errors.

df1 <- as.data.frame(log_returns.x)
df2 <- as.data.frame(log_returns.y)

df = cbind(df1, df2)

t.cop <- tCopula(dim=2)
m <- pobs(as.matrix(df))
fit <- fitCopula(t.cop, m, method='ml')

coef(fit, SE=TRUE)
#        Estimate  Std. Error
# rho.1  0.7872817  0.02087726
# df    13.3784644 13.40797859

Unfortunately, I don't know how to interpret the coefficient df and its standard error (i think it has very large value). I'd like to do the goodness-of-fit test. I have tried

t.copula <- tCopula(dim=2, coef(fit)[1], df=coef(fit)[2]) 

But in my case df is not integer. I tried to pass the integer value (df=13, df=3) instead of df=coef(fit)[2], and setup df.fixed = TRUE then the p_value and rho.1 were found.

t.copula <- tCopula(dim=2, coef(fit)[1], df=13, df.fixed = TRUE) 
gofCopula(t.copula, rCopula(n, df= 13, t.copula))

# Parametric bootstrap-based goodness-of-fit test of t-copula, dim. d = 2, with 'method'="Sn", 'estim.method'="mpl":

# data:  x
# statistic = 0.016998, parameter.rho.1 = 0.76115, p-value = 0.3891

# There were 18 warnings (use warnings() to see them)

gofCopula(t.copula, u, df=3, N=100)
#Parametric bootstrap-based goodness-of-fit test of t-copula, dim. d = 2, with
#        'method'="Sn", 'estim.method'="mpl":

# data:  x
# statistic = 0.012264, parameter.rho.1 = 0.79267, p-value = 0.8465

My questions are:

a) How to interpret the value of standard error Std.Error=13.40797859?

b) How to specify the parameter df in order to pass it into the goodness-of-fit test?


I'm reading the presentation on copula by E. Zivot and try to understand how to use the estimated parameter, df (degree of freedom). In the presentation, I have seen the estimated df.hat equal to 3.199 (slide 32), later the estimated df is 3.5657 (slide 43) and its standard error is NA. In both cases df aren't the integer.

I have tried the proposed approach in the presentation and setup the start values and lower, upper boundaries:

# fit with t-copula
t.cop <- tCopula(param=0.5, dim=2, df=3) 
start.vals = c(0.5, 3)
names(start.vals) = c("rho.1","df")
fit2 = fitCopula(copula=t.cop, 
                         lower=c(-0.99, 2),
                         upper=c(0.99, 10)) # 10 is upper limit of df
coef(fit2, SE=TRUE)
#       Estimate Std. Error
#rho.1  0.785996 0.02546891
#df    10.000000         NA

In this case, the upper limit of df was obtained and Std. Error is NA. The parameter df is very important in determining the shape of the distribution. As df increases, the t-copula tends to a gaussian copula. See the example here.

I can apply the round() function and pass the integer value of df:

t.copula <- tCopula(dim=2, coef(fit)[1], df=round(df)) 

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.