# [R] add trend line to each group of data in: xyplot(y1+y2 ~ x | grp...

Deepayan Sarkar deepayan.sarkar at gmail.com
Fri Mar 10 22:10:20 CET 2006

```On 3/10/06, Andy Bunn <abunn at whrc.org> wrote:
> Although this should be trivial, I'm having a spot of trouble.
>
> I want to make a lattice plot of the format y1+y2 ~ x | grp but then fit a
> lm to each y variable and add an abline of those models in different colors.
> If the xyplot followed y~x|grp I would write a panel function as below, but
> I'm unsure of how to do that with y1 and y2 without reshaping the data
> before hand. Thoughts appreciated. -Andy
>
>
>
> foo <- data.frame(y1 = 1:25+rnorm(100, -3, 1), y2 = 1:25+rnorm(100,3,1), x =
> rep(1:25,4), grp = rep(letters[1:4],25))
> # I want to add a trend line for y1 and y2 here:
> xyplot(y1+y2 ~ x | grp, data = foo)
> # like this example for just one y variable:
> xyplot(y1~x|grp, data = foo, panel = function(x,y)
>           { lm1 = lm(y~x)
>             panel.points(x,y, col = "red")
>             panel.abline(lm1, col = "red")
>             #lm2 = lm(y~x) # model for y2
>             #panel.points(x,y, col = "blue") #points for y2
>             #panel.abline(lm2, col = "blue") #abline for y2
>           })

xyplot(y1+y2~x|grp, data = foo, type = c('r', 'p'))

or

xyplot(y1+y2~x|grp, data = foo, panel = panel.superpose,
panel.groups = function(x,y,...)
{ lm1 = lm(y~x)
panel.points(x,y, col = "red")
panel.abline(lm1, col = "red")
#lm2 = lm(y~x) # model for y2
#panel.points(x,y, col = "blue") #points for y2
#panel.abline(lm2, col = "blue") #abline for y2
})

(the body of the function is unchanged, but the argument list has a
..., which is important).

Deepayan
--
http://www.stat.wisc.edu/~deepayan/

```