Computes the complementary log-log transformation, including its inverse and the first two derivatives. The complementary log transformation is also computed.
clogloglink(theta, bvalue = NULL, inverse = FALSE, deriv = 0,
short = TRUE, tag = FALSE)
cloglink(theta, bvalue = NULL, inverse = FALSE, deriv = 0,
short = TRUE, tag = FALSE)
For deriv = 0
, the complimentary log-log
of theta
,
i.e., log(-log(1 - theta))
when
inverse = FALSE
, and if
inverse = TRUE
then
1-exp(-exp(theta))
.
For deriv = 1
, then the function returns
d
eta
/ d
theta
as a function of theta
if inverse = FALSE
,
else if inverse = TRUE
then it
returns the reciprocal.
Here, all logarithms are natural logarithms,
i.e., to base
Numeric or character. See below for further details.
See Links
for general
information about links.
Details at Links
.
Thomas W. Yee
The complementary log-log link function is
commonly used for parameters
that lie in the unit interval.
But unlike
logitlink
,
probitlink
and
cauchitlink
, this link is not
symmetric.
It is the inverse CDF of the extreme value
(or Gumbel or log-Weibull) distribution.
Numerical values of theta
close to 0 or 1 or out of range result
in Inf
, -Inf
, NA
or
NaN
.
The complementary log link function is
the same as the complementary log-log
but the outer log is omitted.
This link is suitable for lrho
in
betabinomial
because it
handles probability-like parameters but
also allows slight negative values in theory.
In particular, cloglink
safeguards against parameters exceeding unity.
McCullagh, P. and Nelder, J. A. (1989). Generalized Linear Models, 2nd ed. London: Chapman & Hall.
Links
,
logitoffsetlink
,
logitlink
,
probitlink
,
cauchitlink
,
pgumbel
.
p <- seq(0.01, 0.99, by = 0.01)
clogloglink(p)
max(abs(clogloglink(clogloglink(p), inverse = TRUE) - p)) # Should be 0
p <- c(seq(-0.02, 0.02, by = 0.01), seq(0.97, 1.02, by = 0.01))
clogloglink(p) # Has NAs
clogloglink(p, bvalue = .Machine$double.eps) # Has no NAs
if (FALSE) {
p <- seq(0.01, 0.99, by = 0.01)
plot(p, logitlink(p), type = "l", col = "limegreen", lwd = 2, las = 1,
main = "Some probability link functions", ylab = "transformation")
lines(p, probitlink(p), col = "purple", lwd = 2)
lines(p, clogloglink(p), col = "chocolate", lwd = 2)
lines(p, cauchitlink(p), col = "tan", lwd = 2)
abline(v = 0.5, h = 0, lty = "dashed")
legend(0.1, 4, c("logitlink", "probitlink", "clogloglink", "cauchitlink"),
col = c("limegreen", "purple", "chocolate", "tan"), lwd = 2)
}
if (FALSE) {
# This example shows that clogloglink is preferred over logitlink
n <- 500; p <- 5; S <- 3; Rank <- 1 # Species packing model:
mydata <- rcqo(n, p, S, eq.tol = TRUE, es.opt = TRUE, eq.max = TRUE,
family = "binomial", hi.abundance = 5, seed = 123,
Rank = Rank)
fitc <- cqo(attr(mydata, "formula"), I.tol = TRUE, data = mydata,
fam = binomialff(multiple.responses = TRUE, link = "cloglog"),
Rank = Rank)
fitl <- cqo(attr(mydata, "formula"), I.tol = TRUE, data = mydata,
fam = binomialff(multiple.responses = TRUE, link = "logitlink"),
Rank = Rank)
# Compare the fitted models (cols 1 and 3) with the truth (col 2)
cbind(concoef(fitc), attr(mydata, "concoefficients"), concoef(fitl))
}
Run the code above in your browser using DataLab