Fisher's Z Link Function
fisherzlink.RdComputes the Fisher Z transformation, including its inverse and the first two derivatives.
Usage
fisherzlink(theta, bminvalue = NULL, bmaxvalue = NULL,
inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE)Arguments
- theta
Numeric or character. See below for further details.
- bminvalue, bmaxvalue
Optional boundary values. Values of
thetawhich are less than or equal to \(-1\) can be replaced bybminvaluebefore computing the link function value. Values ofthetawhich are greater than or equal to \(1\) can be replaced bybmaxvaluebefore computing the link function value. SeeLinks.- inverse, deriv, short, tag
Details at
Links.
Details
The fisherz link function is commonly used for
parameters that
lie between \(-1\) and \(1\).
Numerical values of theta close
to \(-1\) or \(1\) or
out of range result in
Inf, -Inf, NA or NaN.
Value
For deriv = 0,
0.5 * log((1+theta)/(1-theta))
(same as atanh(theta))
when inverse = FALSE,
and if inverse = TRUE then
(exp(2*theta)-1)/(exp(2*theta)+1)
(same as tanh(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 e.
References
McCullagh, P. and Nelder, J. A. (1989). Generalized Linear Models, 2nd ed. London: Chapman & Hall.
Note
Numerical instability may occur when theta
is close to \(-1\) or
\(1\).
One way of overcoming this is to use,
e.g., bminvalue.
The link function rhobitlink is
very similar to fisherzlink,
e.g., just twice the value of fisherzlink.
This link function may be renamed to atanhlink
in the near future.
Examples
theta <- seq(-0.99, 0.99, by = 0.01)
y <- fisherzlink(theta)
if (FALSE) plot(theta, y, type = "l", las = 1, ylab = "",
main = "fisherzlink(theta)", col = "blue")
abline(v = (-1):1, h = 0, lty = 2, col = "gray") # \dontrun{}
#> Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...): plot.new has not been called yet
x <- c(seq(-1.02, -0.98, by = 0.01), seq(0.97, 1.02, by = 0.01))
fisherzlink(x) # Has NAs
#> [1] NaN NaN -Inf -2.646652 -2.297560 2.092296 2.297560
#> [8] 2.646652 Inf NaN NaN
fisherzlink(x, bminvalue = -1 + .Machine$double.eps,
bmaxvalue = 1 - .Machine$double.eps) # Has no NAs
#> [1] -18.368400 -18.368400 -18.368400 -2.646652 -2.297560 2.092296
#> [7] 2.297560 2.646652 18.368400 18.368400 18.368400