I tried to fit a t-copula. I have found the coefficients
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), df=coef(fit))
But in my case
df is not integer. I tried to pass the integer value (
df=3) instead of
df=coef(fit), and setup
df.fixed = TRUE then the
rho.1 were found.
t.copula <- tCopula(dim=2, coef(fit), 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
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, data=m, method="mpl", start=start.vals, optim.method="L-BFGS-B", 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
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
t.copula <- tCopula(dim=2, coef(fit), df=round(df))