link.btsr {BTSR} | R Documentation |
Create a Link for BTSR models
Description
Given the name of a link, this function returns a link function, an inverse
link function, the derivative d\eta/d\mu
and the derivative
d\mu/d\eta
.
Usage
link.btsr(link = "linear")
Arguments
link |
character; one of |
Details
The available links are:
linear
:g(x) = ax
, fora
real.polynomial
:g(x) = ax^b
, fora
andb
real.logit
:g(x) = \log((x-l)/(u-x))
log
:g(x) = \log(x - l)
loglog
:g(x) = \log(-\log((x-l)/(u - l)))
cloglog
:g(x) = \log(-\log(1-(x-l)/(u - l)))
SIP
(Shifted Inverse Power):g(x) = 1/(a+x)^b
, witha \in \{0,1\}
andb
real.
Here l
and u
denote the lower and upper bounds of x
. The
linear link is a particular case of the polynomial link. It was kept for
compatibility with older versions of the package.
The parameters a
, b
, l
, and u
are configured using
the configs.linkg
list, which can include the following elements
-
ctt
: A constant multiplier for the link function (default: 1). -
power
: The power parameter for polynomial and SIP links (default: 1). -
lower
: The lower bound formu
(default: 0). -
upper
: The upper bound formu
(default: 1).
This list must be passed to the functions created by link.btsr
, when
invoking them.
Value
An object of class "link-btsr"
, a list with components
linkfun |
Link function |
linkinv |
Inverse link function |
linkdif |
Derivative |
mu.eta |
Derivative |
name |
a name to be used for the link |
Examples
#---------------------------------------------
# 0 < y < 1 and linear link
#---------------------------------------------
mylink <- link.btsr("linear")
y <- 0.8
a <- 3.4
gy <- a * y
# comparing the expected result with the output of the function:
mylink$linkfun(mu = y, configs.linkg = list(ctt = a))
gy
mylink$linkinv(eta = gy, configs.linkg = list(ctt = a))
y
mylink$diflink(mu = y, configs.linkg = list(ctt = a))
a
mylink$mu.eta(eta = gy, configs.linkg = list(ctt = a))
1 / a
# same function, different ctt:
mylink$linkfun(mu = y, configs.linkg = list(ctt = a + 1))
#---------------------------------------------
# For linear link bounds have no effect
#---------------------------------------------
mylink <- link.btsr("linear")
y <- 0.8
a <- 3.4
gy <- a * y
mylink$linkfun(mu = y, configs.linkg = list(ctt = a, lower = 1, upper = 2))
mylink$linkfun(mu = y, configs.linkg = list(ctt = a)) # same result
gy
mylink$linkinv(eta = gy, configs.linkg = list(ctt = a, lower = 1, upper = 2))
y
mylink$diflink(mu = y, configs.linkg = list(ctt = a, lower = 1, upper = 2))
a
mylink$mu.eta(eta = gy, configs.linkg = list(ctt = a, lower = 1, upper = 2))
1 / a
#---------------------------------------------
# 0 < y < 1 and logit link
#---------------------------------------------
mylink <- link.btsr("logit")
y <- 0.8
gy <- log(y / (1 - y))
ginv <- 1 / (1 + exp(-gy))
mylink$linkfun(mu = y)
gy
mylink$linkinv(eta = gy)
ginv
mylink$diflink(mu = y)
1 / (y - y**2)
mylink$mu.eta(eta = gy)
ginv - ginv**2
#---------------------------------------------
# 1 < y < 2 and logit link
#---------------------------------------------
mylink <- link.btsr("logit")
a <- 1
b <- 2
y <- 1.8
gy <- log((y - a) / (b - y))
ginv <- b / (1 + exp(-gy)) + a / (1 + exp(gy))
mylink$linkfun(mu = y, configs.linkg = list(lower = 1, upper = 2))
gy
mylink$linkinv(eta = gy, configs.linkg = list(lower = 1, upper = 2))
ginv
mylink$diflink(mu = y, configs.linkg = list(lower = 1, upper = 2))
(b - a) / ((a + b) * y - y**2 - a * b)
mylink$mu.eta(eta = gy, configs.linkg = list(lower = 1, upper = 2))
((a + b) * ginv - ginv**2 - a * b) / (b - a)