Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

rateplot

Functions to plot rates from a table classified by age and calendar time (period)


Description

Produces plots of rates versus age, connected within period or cohort (Aplot), rates versus period connected within age-groups (Pplot) and rates and rates versus date of birth cohort (Cplot). rateplot is a wrapper for these, allowing to produce the four classical displays with a single call.

Usage

rateplot( rates,
          which = c("ap","ac","pa","ca"),
            age = as.numeric( dimnames( rates )[[1]] ),
            per = as.numeric( dimnames( rates )[[2]] ),
           grid = FALSE,
         a.grid = grid,
         p.grid = grid,
         c.grid = grid,
          ygrid = grid,
       col.grid = gray( 0.9 ),
          a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30),
          p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30),
          c.lim = NULL, 
           ylim = range( rates[rates>0], na.rm=TRUE ),
             at = NULL,
         labels = paste( at ),
          a.lab = "Age at diagnosis",
          p.lab = "Date of diagnosis",
          c.lab = "Date of birth",
           ylab = "Rates",
           type = "l",
            lwd = 2,
            lty = 1,
         log.ax = "y",
            las = 1,
            ann = FALSE,
          a.ann = ann,
          p.ann = ann,
          c.ann = ann,
          xannx = 1/20,
        cex.ann = 0.8,
         a.thin = seq( 1, length( age ), 2 ),
         p.thin = seq( 1, length( per ), 2 ),
         c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ),
            col = par( "fg" ),
          a.col = col,
          p.col = col,
          c.col = col,
            ... )

Aplot( rates, age = as.numeric( dimnames( rates )[[1]] ),
       per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE,
       a.grid = grid, ygrid = grid, col.grid = gray( 0.9 ),
       a.lim = range( age, na.rm=TRUE ), ylim = range( rates[rates>0], na.rm=TRUE ),
       at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1],
       ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1,
       col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col,
       c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8,
       c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ),
       p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE,
       c.lines = !p.lines, ... )

Pplot( rates, age = as.numeric( dimnames( rates )[[1]] ),
       per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE,
       p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ),
       p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30),
       ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2],
       ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ),
       type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y",
       las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20,
       a.thin = seq( 1, length( age ), 2 ), ... )

Cplot( rates, age = as.numeric( rownames( rates ) ),
       per = as.numeric( colnames( rates ) ), grid = FALSE,
       c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ),
       c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ),
       at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2],
       ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1,
       col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE,
       cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ...  )

Arguments

rates

A two-dimensional table (or array) with rates to be plotted. It is assumed that the first dimension is age and the second is period.

which

A character vector with elements from c("ap","ac","apc","pa","ca"), indication which plots should be produced. One plot per element is produced. The first letter indicates the x-axis of the plot, the remaining which groups should be connected, i.e. "pa" will plot rates versus period and connect age-classes, and "apc" will plot rates versus age, and connect both periods and cohorts.

age

Numerical vector giving the means of the age-classes. Defaults to the rownames of rates as numeric.

per

Numerical vector giving the means of the periods. Defaults to the columnnames of rates as numeric.

grid

Logical indicating whether a background grid should be drawn.

a.grid

Logical indicating whether a background grid on the age-axis should be drawn. If numerical it indicates the age-coordinates of the grid.

p.grid

do. for the period.

c.grid

do. for the cohort.

ygrid

do. for the rate-dimension.

col.grid

The colour of the grid.

a.lim

Range for the age-axis.

p.lim

Range for the period-axis.

c.lim

Range for the cohort-axis.

ylim

Range for the y-axis (rates).

at

Position of labels on the y-axis (rates).

labels

Labels to put on the y-axis (rates).

a.lab

Text on the age-axis. Defaults to "Age".

p.lab

Text on the period-axis. Defaults to "Date of diagnosis".

c.lab

Text on the cohort-axis. Defaults to "Date of birth".

ylab

Text on the rate-axis. Defaults to the name of the rate-table.

type

How should the curves be plotted. Defaults to "l".

lwd

Width of the lines. Defaults to 2.

lty

Which type of lines should be used. Defaults to 1, a solid line.

log.ax

Character with letters from "apcyr", indicating which axes should be logarithmic. "y" and "r" both refer to the rate scale. Defaults to "y".

las

see par.

ann

Should the curves be annotated?

a.ann

Logical indicating whether age-curves should be annotated.

p.ann

do. for period-curves.

c.ann

do. for cohort-curves.

xannx

The fraction that the x-axis is expanded when curves are annotated.

cex.ann

Expansion factor for characters annotating curves.

a.thin

Vector of integers indicating which of the age-classes should be labelled.

p.thin

do. for the periods.

c.thin

do. for the cohorts.

col

Colours for the curves.

a.col

Colours for the age-curves.

p.col

do. for the period-curves.

c.col

do. for the cohort-curves.

p.lines

Should rates from the same period be connected?

c.lines

Should rates from the same cohort be connected?

...

Additional arguments pssed on to matlines when plotting the curves.

Details

Zero values of the rates are ignored. They are neiter in the plot nor in the calculation of the axis ranges.

Value

NULL. The function is used for its side-effect, the plot.

Author(s)

Bendix Carstensen, Steno Diabetes Center, http://bendixcarstensen.com

See Also

Examples

data( blcaIT )
attach(blcaIT)

# Table of rates:
bl.rate <- tapply( D, list(age,period), sum ) /
           tapply( Y, list(age,period), sum )
bl.rate

# The four classical plots:
par( mfrow=c(2,2) )
rateplot( bl.rate*10^6 )

# The labels on the vertical axis could be nicer:
rateplot( bl.rate*10^6, at=10^(-1:3), labels=c(0.1,1,10,100,1000) ) 

# More bells an whistles
par( mfrow=c(1,3), mar=c(3,3,1,1), oma=c(0,3,0,0), mgp=c(3,1,0)/1.6 )
rateplot( bl.rate*10^6, ylab="", ann=TRUE, which=c("AC","PA","CA"),
                      at=10^(-1:3), labels=c(0.1,1,10,100,1000),
                      col=topo.colors(11), cex.ann=1.2 )

Epi

Statistical Analysis in Epidemiology

v2.44
GPL-2
Authors
Bendix Carstensen [aut, cre], Martyn Plummer [aut], Esa Laara [ctb], Michael Hills [ctb]
Initial release
2021-02-28

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.