Re: [Rd] abline for intercept-only simple lm models (with and without offset)

From: Tobias Verbeke <tobias.verbeke_at_gmail.com>
Date: Sun 17 Dec 2006 - 21:34:50 GMT

Martin Maechler wrote:
> Yes, I think all your propositions would be improvements.
> OTOH, I don't think the improvements warrant a big increase in
> code (complexity), nor do I think the improvements are crucial
> for R's integrity.
>
> So...
> If you (our someone else) provides a patch {against
> R-devel, as always} which keeps the code simple,
> I'd strongly consider adding that to R.
>
Dear Martin,

Thank you for the encouragement.

Please find a patch in attachment.
As you will see, I also added a warning
for models with more than 2 parameters.

Kind regards,
Tobias

> Regards,
> Martin Maechler
>
>
>>>>>> "Tobias" == Tobias Verbeke <tobias.verbeke@telenet.be>
>>>>>> on Sat, 09 Dec 2006 22:42:38 +0100 writes:
>>>>>>
>
> Tobias> The abline function can be used to draw the
> Tobias> regression line when one passes the lm object as an
> Tobias> argument.
>
> Tobias> However, if it's an intercept-only model, it appears
> Tobias> to use the intercept as the slope of the abline:
>
> Tobias> mod <- lm(dist ~ 1, data = cars) plot(dist ~ speed,
> Tobias> data = cars) abline(reg = mod) # nothing appears
>
> Tobias> This behaves as documented, but might catch
> Tobias> someone. Would it be an improvement if this
> Tobias> situation was detected so as to plot the appropriate
> Tobias> horizontal line, i.e.
>
> Tobias> abline(a = coef(mod), b = 0) ?
>
> Tobias> Would it also be an improvement if for a model like
>
> Tobias> mod2 <- lm(dist ~ 1 + offset(speed), data = cars)
>
> Tobias> abline(reg = mod2) would be equivalent to
>
> Tobias> abline(a = coef(mod2), b = 1) ?
>
> Tobias> For models through the origin, the current function
> Tobias> works fine, but one might even consider models
> Tobias> through the origin and having the independent
> Tobias> variable in an offset() to be fully fool-proof, i.e.
>
> Tobias> abline(a = 0, b = 1)
>
> Tobias> Kind regards, Tobias
>
> Tobias> ______________________________________________
> Tobias> R-devel@r-project.org mailing list
> Tobias> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>

11,12c11,15

< 	temp <- as.vector(coef(a))
< 	if(length(temp) == 1) {
---

> tempa <- as.character(terms(a))
> coefa <- coef(a)
> if (length(coefa) > 2)
> warning("The abline function is meant to only plot the regression line for simple linear regression")
> if (length(grep("-[[:blank:]]?1", tempa))) {
14c17 < b <- temp ---
> b <- ifelse(length(grep("offset", tempa)), 1, coefa[1])
16,17c19,22 < a <- temp[1] < b <- temp[2] ---
> a <- coefa[1]
> if (length(grep("offset", tempa))) b <- 1
> else if (length(coefa) >= 2) b <- coefa[2]
> else b <- 0

______________________________________________

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Dec 19 01:00:30 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 18 Dec 2006 - 16:30:56 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.