FGMcop | R Documentation |
The generalized Farlie–Gumbel–Morgenstern copula (Bekrizade et al., 2012) is
\mathbf{C}_{\Theta, \alpha, n}(u,v) = \mathbf{FGM}(u,v) = uv[1 + \Theta(1-u^\alpha)(1-v^\alpha)]^n\mbox{,}
where \Theta \in [-\mathrm{min}\{1, 1/(n\alpha^2)\}, +1/(n\alpha)]
, \alpha > 0
, and n \in 0,1,2,\cdots
. The copula \Theta = 0
or \alpha = 0
or n = 0
becomes the independence copula (\mathbf{\Pi}(u,v)
; P
). When \alpha = n = 1
, then the well-known, single-parameter Farlie–Gumbel–Morgenstern copula results, and Spearman Rho (rhoCOP
) is \rho_\mathbf{C} = \Theta/3
but in general
\rho_\mathbf{C} = 12\sum_{r=1}^n {n \choose r} \Theta^r \biggl[\frac{\phantom{\alpha}\Gamma(r+1)\Gamma(2/\alpha)}{\alpha\Gamma(r+1+2/\alpha)} \biggr]^2
\mbox{.}
The support of \rho_\mathbf{C}(\cdots;\Theta, 1, 1)
is [-1/3, +1/3]
but extends via \alpha
and n
to \approx [-0.50, +0.43]
, which shows that the generalization of the copula increases the range of dependency. The generalized version is implemented by FGMcop
.
The iterated Farlie–Gumbel–Morgenstern copula (Chine and Benatia, 2017) for the r
th iteration is
\mathbf{C}_{\beta}(u,v) = \mathbf{FGMi}(u,v) = uv + \sum_{j=1}^{r} \beta_j\cdot(uv)^{[j/2]}\cdot(u'v')^{[(j+1)/2]}\mbox{,}
where u' = 1-u
and v' = 1-v
for |\beta_j| \le 1
that has r
dimensions \beta = (\beta_1, \cdots, \beta_j, \cdots, \beta_r)
and [t]
is the integer part of t
. The copula \beta = 0
becomes the independence copula (\mathbf{\Pi}(u,v)
; P
). The support of \rho_\mathbf{C}(\cdots;\beta)
is approximately [-0.43, +0.43]
. The iterated version is implemented by FGMicop
. Internally, the r
is determined from the length of the \beta
in the para
argument.
FGMcop( u, v, para=c(NA, 1,1), ...)
FGMicop(u, v, para=NULL, ...)
u |
Nonexceedance probability |
v |
Nonexceedance probability |
para |
A vector of parameters. For the generalized version, the |
... |
Additional arguments to pass. |
Value(s) for the copula are returned.
W.H. Asquith
Bekrizade, Hakim, Parham, G.A., Zadkarmi, M.R., 2012, The new generalization of Farlie–Gumbel–Morgenstern copulas: Applied Mathematical Sciences, v. 6, no. 71, pp. 3527–3533.
Chine, Amel, and Benatia, Fatah, 2017, Bivariate copulas parameters estimation using the trimmed L-moments methods: Afrika Statistika, v. 12, no. 1, pp. 1185–1197.
P
, mleCOP
## Not run:
# Bekrizade et al. (2012, table 1) report for a=2 and n=3 that range in
# theta = [-0.1667, 0.1667] and range in rho = [-0.1806641, 0.4036458]. However,
# we see that they have seemingly made an error in listing the lower bounds of theta:
rhoCOP(FGMcop, para=c( 1/6, 2, 3)) # 0.4036458
rhoCOP(FGMcop, para=c( -1/6, 2, 3)) # Following error results
# In cop(u, v, para = para, ...) : parameter Theta < -0.0833333333333333
rhoCOP(FGMcop, para=c(-1/12, 2, 3)) # -0.1806641
## End(Not run)
## Not run:
# Support of FGMrcop(): first for r=1 iterations and then for large r.
sapply(c(-1, 1), function(t) rhoCOP(cop=FGMrcop, para=rep(t, 1)) )
# [1] -0.3333333 0.3333333
sapply(c(-1, 1), function(t) rhoCOP(cop=FGMrcop, para=rep(t,50)) )
# [1] -0.4341385 0.4341385
## End(Not run)
## Not run:
# Maximum likelihood estimation near theta upper bounds for a=3 and n=2.
set.seed(832)
UV <- simCOP(300, cop=FGMcop, para=c(+0.16, 3, 2))
# Define a transform function for parameter domain, though mleCOP does
# provide some robustness anyway---not forcing n into the positive
# domain via as.integer(exp(p[3])) seems to not always be needed.
FGMpfunc <- function(p) {
d <- p[1]; a <- exp(p[2]); n <- as.integer(exp(p[3]))
lwr <- -min(c(1,1/(n*a^2))); upr <- 1/(n*a)
d <- ifelse(d <= lwr, lwr, ifelse(d >= upr, upr, d))
return( c(d, a, n) )
}
para <- c(0.16, 3, 2); init <- c(0, 1, 1)
ML <- mleCOP(UV$U, UV$V, cop=FGMcop, init.para=init, parafn=FGMpfunc)
print(ML$para) # [1] 0.1596361 3.1321228 2.0000000
# So, we have recovered reasonable estimates of the three parameters
# given through MLE estimation.
densityCOPplot(cop=FGMcop, para= para, contour.col=2)
densityCOPplot(cop=FGMcop, para=ML$para, ploton=FALSE) #
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.