[R] xyplot: adding pooled regression lines to a paneled type="r" plot
Michael Friendly
friendly at yorku.ca
Wed Jun 23 20:05:40 CEST 2010
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> 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
More information about the R-help
mailing list