[R] xyplot: adding pooled regression lines to a paneled type="r" plot

Michael Friendly friendly at yorku.ca
Thu Jun 24 20:37:55 CEST 2010


Dennis Murphy wrote:
> Hi:
>
> Does this work for you?
>
> xyplot(distance ~ age | Sex, data = Orthodont, groups = Subject,
>        main = 'Individual linear regressions ~ age', type = c('g', 'r'),
>        panel = function(x, y, ...) {
>                   panel.xyplot(x, y, ..., col = gray(0.5))
>                   panel.lmline(x, y, ..., lwd = 3, col = 'red')
>                 })
>
Perfectly.  Thanks to you and to Deepayan for the help on this.

> HTH,
> Dennis
>
> On Wed, Jun 23, 2010 at 11:05 AM, Michael Friendly <friendly at yorku.ca 
> <mailto:friendly at yorku.ca>> wrote:
>
>     Thanks, Deepayan
>
>     I read your presentation and understand how this works for the
>     case you presented, but I can't
>     get it to work for my case, where I want to superimpose model
>     fitted lines over individual
>     subject regression lines.  Here's what I tried
>
>     library(nlme)
>     library(lattice)
>
>     ## ------------------
>     ## pooled OLS model
>
>     ## ------------------
>
>     Ortho.OLS <- lm(distance ~ age * Sex, data=Orthodont)
>     #coef(Ortho.OLS)
>
>       # plot individual lines
>
>     xyplot(distance ~ age|Sex, data=Orthodont, type='r',
>     groups=Subject, col=gray(.50),
>       main="Individual linear regressions ~ age")
>
>     grid <- expand.grid(age=8:14, Sex=c("Male", "Female"))
>
>     fm.OLS <-cbind(grid, distance = predict(Ortho.OLS, newdata = grid))
>
>     Ortho <-Orthodont[c("age", "Sex", "distance")]
>     combined <- make.groups(original = Ortho,
>                               OLS = fm.OLS)
>     str(combined)
>     xyplot(distance ~ age|Sex, data=combined, groups=which,
>     col="black", lwd=2,
>      type = c("r", "l"), distribute.type = TRUE
>       )
>
>     This last just gives me the pooled within-Sex regression lines,
>     which is what I want to overlay
>     on the first plot.
>
>     Further, if I try a mixed model, I get errors trying to get the
>     predicted values in a similar form
>
>
>     Ortho.MLM <- lme(distance ~ age * Sex, data=Orthodont,
>           random = ~ 1 + age | Subject,
>           correlation = corAR1 (form = ~ 1 | Subject))
>
>     fm.MLM <-cbind(grid, distance = predict(Ortho.MLM, newdata = grid))
>
>     > fm.MLM <-cbind(grid, distance = predict(Ortho.MLM, newdata = grid))
>     Error in predict.lme(Ortho.MLM, newdata = grid) :
>      Cannot evaluate groups for desired levels on "newdata"
>
>     >
>
>     Deepayan Sarkar wrote:
>
>         On Tue, Jun 22, 2010 at 9:30 AM, Michael Friendly
>         <friendly at yorku.ca <mailto:friendly at yorku.ca>> wrote:
>          
>
>             Consider the following plot that shows separate regression
>             lines ~ age for
>             each subject in the Pothoff-Roy Orthodont data,
>             with separate panels by Sex:
>
>             library(nlme)
>             #plot(Orthodont)
>             xyplot(distance ~ age|Sex, data=Orthodont, type='r',
>             groups=Subject,
>             col=gray(.50),
>              main="Individual linear regressions ~ age")
>
>             I'd like to also show in each panel the pooled OLS
>             regression line for each
>             Sex in the corresponding panel,
>             generated by the following model:
>
>             Ortho.OLS <- lm(distance ~ age * Sex, data=Orthodont)
>
>             Sex is a factor, with Male=0, so the coefficients are:
>                
>
>                 coef(Ortho.OLS)
>                      
>
>              (Intercept)           age     SexFemale age:SexFemale
>              16.3406250     0.7843750     1.0321023    -0.3048295
>
>             I anticipate wanting to fit other models to these data,
>             and also displaying
>             the model-predicted
>             regression lines in the same or similar plot, e.g., for a
>             simple linear
>             mixed model:
>
>             Ortho.MLM <- lme(distance ~ age * Sex, data=Orthodont,
>                  random = ~ 1 + age | Subject,
>                  correlation = corAR1 (form = ~ 1 | Subject))
>                
>
>
>         Have a look at
>
>         http://user2007.org/program/presentations/sarkar.pdf
>
>         -Deepayan
>          
>
>
>
>     -- 
>     Michael Friendly     Email: friendly AT yorku DOT ca Professor,
>     Psychology Dept.
>     York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
>     4700 Keele Street    Web:   http://www.datavis.ca
>     Toronto, ONT  M3J 1P3 CANADA
>
>     ______________________________________________
>     R-help at r-project.org <mailto:R-help at r-project.org> mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     PLEASE do read the posting guide
>     http://www.R-project.org/posting-guide.html
>     and provide commented, minimal, self-contained, reproducible code.
>
>


-- 
Michael Friendly     Email: friendly AT yorku DOT ca 
Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA



More information about the R-help mailing list