[R] Controlling the length of line with abline(lm())

Rolf Turner r.turner at auckland.ac.nz
Thu Jun 19 07:01:50 CEST 2008


On 19/06/2008, at 2:09 PM, Tariq Perwez wrote:

> Hi
> I just realized that when I use linear regression to draw a line  
> through my
> data points with something like the following:
>
> abline(lm(y ~ x))
>
>
> the length of the line is infinite, i.e., the line goes beyond the  
> smallest
> and the largest data values. This seems not very right to me (not  
> to mention
> it looks unaesthetic). I do not mean to imply that the straight-line
> behavior of my system is maintained throughout. I would like to  
> limit the
> length of this line to the range of my data. However, I have not  
> been able
> to figure out how to. Very disconcertingly, I found out that all  
> the books
> that teach statistics using R seem to be drawing such infinite  
> length-lines.
> I would appreciate any advice or suggestions.

As things stand, I don't think you can do it in one hit.  You have to go
through something like

	fit <- lm(y~x)
	z <- predict(fit,data.frame(x=range(x)))
	lines(range(x),z)

I guess one could ``automate'' this via something like:

	fline <- function(object) {
	# ``fline'' <--> fitted line.
		r <- range(object$model[,2])
		d <- data.frame(r)
		names(d) <- attr(object$terms,"term.labels")
		y <- predict(object,d)
		lines(r,y)
	}

(There may well be a cleverer way to do this .....)

And then execute

	fline(lm(y~x))

Howzat?

		cheers,

			Rolf Turner
		

######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}



More information about the R-help mailing list