blomCOP | R Documentation |
Compute the Blomqvist Beta \beta_\mathbf{C}
of a copula (Nelsen, 2006, p. 182), which is defined at the middle or center of \mathcal{I}^2
as
\beta_\mathbf{C} = 4\times\mathbf{C}\biggl(\frac{1}{2},\frac{1}{2}\biggr) - 1\mbox{,}
where the u = v = 1/2
and thus shows that \beta_\mathbf{C}
is based on the median joint probability. The Blomqvist Beta is also called the medial correlation coefficient. Nelsen also reports that “although, the Blomqvist Beta depends only on the copula only through its value at the center of \mathcal{I}^2
, but that [\beta_\mathbf{C}
] nevertheless often provides an accurate approximation to both Spearman Rho rhoCOP
and Kendall Tau tauCOP
.” Kendall Tau \tau_\mathbf{C}
, Gini Gamma \gamma_\mathbf{C}
, and Spearman Rho \rho_\mathbf{C}
in relation to \beta_\mathbf{C}
satisfy the following inequalities (Nelsen, 2006, exer. 5.17, p. 185):
\frac{1}{4}(1 + \beta_\mathbf{C})^2 - 1 \le \tau_\mathbf{C} \le 1 - \frac{1}{4}(1 - \beta_\mathbf{C})^2\mbox{,}
\frac{3}{16}(1 + \beta_\mathbf{C})^3 - 1 \le \rho_\mathbf{C} \le 1 - \frac{3}{16}(1 - \beta_\mathbf{C})^3\mbox{, and}
\frac{3}{8}(1 + \beta_\mathbf{C})^2 - 1 \le \tau_\mathbf{C} \le 1 - \frac{3}{8}(1 - \beta_\mathbf{C})^2\mbox{.}
A curious aside (Joe, 2014, p. 164) about the Gaussian copula is that Blomqvist Beta is equal to Kendall Tau (tauCOP
): \beta_\mathbf{C} = \tau_\mathbf{C}
(see Note in med.regressCOP
for a demonstration). Finally, a version of Blomqvist Beta defined outside the median is provided by blomCOPss
.
blomCOP(cop=NULL, para=NULL, as.sample=FALSE,
ctype=c("joe", "weibull", "hazen", "1/n",
"bernstein", "checkerboard"), ...)
cop |
A copula function; |
para |
Vector of parameters or other data structure, if needed, to pass to the copula; |
as.sample |
A logical controlling whether an optional R |
ctype |
Argument of the same as |
... |
Additional arguments to pass to the copula or down to |
The value for \beta_\mathbf{C}
or sample \hat\beta_n
is returned.
The sample \hat\beta_n
is most efficiently computed (Joe, 2014, p. 57) by
\hat\beta_n = \frac{2}{n} \sum_{i=1}^{n} \mathbf{1}\biggl([r_{i1} - (1 + n)/2]\times
[r_{i2} - (1 + n)/2] \ge 0\biggr) -
1\mbox{,}
where r_{i1}, r_{i2}
are the ranks of the data for i = 1, \ldots n
, and \mathbf{1}(.)
is an indicator function scoring 1 if condition is true otherwise zero. However, the Joe sample estimator is not fully consistent (or vice versa) with the various versions of the empirical copula, \mathbf{C}_n
, (EMPIRcop
) (see the last example in Examples). Also, the nature of even and odd sample sizes controls how the median is computed and the issue of samples lying on the median lines in U
and V
(Genest et al., 2013). The argument ctype
supports triggers to the \mathbf{C}_n
in lieu of the Joe sample estimator shown in this documentation.
W.H. Asquith
Genest, C., Carabarín-Aguirre, A., and Harvey, F., 2013, Copula parameter estimation using
Blomqvist's beta: Journal de la Socié
té Française de Statistique, v. 154, no. 1, pp. 5–24.
Joe, H., 2014, Dependence modeling with copulas: Boca Raton, CRC Press, 462 p.
Nelsen, R.B., 2006, An introduction to copulas: New York, Springer, 269 p.
blomCOPss
, blomatrixCOPdec
, blomatrixCOPiqr
,
footCOP
, giniCOP
, hoefCOP
,
rhoCOP
, tauCOP
, wolfCOP
,
joeskewCOP
, uvlmoms
blomCOP(cop=PSP) # 1/3 precisely
## Not run:
# Nelsen (2006, exer. 5.17, p. 185) : All if(...) are TRUE
B <- blomCOP(cop=N4212cop, para=2.2); Bp1 <- 1 + B; Bm1 <- 1 - B
G <- giniCOP(cop=N4212cop, para=2.2); a <- 1/4; b <- 3/16; c <- 3/8
R <- rhoCOP(cop=N4212cop, para=2.2)
K <- tauCOP(cop=N4212cop, para=2.2, brute=TRUE) # numerical issues without brute
if( a*Bp1^2 - 1 <= K & K <= 1 - a*Bm1^2 ) print("TRUE") #
if( b*Bp1^3 - 1 <= R & R <= 1 - b*Bm1^3 ) print("TRUE") #
if( c*Bp1^2 - 1 <= G & G <= 1 - c*Bm1^2 ) print("TRUE") #
## End(Not run)
## Not run:
# A demonstration of a special feature of blomCOP for sample data.
# Joe (2014, p. 60; table 60) has 0.749 for GHcop(tau=0.5); n*var(hatB) as n-->infinity
set.seed(1)
theta <- GHcop(tau=0.5)$para; B <- blomCOP(cop=GHcop, para=theta); n <- 1000
H <- sapply(1:1000, function(i) { # Let us test that with pretty large sample size:
blomCOP(para=rCOP(n=n, cop=GHcop, para=theta), as.sample=TRUE) })
print(n*var(B-H)) # For 1,000 sims of size n : 0.789, nearly matches Joe's result
## End(Not run)
## Not run:
# Joe (2014, p. 57) says that sqrt(n)(B-HatBeta) is Norm(0, 1 - B^2)
set.seed(1)
n <- 10000; B <- blomCOP(cop=PSP) # Beta = 1/3
H <- sapply(1:100, function(i) { message(i,"-", appendLF=FALSE)
blomCOP(para=rCOP(n=n, cop=PSP), as.sample=TRUE) })
lmomco::parnor(lmomco::lmoms(sqrt(n)*(H-B))) # mu = -0.038; sigma = 0.970
# Joe (2014) : sqrt(1-B^2) == standard deviation (sigma) : (1-(1/3)^2) approx 0.973
## End(Not run)
## Not run:
nn <- 200; set.seed(1)
UV <- simCOP(n=nn+1, cop=PSP, graphics=FALSE)
for(n in nn:(nn+1)) {
if(as.logical(n %% 2)) { # in source \ percent \ percent for latex
message("Blomquist Betas for an odd sample size n=", n)
uv <- UV
} else {
message("Blomquist Betas for an even sample size n=", n)
uv <- UV[-(nn+1), ] # remove the last and 'odd' indexed value to make even
}
message(c(" Joe2014: ", blomCOP(as.sample=TRUE, para=uv, ctype="joe" )))
message(c(" Weibull: ", blomCOP(as.sample=TRUE, para=uv, ctype="weibull" )))
message(c(" Hazen: ", blomCOP(as.sample=TRUE, para=uv, ctype="hazen" )))
message(c(" 1/n: ", blomCOP(as.sample=TRUE, para=uv, ctype="1/n" )))
message(c(" Bernstn: ", blomCOP(as.sample=TRUE, para=uv, ctype="bernstein" )))
message(c(" ChckBrd: ", blomCOP(as.sample=TRUE, para=uv, ctype="checkerboard")))
}
# Blomquist Betas for an even sample size n=200
# Joe2014: 0.32
# Weibull: 0.32
# Hazen: 0.32
# 1/n: 0.32
# Bernstn: 0.323671819423416
# ChckBrd: 0.32
# Blomquist Betas for an odd sample size n=201
# Joe2014: 0.323383084577114
# Weibull: 0.333333333333333
# Hazen: 0.333333333333333
# 1/n: 0.293532338308458
# Bernstn: 0.327747577290946
# ChckBrd: 0.313432835820896 #
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.