Purpose
Simulate a copula with some specific parameters and then estimate the params using a copula

> set.seed(1977)
> library(scatterplot3d)
> library(copula)
> gaus.cop <- ellipCopula(family = "normal", dim = 2, dispstr = "ex",
+     param = 0.2)
> gaus.mvdc <- mvdc(copula = gaus.cop, margins = c("norm", "norm"),
+     paramMargins = list(list(mean = 0, sd = 2), list(mean = 0,
+         sd = 3)))
> contour(gaus.mvdc, dmvdc, xlim = c(-8, 8), ylim = c(-8, 8), main = paste("Marginal gaussian (rho) = ",
+     0.2))

CopulaEstimation-001.jpg

Estimate the copula parameters

> n <- 500
> dat <- rmvdc(gaus.mvdc, n)
> mm <- apply(dat, 2, mean)
> vv <- apply(dat, 2, var)
> corr <- cor(dat[, 1], dat[, 2])
> fit <- fitMvdc(dat, gaus.mvdc, start = c(mm[1], vv[1], mm[2],
+     vv[2], corr))
> print(fit)
The Maximum Likelihood estimation is based on  500  observations.
Margin  1 :
          Estimate Std. Error
m1.mean -0.0870828 0.09170276
m1.sd    2.0505380 0.06484346
Margin  2 :
           Estimate Std. Error
m2.mean -0.01427850 0.13933827
m2.sd    3.11570712 0.09852853
Copula:
       Estimate Std. Error
rho.1 0.2247160 0.04246269
The maximized loglikelihood is  -2333.254
The convergence code is  0 see ?optim.

Estimate the parameters using IFM method

> loglik.marg <- function(b, x) {
+     return(sum(dnorm(x, b[1], b[2], log = T)))
+ }
> b1hat <- optim(c(0, 1), fn = loglik.marg, x = dat[, 1], control = list(fnscale = -1))$par
> b2hat <- optim(c(0, 1), fn = loglik.marg, x = dat[, 2], control = list(fnscale = -1))$par
> udat <- cbind(pnorm(dat[, 1], b1hat[1], b2hat[2]), pnorm(dat[,
+     2], b2hat[1], b2hat[2]))

Inference Functions for Margins

> u <- udat
> fit.ifl <- fitCopula(gaus.cop, u, start = c(0.1), method = "ml")
> print(fit.ifl)
The estimation method is  Maximum Likelihood  based on  500  observations.
       Estimate Std. Error  z value     Pr(>|z|)
rho.1 0.3069664 0.05124425 5.990261 2.095050e-09
The maximized loglikelihood is  12.53464
The convergence code is  0

Canonical Maximum Likelihood Method

> u1 <- apply(dat, 2, rank)/(n + 1)
> fit.ifl <- fitCopula(gaus.cop, u1, start = c(0.1), method = "ml")
> print(fit.ifl)
The estimation method is  Maximum Likelihood  based on  500  observations.
       Estimate Std. Error  z value     Pr(>|z|)
rho.1 0.2237456 0.04224145 5.296827 1.178323e-07
The maximized loglikelihood is  12.33080
The convergence code is  0

The only purpose of running this fitCopula is to get an idea of running the function