psych (version 1.0-17)

pairs.panels: SPLOM, histograms and correlations for a data matrix

Description

Adapted from the help page for pairs, pairs.panels shows a scatter plot of matrices (SPLOM), with bivariate scatter plots below the diagonal, histograms on the diagonal, and the Pearson correlation above the diagonal. Useful for descriptive statistics of small data sets.

Usage

pairs.panels(x, y, smooth = TRUE, scale = FALSE, digits = 2, ...)

Arguments

x
a data.frame or matrix
y
an optional data.frame or matrix
smooth
TRUE draws loess smooths
scale
TRUE scales the correlation font by the size of the absolute correlation.
digits
the number of digits to show
...
other options for pairs

Value

  • a scatter plot matrix (SPLOM) is drawn in the graphic window. The lower off diagonal draws scatter plots, the diagonal histograms, the upper off diagonal reports the Pearson correlation (with pairwise deletion).

Details

Shamelessly adapted from the pairs help page. Uses panel.cor, panel.cor.scale, and panel.hist, all taken from the help pages for pairs.

See Also

pairs

Examples

Run this code
#pairs.panels(attitude)   #see the graphics window

## The function is currently defined as
function (x, y, smooth = TRUE, scale = FALSE, digits = 2, ...) 
{
    if (smooth) {
        if (scale) {
            pairs(x, diag.panel = panel.hist, upper.panel = panel.cor.scale, 
                lower.panel = panel.smooth, ...)
        }
        else {
            pairs(x, diag.panel = panel.hist, upper.panel = panel.cor, 
                lower.panel = panel.smooth, ...)
        }
    }
    else {
        if (scale) {
            pairs(x, diag.panel = panel.hist, upper.panel = panel.cor.scale, 
                ...)
        }
        else {
            pairs(x, diag.panel = panel.hist, upper.panel = panel.cor, 
                ...)
        }
    }
  }
  
  #
  ## The function is currently defined as
"panel.cor" 
function(x, y, digits=2, prefix="", cex.cor)
     {
         usr <- par("usr"); on.exit(par(usr))
         par(usr = c(0, 1, 0, 1))
         r = (cor(x, y,use="pairwise"))
         txt <- format(c(round(r,digits), 0.123456789), digits=digits)[1]
         txt <- paste(prefix, txt, sep="")
         if(missing(cex.cor)) cex <- 0.8/strwidth(txt)
         text(0.5, 0.5, txt, cex = cex )
     }
     
 ## The function is currently defined as
 "panel.cor.scale" 
function(x, y, digits=2, prefix="", cex.cor)
     {
         usr <- par("usr"); on.exit(par(usr))
         par(usr = c(0, 1, 0, 1))
         r = (cor(x, y,use="pairwise"))
         txt <- format(c(r, 0.123456789), digits=digits)[1]
         txt <- paste(prefix, txt, sep="")
         if(missing(cex.cor)) cex <- 0.8/strwidth(txt)
         text(0.5, 0.5, txt, cex = cex * abs(r))
     }
 "panel.hist"    
 function(x, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...)
  }

Run the code above in your browser using DataCamp Workspace