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 "linear","polynomial", "logit", "log", "loglog", "cloglog", "SIP". See ‘Details’ below. Default is link = "linear".

Details

The available links are:

linear:

g(x) = ax, for a real.

polynomial:

g(x) = ax^b, for a and b 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, with a \in \{0,1\} and b 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

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 ⁠function(mu)⁠ g(\mu)

linkinv

Inverse link function ⁠function(eta)⁠ g^{-1}(eta)

linkdif

Derivative ⁠function(mu)⁠ d\eta/d\mu

mu.eta

Derivative ⁠function(eta)⁠ d\mu/d\eta

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)


[Package BTSR version 1.0.0 Index]