Nothing
# linkfun
.p <- function(link, q, ...)
link$linkinv(q = q, ...)
.q <- function(link, p, ...)
link$link(p = p, ...)
.d <- function(link, x, ...)
link$dlinkinv(x = x, ...)
.dd <- function(link, x, ...)
link$ddlinkinv(x = x, ...)
.ddd <- function(link, x, ...)
link$dddlinkinv(x = x, ...)
.dd2d <- function(link, x, ...)
link$dd2dlinkinv(x = x, ...)
linkfun <- function(alias,
model,
parm,
link,
linkinv,
dlinkinv,
ddlinkinv,
...) {
ret <- list(alias = alias,
model = model,
parm = parm,
link = link,
linkinv = linkinv,
dlinkinv = dlinkinv,
ddlinkinv = ddlinkinv)
if (is.null(ret$dd2d))
ret$dd2d <- function(x)
ret$ddlinkinv(x) / ret$dlinkinv(x)
ret <- c(ret, list(...))
class(ret) <- "linkfun"
ret
}
# logit
logit <- function()
linkfun(alias = c("Wilcoxon", "Kruskal-Wallis"),
model = "proportional odds",
parm = "log-odds ratio",
link = qlogis,
linkinv = plogis,
dlinkinv = dlogis,
ddlinkinv = function(x) {
p <- plogis(x)
p * (1 - p)^2 - p^2 * (1 - p)
},
dddlinkinv = function(x) {
ex <- exp(x)
ifelse(is.finite(x), (ex - 4 * ex^2 + ex^3) / (1 + ex)^4, 0.0)
},
dd2d = function(x) {
ex <- exp(x)
(1 - ex) / (1 + ex)
},
parm2PI = function(x) {
OR <- exp(x)
ret <- OR * (OR - 1 - x)/(OR - 1)^2
ret[abs(x) < .Machine$double.eps] <- 0.5
return(ret)
},
PI2parm = function(p) {
f <- function(x, PI)
x + (exp(-x) * (PI + exp(2 * x) * (PI - 1) + exp(x)* (1 - 2 * PI)))
ret <- sapply(p, function(p)
uniroot(f, PI = p, interval = 50 * c(-1, 1))$root)
return(ret)
},
parm2OVL = function(x) 2 * plogis(-abs(x / 2))
)
# probit
probit <- function()
linkfun(alias = "van der Waerden normal scores",
model = "latent normal shift",
parm = "generalised Cohen's d",
link = qnorm,
linkinv = pnorm,
dlinkinv = dnorm,
ddlinkinv = function(x)
ifelse(is.finite(x), -dnorm(x = x) * x, 0.0),
dddlinkinv = function(x)
ifelse(is.finite(x), dnorm(x = x) * (x^2 - 1), 0.0),
dd2d = function(x) -x,
parm2PI = function(x) pnorm(x, sd = sqrt(2)),
PI2parm = function(p) qnorm(p, sd = sqrt(2)),
parm2OVL = function(x) 2 * pnorm(-abs(x / 2))
)
# cloglog
cloglog <- function()
linkfun(alias = "Savage",
model = "proportional hazards",
parm = "log-hazard ratio",
link = function(p, log.p = FALSE) {
if (log.p) p <- exp(p)
log(-log1p(- p))
},
linkinv = function(q, lower.tail = TRUE, log.p = FALSE) {
### p = 1 - exp(-exp(q))
ret <- exp(-exp(q))
if (log.p) {
if (lower.tail)
return(log1p(-ret))
return(-exp(q))
}
if (lower.tail)
return(-expm1(-exp(q)))
return(ret)
},
dlinkinv = function(x)
ifelse(is.finite(x), exp(x - exp(x)), 0.0),
ddlinkinv = function(x) {
ex <- exp(x)
ifelse(is.finite(x), (ex - ex^2) / exp(ex), 0.0)
},
dddlinkinv = function(x) {
ex <- exp(x)
ifelse(is.finite(x), (ex - 3*ex^2 + ex^3) / exp(ex), 0.0)
},
dd2d = function(x)
-expm1(x),
parm2PI = plogis,
PI2parm = qlogis,
parm2OVL = function(x) {
x <- abs(x)
ret <- exp(x / (exp(-x) - 1)) - exp(-x / (exp(x) - 1)) + 1
ret[abs(x) < .Machine$double.eps] <- 1
x[] <- ret
return(x)
}
)
# loglog
loglog <- function()
linkfun(alias = "Lehmann",
model = "Lehmann",
parm = "log-reverse time hazard ratio",
link = function(p, log.p = FALSE) {
if (!log.p) p <- log(p)
-log(-p)
},
linkinv = function(q, lower.tail = TRUE, log.p = FALSE) {
### p = exp(-exp(-q))
if (log.p) {
if (lower.tail)
return(-exp(-q))
return(log1p(-exp(-exp(-q))))
}
if (lower.tail)
return(exp(-exp(-q)))
-expm1(-exp(-q))
},
dlinkinv = function(x)
ifelse(is.finite(x), exp(- x - exp(-x)), 0.0),
ddlinkinv = function(x) {
ex <- exp(-x)
ifelse(is.finite(x), exp(-ex - x) * (ex - 1.0), 0.0)
},
dddlinkinv = function(x) {
ex <- exp(-x)
ifelse(is.finite(x), exp(-x - ex) * (ex - 1)^2 - exp(-ex - 2 * x), 0.0)
},
dd2d = function(x)
expm1(-x),
parm2PI = plogis,
PI2parm = qlogis,
parm2OVL = function(x) {
x <- abs(x)
rt <- exp(-x / (exp(x) - 1))
ret <- rt^exp(x) + 1 - rt
ret[abs(x) < .Machine$double.eps] <- 1
x[] <- ret
return(x)
}
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.