From maechler at stat.math.ethz.ch  Wed Apr 27 15:56:32 2005
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Wed Apr 27 15:56:41 2005
Subject: [Rd] Enhanced version of plot.lm()
In-Reply-To: <17006.5202.986122.321760@stat.math.ethz.ch>
References: <200504251000.j3PA01lD009332@hypatia.math.ethz.ch>
	<40567787fcb17bee0bf9ecf403fb8e21@anu.edu.au>
	<320af97cfe90da4c59b7e9c8cd9956d4@anu.edu.au>
	<9717926f912f9fb045c57dd9be4e743c@warwick.ac.uk>
	<b21d1d1a13e8f82d4e1d44c233e9f76e@anu.edu.au>
	<17006.5202.986122.321760@stat.math.ethz.ch>
Message-ID: <17007.39440.105964.263932@stat.math.ethz.ch>

>>>>> "MM" == Martin Maechler <maechler@stat.math.ethz.ch>
>>>>>     on Tue, 26 Apr 2005 12:13:38 +0200 writes:

>>>>> "JMd" == John Maindonald <john.maindonald@anu.edu.au>
>>>>>     on Tue, 26 Apr 2005 15:44:26 +1000 writes:

    JMd> The web page http://wwwmaths.anu.edu.au/~johnm/r/plot-lm/
    JMd> now includes files:
    JMd> plot.lm.RData: Image for file for plot6.lm, a version of plot.lm in 
    JMd> which
    JMd> David Firth's Cook's distance vs leverage/(1-leverage) plot is plot 6.
    JMd> The tick labels are in units of leverage, and the contour labels are
    JMd> in units of absolute values of the standardized residual.

    JMd> plot6.lm.Rd file: A matching help file

    JMd> Comments will be welcome.

    MM> Thank you John!

    MM> The *.Rd has the new references and a new example but
    MM> is not quite complete: the \usage{} has only 4 captions,
    MM> \arguments{ .. \item{which} ..}  only mentions '1:5' --- but
    MM> never mind.

    MM> One of the new examples is

    MM> ## Replace Cook's distance plot by Residual-Leverage plot
    MM> plot(lm.SR, which=c(1:3, 5))

    MM> and -- conceptually I'd really like to change the default from
    MM> 'which = 1:4' to the above
    MM> 'which=c(1:3, 5))' 

    MM> This would be non-compatible though for all those that have
    MM> always used the current default 1:4. 
    MM> OTOH, "MASS" or Peter Dalgaard's book don't mention  plot(<lm fit> )
    MM> or at least don't show it's result.

    MM> What do others think?
    MM> How problematic would a change be in the default plots that
    MM> plot.lm() produces?


    JMd> Another issue, discussed recently on r-help, is that when the model
    JMd> formula is long, the default sub.caption=deparse(x$call) is broken
    JMd> into multiple text elements and overwrites.  
    MM> good point!

    JMd> The only clean and simple way that I can see to handle
    JMd> is to set a default that tests whether the formula is
    JMd> broken into multiple text elements, and if it is then
    JMd> omit it.  Users can then use their own imaginative
    JMd> skills, and such suggestions as have been made on
    JMd> r-help, to construct whatever form of labeling best
    JMd> suits their case, their imaginative skills and their
    JMd> coding skills.

    MM> Hmm, yes, but I think we (R programmers) could try a bit harder
    MM> to provide a reasonable default, e.g., something along
 
    MM> cap <- deparse(x$call, width.cutoff = 500)[1]
    MM> if((nc <- nchar(cap)) > 53)	    
    MM>   cap <- paste(substr(cap, 1, 50), "....", substr(cap, nc-2, nc))

    MM> {untested;  some of the details will differ;
    MM> and the '53', '50' could depend on par("..") measures}

In the mean time, I came to quite a nice way of doing this:

    if(is.null(sub.caption)) { ## construct a default:
        cal <- x$call
        if (!is.na(m.f <- match("formula", names(cal)))) {
            cal <- cal[c(1, m.f)]
            names(cal)[2] <- "" # drop  " formula = "
        }
        cc <- deparse(cal, 80)
        nc <- nchar(cc[1])
        abbr <- length(cc) > 1 || nc > 75
        sub.caption <-
            if(abbr) paste(substr(cc[1], 1, min(75,nc)), "...") else cc[1]
    }


I'm about to commit the current proposal(s) to R-devel,
**INCLUDING** changing the default from 
	      'which = 1:4' to 'which = c(1:3,5)

and ellicit feedback starting from there.

One thing I think I would like is to use color for the Cook's
contours in the new 4th plot.

Martin


	<.............. lots deleted ..........>


[Rd] Enhanced version of plot.lm()
Martin Maechler