semicorCOP | R Documentation |
Compute the lower semi-correlations (bottom-left)
\rho^{N{-}{-}}_\mathbf{C}(u,v; a) = \rho_N^{{-}{-}}(a) \mbox{ and}
compute the upper semi-correlations (top-right)
\rho^{N{+}{+}}_\mathbf{C}(u,v; a) = \rho_N^{{+}{+}}(a)
of a copula \mathbf{C}(u,v)
(Joe, 2014, p. 73) using numerical simulation. The semi-correlations are defined as
\rho_N^{{-}{-}}(a) = \mathrm{cor}[Z_1, Z_2 \mid Z_1 < -a, Z_2 < -a]\mbox{,}
\rho_N^{{+}{+}}(a) = \mathrm{cor}[Z_1, Z_2 \mid Z_1 > +a, Z_2 > +a]\mbox{,\ and}
\rho_N(a > -\infty) = \mathrm{cor}[Z_1, Z_2]\mbox{,}
where \mathrm{cor[z_1, z_2]}
is the familiar Pearson correlation function, which is in R the syntax cor(...,
method="pearson")
, parameter a \ge 0
is a truncation point that identifies truncated tail regions (Joe, 2014, p. 73), and lastly (Z_1, Z_2) \sim \mathbf{C}(\Phi, \Phi)
and thus from the standard normal distribution (Z_1, Z_2) = (\Phi^{-1}(u), \Phi^{-1}(v))
where the random variables (U,V) \sim \mathbf{C}
.
The semi-correlations are extended for the copBasic package into bottom right and top left versions as well by
\rho_N^{{+}{-}}(a) = \mathrm{cor}[Z_1, Z_2 \mid Z_1 > +a, Z_2 < -a]\mbox{,\ and}
\rho_N^{{-}{+}}(a) = \mathrm{cor}[Z_1, Z_2 \mid Z_1 < -a, Z_2 > +a]\mbox{.}
As a result, the notations {-}{-}
, {+}{+}
, {+}{-}
, and {-}{+}
can be used to represent each of the respective corners bottom-left, top-right, bottom-right, and top-left of the (u,v)
domain with the respective truncation. These words are used in the variable names of the returned list from the function.
semicorCOP(cop=NULL, para=NULL, truncation=0, n=0, as.sample=FALSE, ...)
cop |
A copula function; |
para |
Vector of parameters or other data structure, if needed, to pass to the copula; |
truncation |
The truncation value for |
n |
The sample size |
as.sample |
A logical controlling whether an optional |
... |
Additional arguments to pass to the copula. |
The value(s) for \rho_N
, \rho_N^{{-}{-}}
, \rho_N^{{+}{+}}
, \rho_N^{{+}{-}}
, and \rho_N^{{-}{+}}
are returned.
The sample semi-correlations can be computed from a two-column table that is passed into the function using the para
argument. Although the truncation point a \ge 0
, as a
increases and focus is increasingly made into one or the other truncated tail regions, the sample version with data becomes decreasing well estimated because the available sample size diminishes. The para
argument can contain probabilities or raw data because internally the function computes the Hazen plotting positions (e.g. u_i = (i-0.5) / n
for rank i
and sample size n
) because Joe (2014, pp. 9, 17, 245, 247–248) repeatedly emphasizes this form of plotting position when normal scores are involved.
W.H. Asquith
Joe, H., 2014, Dependence modeling with copulas: Boca Raton, CRC Press, 462 p.
giniCOP
, rhoCOP
, tauCOP
, COP
## Not run:
# Gumbel-Hougaard copula with Pearson rhoN = 0.4 (by definition)
run <- sapply(1:50, function(i) semicorCOP(cop=GHcop, para=1.350, n=600))
mean(unlist(run[1,])) # cor.normal.scores
mean(unlist(run[2,])) # botleft.semicor
mean(unlist(run[3,])) # topright.semicor
sd( unlist(run[1,])) # cor.normal.scores (These are our sampling variations
sd( unlist(run[2,])) # botleft.semicor for the n=600 used as a Monte
sd( unlist(run[3,])) # topright.semicor Carlo simulation.)
# The function returns: rhoN = 0.392112, rhoN--= 0.117674, rhoN++= 0.404733
# standard deviations (0.038883) (0.073392) (0.073942)
# Joe (2014, p. 72) shows: rhoN = 0.4_____, rhoN--= 0.132___, rhoN++= 0.415___
# standard deviations (not avail) (0.08____) (0.07____)
# We see alignment with the results of Joe with his n=600. #
## End(Not run)
## Not run:
p <- 0.5 # Reasonable strong positive association for the Raftery copula,
# but then we are going to be reflecting and rotating the copula.
# See similar Example under COP() function.
"RFcop1" <- function(u,v, para) COP(u,v, cop=RFcop, para=para, reflect="1")
"RFcop2" <- function(u,v, para) COP(u,v, cop=RFcop, para=para, reflect="2")
"RFcop3" <- function(u,v, para) COP(u,v, cop=RFcop, para=para, reflect="3")
"RFcop4" <- function(u,v, para) COP(u,v, cop=RFcop, para=para, reflect="4")
RF <- NULL; n <- 10000
RF <- rbind(RF, as.data.frame(semicorCOP(cop=RFcop1, para=p, n=n))[,1:5])
RF <- rbind(RF, as.data.frame(semicorCOP(cop=RFcop2, para=p, n=n))[,1:5])
RF <- rbind(RF, as.data.frame(semicorCOP(cop=RFcop3, para=p, n=n))[,1:5])
RF <- rbind(RF, as.data.frame(semicorCOP(cop=RFcop4, para=p, n=n))[,1:5])
print(RF[,1:3]) # total sample and lower and upper semi-correlations
# cor.normal.scores botleft.semicor topright.semicor
# 1 0.5587837 0.74124686 0.10027641
# 2 0.5567889 0.10302772 0.73729702
# 3 -0.5807201 -0.04683536 -0.01714573 # see near zeros --,++
# 4 -0.5698139 0.03040520 0.05125916 # see near zeros --,++
print(RF[,2:5]) # now look at all four corners
# botleft.semicor topright.semicor topleft.semicor botright.semicor
# 1 0.74124686 0.10027641 0.01529508 0.02046530
# 2 0.10302772 0.73729702 -0.05195628 0.01747874
# 3 -0.04683536 -0.01714573 -0.11106842 -0.74077321
# 4 0.03040520 0.05125916 -0.74516061 -0.07636233
# Notice how the tight tail of the copula, being reflected and rotated
# into each of the four corners, shows semi-correlation magnitude of 0.74.
# See the copula density plots of COP() Examples section.
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.