Thank you for the very helpful tips. Just one last question: - In the lattice method, how can I plot TIME vs OBSconcentration and TIME vs PREDconcentration in one graph (per individual)? You said "in lattice you would replace 'smooth' by 'l' in the type = argument of xyplot()" that just means now the OBSconc is replaced by a line instead of points and PREDconc is not plotted, right? --> I tried to superimpose 2 lattices but that won't work. I can keep the x-scale the same but not the y-scale. Ex: max pred conc = 60 and max obs conc = 80 and thus for this case, there would be 2 different y-scales superimposed on one another. - the ggplot2 method works, just the weird 5,6,7,8,9,10 mg legends (there are only 5,7,10 mg doses) but it's nothing that photoshop can't take care of.
This is very cool, I think I understand it a lot better now. It was a lot easier than what I was doing before, that's for sure. Thanks! On Fri, Oct 15, 2010 at 2:32 AM, Dennis Murphy <djmu...@gmail.com> wrote: > Hi: > > To get the plots precisely as you have given them in your png file, you're > most likely going to have to use base graphics, especially if you want a > separate legend in each panel. Packages ggplot2 and lattice have more > structured ways of constructing such graphs, so you give up a bit of freedom > in the details of plot construction to get nicer default configurations. > > Perhaps you've written a panel function in S-PLUS (?) to produce each graph > in your png file - if so, you could simply add a couple of lines to > determine the max y-value and from that the limits of the y scale. It > shouldn't be at all difficult to make such modifications. Since R base > graphics is very similar to base graphics in S-PLUS, you could possibly get > away with popping your S-PLUS code directly into R and see how far that > takes you. > > Lattice is based on Trellis graphics, but the syntax in lattice has changed > a fair bit vis a vis Trellis as the package has developed. ggplot2 is a more > recent graphics system in R predicated on the grammar of graphics exposited > by Leland Wilkinson. > > For my example, I've modified the Theophylline data set in package nlme, > described in Pinheiro & Bates (2000), Mixed Effects Models in S and S-PLUS, > Springer. The original data set has eleven unique doses - I combined them > into three intervals and converted them to factor with cut(). I also created > four groups of Subjects and put them into a variable ID. The output data > frame is called theo. I didn't fit the nlme models to the subjects - > instead, I was lazy and used loess smoothing instead. The code to generate > the data frame is given below; this is what we mean by a 'reproducible > example', something that can be copied and pasted into an R session. > > # Use modified version of Theophylline data in package nlme > > library(nlme) > theo <- Theoph > theo <- subset(theo, Dose > 3.5) > theo$dose <- cut(theo$Dose, breaks = c(3, 4.5, 5, 6), labels = c('4.25', > '4.8', '5.5')) > theo <- as.data.frame(theo) > theo$ID <- with(theo, ifelse(Subject %in% c(6, 7, 12), 1, > ifelse(Subject %in% c(2, 8, 10), 2, > ifelse(Subject %in% c(4, 11, 5), 3, 4) ))) > # ID is used for faceting, dose for color and shape > > # lattice version: > > xyplot(conc ~ Time | factor(ID), data = theo, col.line = 1:3, > pch = 1:3, col = 1:3, groups = dose, type = c('p', 'smooth'), > scales = list(y = list(relation = 'free')), > auto.key = list(corner = c(0.93, 0.4), lines = TRUE, points = > TRUE, > text = levels(theo$dose)) ) > > # ggplot2 version: > # scales = 'free_y' allows independent y scales per panel > g <- ggplot(theo, aes(x = Time, y = conc, shape = dose, colour = dose, > group = Subject)) > g + geom_point() + geom_smooth(method = 'loess', se = FALSE) + > facet_wrap( ~ ID, ncol = 2, scales = 'free_y') + > opts(legend.position = c(0.9, 0.4)) > > This is meant to give you some indication how the two graphics systems work > - it's a foundation, not an end product. There are a couple of ways I could > have adjusted the y-scales in the lattice graphs (either directly in the > scales = ... part or to use a prepanel function for loess), but since you're > not likely to use loess in your plots, it's not an important consideration. > > Both ggplot2 and lattice place the legend outside the plot area by default; > I've illustrated a couple of ways to pull it into the plot region FYI. > > One other thing: if your data set contains fitted values from your PK > models for each subject * dose combination, the loess smoothing is > unnecessary. In ggplot2, you would use geom_line(aes(y = pred), ...) in > place of geom_smooth(), and in lattice you would replace 'smooth' by 'l' in > the type = argument of xyplot(). > > HTH, > Dennis > > > > On Fri, Oct 15, 2010 at 12:46 AM, Anh Nguyen <eataban...@gmail.com> wrote: > >> Hello Dennis, >> >> That's a very good suggestion. I've attached a template here as a .png >> file, I hope you can view it. This is what I've managed to achieve in S-Plus >> (we use S-Plus at work but I also use R because there's some very good R >> packages for PK data that I want to take advantage of that is not available >> in S-Plus). The only problem with this is, unfortunately, I cannot figure >> out how make the scale non-uniform and I hope to fix that. My data looks >> like this: >> >> ID Dose Time Conc Pred ... >> 1 5 0 0 0 >> 1 5 0.5 6 8 >> 1 5 1 16 20 >> ... >> 1 7 0 0 0 >> 1 7 0.5 10 12 >> 1 7 1 20 19 >> ... >> 1 10 3 60 55 >> ... >> 2 5 12 4 2 >> ... >> ect >> >> >> I don't care if it's ggplot or something else as long as it looks like how >> I envisioned. >> >> >> >> >> On Fri, Oct 15, 2010 at 12:22 AM, Dennis Murphy <djmu...@gmail.com>wrote: >> >>> I don't recall that you submitted a reproducible example to use as a >>> template for assistance. Ista was kind enough to offer a potential solution, >>> but it was an abstraction based on the limited information provided in your >>> previous mail. If you need help, please provide an example data set that >>> illustrates the problems you're encountering and what you hope to achieve - >>> your chances of a successful resolution will be much higher when you do. >>> BTW, there's a dedicated newsgroup for ggplot2: >>> look for the mailing list link at http://had.co.nz/ggplot2/ >>> >>> HTH, >>> Dennis >>> >>> >>> On Thu, Oct 14, 2010 at 10:02 PM, Anh Nguyen <eataban...@gmail.com>wrote: >>> >>>> I found 2 problems with this method: >>>> >>>> - There is only one line for predicted dose at 5 mg. >>>> - The different doses are 5, 7, and 10 mg but somehow there is a legend >>>> for >>>> 5,6,7,8,9,10. >>>> - Is there a way to make the line smooth? >>>> - The plots are also getting a little crowded and I was wondering if >>>> there a >>>> way to split it into 2 or more pages? >>>> >>>> Thanks for your help. >>>> >>>> On Thu, Oct 14, 2010 at 8:09 PM, Ista Zahn <iz...@psych.rochester.edu >>>> >wrote: >>>> >>>> > Hi, >>>> > Assuming the data is in a data.frame named "D", something like >>>> > >>>> > library(ggplot2) # May need install.packages("ggplot2") first >>>> > ggplot(D, aes(x=Time, y=Concentration, color=Dose) + >>>> > geom_point() + >>>> > geom_line(aes(y = PredictedConcentration, group=1)) + >>>> > facet_wrap(~ID, scales="free", ncol=3) >>>> > >>>> > should do it. >>>> > >>>> > -Ista >>>> > On Thu, Oct 14, 2010 at 10:25 PM, thaliagoo <eataban...@gmail.com> >>>> wrote: >>>> > > >>>> > > Hello-- I have a data for small population who took 1 drug at 3 >>>> different >>>> > > doses. I have the actual drug concentrations as well as predicted >>>> > > concentrations by my model. This is what I'm looking for: >>>> > > >>>> > > - Time vs Concentration by ID (individual plots), with each subject >>>> > > occupying 1 plot -- there is to be 9 plots per page (3x3) >>>> > > - Observed drug concentration is made up of points, and predicted >>>> drug >>>> > > concentration is a curve without points. Points and curve will be >>>> the >>>> > same >>>> > > color for each dose. Different doses will have different colors. >>>> > > - A legend to specify which color correlates to which dose. >>>> > > - Axes should be different for each individual (as some individual >>>> will >>>> > have >>>> > > much higher drug concentration than others) and I want to see in >>>> detail >>>> > how >>>> > > well predicted data fits observed data. >>>> > > >>>> > > Any help would be greatly appreciated. >>>> > > -- >>>> > > View this message in context: >>>> > >>>> http://r.789695.n4.nabble.com/Time-vs-Concentration-Graphs-by-ID-tp2996431p2996431.html >>>> > > Sent from the R help mailing list archive at Nabble.com. >>>> > > >>>> > > ______________________________________________ >>>> > > R-help@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. >>>> > > >>>> > >>>> > >>>> > >>>> > -- >>>> > Ista Zahn >>>> > Graduate student >>>> > University of Rochester >>>> > Department of Clinical and Social Psychology >>>> > http://yourpsyche.org >>>> > >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> >>>> ______________________________________________ >>>> R-help@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. >>>> >>> >>> >> > [[alternative HTML version deleted]] ______________________________________________ R-help@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.