ladder: Draw a "ladder of powers" plot, plotting each of several... In HH: Statistical Analysis and Data Display: Heiberger and Holland

Description

Draw a "ladder of powers" plot, plotting each of several powers of y against the same powers of x. The powers are

`result <- data.frame(-1/x, -1/sqrt(x), log(x), sqrt(x), x, x^2)`

`names(result) <- c(-1, -.5, 0, .5, 1, 2)`

Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42``` ```ladder(formula.in, data=NULL, main.in="Ladders of Powers", panel.in=panel.cartesian, xlab=deparse(formula.in[[3]]), ylab=deparse(formula.in[[2]]), scales=list(alternating=FALSE, labels=FALSE, ticks=FALSE, cex=.6), par.strip.text=list(cex=.6), cex=.5, pch=16, between=list(x=.3, y=.3), dsx=xlab, dsy=ylab, ladder.function=ladder.f, strip.number=2, strip.names, strip.style=1, strip, oma=c(0,0,0,0), ## S-Plus axis3.line=.61, layout=c(length(tmp\$x.power), length(tmp\$y.power)), axis.key.padding = 10, ## R right axis key.axis.padding = 10, ## R top axis useOuter=TRUE, ## R useOuterStrips(combineLimits(result)) ...) ladder3(x, y, dsx=deparse(substitute(x)), dsy=deparse(substitute(y)), ladder.function=ladder.f) ladder.f(x, name.prefix="") ladder.fstar(x, name.prefix="") strip.ladder(which.given, which.panel, var.name, factor.levels, shingle.intervals, par.strip.text=trellis.par.get("add.text"), strip.names=c(TRUE,TRUE), style=1, ...) ```

Arguments

 `formula.in` A formula with exactly one variable on each side. `data` data.frame `main.in` `main` title for `xyplot` `panel.in` `panel.cartesian` has many arguments in addition to the arguments in `panel.xyplot`. Any replacement panel function must have those argument names, even if it doesn't do anything with them. `xlab, ylab` Trellis arguments, default to right- and left-sides of the `formula.in`. `strip` Strip function. Our default is `strip.ladder` (see below). The other viable argument value is `FALSE`. `cex, pch, between, scales, layout` arguments for `xyplot`. `dsx, dsy` Names to be used as level names in `ladder.function` for the generated factor distinguishing the powers. They default to `xlab, ylab`. For long variable names, an abbreviated name here will decrease clutter in the ladder of powers plot. These names are not visible in the plot when `strip=FALSE`. `ladder.function` function to use to create data.frame of powers of input variable. `name.prefix` Base name used for column names of powers. The default is empty (`""`). An alternative must include the power symbol `"^"`, for example, `"abc^"`. `strip.number` Number of strip labels in each panel of the display. 0: no strip labels; 1: one strip label of the form `y^p ~ x^q`; 2: two strip labels of the form `ylab: y^p` and `xlab: x^q`, where `p` and `q` are the powers returned by `ladders`; `y` and `x` are the arguments `dsy` and `dsx`. `useOuter` logical, defaults to `TRUE`. In R, this implies that `strip.number` is forced to `2` and that the resulting `"trellis"` object will be sent through `useOuterStrips(combineLimits(result))`. This argument is ignored by S-Plus. `strip.style` `style` argument to `strip`. `oma` argument to `par` in S-Plus. `...` other arguments to `xyplot`. `axis3.line` extra space to make the top axis align with the top of the top row of panels. Trial and error to choose a good value. `axis.key.padding` Extra space on right of set of panels in R. `key.axis.padding` Extra space on top of set of panels in R.
 `x, y` variables.
 ```which.given, which.panel, var.name, factor.levels, shingle.intervals, par.strip.text``` See `strip.default`. `strip.names, style` We always print the `strip.names` in `style=1`. Multicolored styles are too busy.

Details

The `ladder` function uses `panel.cartesian` which is defined differently in R (using grid graphics) and S-Plus (using traditional graphics). Therefore the fine control over appearance uses different arguments or different values for the same arguments.

Value

`ladder` returns a `"trellis"` object.

The functions `ladder.fstar` and `ladder.f` take an input vector `x` of non-negative values and construct a data.frame by taking the input to the powers `c(-1, -.5, 0, .5, 1, 2)`, one column per power. `ladder.f` uses the simple powers and `ladder.fstar` uses the scaled Box–Cox transformation.

 `ladder.fstar` `ladder.fstar` notation `(x^p - 1)/p` `(x^p - 1)/p` p `(1/x - 1)/(-1)` `(1/x - 1)/(-1)` -1.0 `(1/sqrt(x)-1)/(-.5)` `(1/sqrt(x)-1)/(-.5)` -0.5 `log(x)` `log(x)` 0.0 `((sqrt(x)-1)/.5)` `((sqrt(x)-1)/.5)` 0.5 `x-1` `x-1` 1.0 `(x^2 - 1)/2` `(x^2 - 1)/2` 2.0

`ladder3` takes two vectors as arguments. It returns a `data.frame` with five columns:

`X, Y`: data to be plotted. The column `X` contains the data from the input `x` taken to all the powers and aligned with the similarly expanded column `Y`.

`x, y`: symbolic labeling of the power corresponding to `X,Y`.

`group`: result from pasting the labels in `x, y` with `*` between them.

Author(s)

Richard M. Heiberger <rmh@temple.edu>

References

Heiberger, Richard M. and Holland, Burt (2015). Statistical Analysis and Data Display: An Intermediate Course with Examples in R. Second Edition. Springer-Verlag, New York. https://www.springer.com/us/book/9781493921218

Hoaglin, D.~C., Mosteller, F., and Tukey, J.~W., editors (1983). Understanding Robust and Exploratory Data Analysis. Wiley.

Box, G. E.~P. and Cox, D.~R. (1964). An analysis of transformations. J. Royal Statist Soc B, 26:211–252.

`panel.cartesian`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22``` ```data(tv) ## default ## R: outer strip labels ladder(life.exp ~ ppl.per.phys, data=tv, main="Ladder of Powers for Life Expectancy and People per Physician") ## Not run: ## one strip label ladder(life.exp ~ ppl.per.phys, data=tv, strip.number=1, useOuter=FALSE, dsx="ppp", dsy="le") ## two strip labels ladder(life.exp ~ ppl.per.phys, data=tv, strip.number=2, useOuter=FALSE) ## outer strip labels ladder(life.exp ~ ppl.per.phys, data=tv, useOuter=TRUE) ## no strip labels (probably silly, but possible) ladder(life.exp ~ ppl.per.phys, data=tv, strip.number=0, useOuter=FALSE) ## End(Not run) ```