Learn R Programming

VGAM (version 0.8-4.1)

golf: Gamma-Ordinal Link Function

Description

Computes the gamma-ordinal transformation, including its inverse and the first two derivatives.

Usage

golf(theta, earg = list(lambda = 1), inverse = FALSE, deriv = 0,
     short = TRUE, tag = FALSE)

Arguments

theta
Numeric or character. See below for further details.
earg
Extra argument for passing in additional information. This must be list with component lambda. Here, lambda is the shape parameter in gamma2. A component in the list called
inverse
Logical. If TRUE the inverse function is computed.
deriv
Order of the derivative. Integer with value 0, 1 or 2.
short
Used for labelling the blurb slot of a vglmff-class object.
tag
Used for labelling the linear/additive predictor in the initialize slot of a vglmff-class object. Contains a little more information if TRUE.

Value

  • See Yee (2007) for details.

Warning

Prediction may not work on vglm or vgam etc. objects if this link function is used.

Details

The gamma-ordinal link function (GOLF) can be applied to a parameter lying in the unit interval. Its purpose is to link cumulative probabilities associated with an ordinal response coming from an underlying 2-parameter gamma distribution.

The arguments short and tag are used only if theta is character.

See Links for general information about VGAM link functions.

References

Yee, T. W. (2007) Ordinal ordination with normalizing link functions for count data, (in preparation).

See Also

Links, gamma2, polf, nbolf, cumulative.

Examples

Run this code
earg = list(lambda=1)
golf("p", earg=earg, short=FALSE)
golf("p", earg=earg, tag=TRUE)

p = seq(0.02, 0.98, len=201)
y = golf(p, earg=earg)
y. = golf(p, earg=earg, deriv=1)
max(abs(golf(y, earg=earg, inv=TRUE) - p)) # Should be 0

par(mfrow=c(2,1), las=1)
plot(p, y, type="l", col="blue", main="golf()")
abline(h=0, v=0.5, col="red", lty="dashed")

plot(p, y., type="l", col="blue",
     main="(Reciprocal of) first GOLF derivative")


# Another example
gdata = data.frame(x2 = sort(runif(nn <- 1000)))
gdata = transform(gdata, x3 = runif(nn))
gdata = transform(gdata, mymu = exp( 3 + 1 * x2 - 2 * x3))
lambda = 4
gdata = transform(gdata, y1 = rgamma(nn, shape=lambda, scale=mymu/lambda))
cutpoints = c(-Inf, 10, 20, Inf)
gdata = transform(gdata, cuty = Cut(y1, breaks=cutpoints))
par(mfrow=c(1,1), las=1)
with(gdata, plot(x2, x3, col=cuty, pch=as.character(cuty)))
with(gdata, table(cuty) / sum(table(cuty)))
fit = vglm(cuty ~ x2 + x3, fam = cumulative(link="golf",
           reverse=TRUE, parallel=TRUE, intercept.apply=TRUE,
           mv=TRUE, earg=list(cutpoint=cutpoints[2:3], lambda=lambda)),
           gdata, trace=TRUE)
head(fit@y)
head(fitted(fit))
head(predict(fit))
coef(fit)
coef(fit, matrix=TRUE)
constraints(fit)
fit@misc$earg

Run the code above in your browser using DataLab