Dieter:
Thank you for your response. As you requested, I created a self-
running example, pasted below. It may be a little wordier than I
would like, but it runs.
The data I am creating assumes that there are two datasets ("calib"
and "hold"), with actual values actual.calib and actual.hold. I then
simulate data for three models, A, B and C. I want to plot a 3 x 2
lattice that has bwplots for each model-dataset combination in each
panel. On top of that, I want to superimpose a line that plots the
actual data for calib in all three panels in the calib column (and the
same for hold).
The data.frame sim.data is just the simulated data, and actual.data is
just the actual data. all.data combines them both, and the group
variable identifies whether a record is from "sim" or "actual." Note
that there are 50 simulations, but only one actual, for each model-
dataset combination. The presentation in all.data is kind of
wasteful, since I replicated the same actual data for all 3 models.
So, ideally, I would work with sim.data and actual.data separately.
But I can use all.data if necessary.
I apologize that I was not more claear in my earlier post, but
hopefully this gives you enough information. Thanks again for helping
with this.
Michael
library(lattice)
# creating datasets
models <- c("A","B","C")
datasets <- c("calib","hold")
counts <- 1:10
n.sims <- 50
sim.data <- NULL
all.data <- NULL
actual.calib <- seq(0,5,length=10)
actual.hold <- seq(5,0,length=10)
cols <- c("model","dataset","count","value","group")
actual.data <- as.data.frame(cbind(c(rep("calib",10),rep("hold",10)),
c(1:10,1:10),c(actual.calib,actual.hold)))
set.names <- c(rep("calib",n.sims),rep("hold",n.sims))
for (mod in models) {
for (y in counts) {
x.calib <- rnorm(n=n.sims,mean=actual.calib[y],sd=1)
x.hold <- rnorm(n=n.sims,mean=actual.hold[y],sd=1)
x <- as.data.frame(cbind(rep(mod,2*n.sims), set.names, y,
c(x.calib,x.hold),rep("sim",2*n.sims)))
colnames(x) <- cols
sim.data <- rbind(sim.data, x)
}
rep.actual <- as.data.frame(cbind(rep(mod,20),
actual.data,rep("actual",20)))
colnames(rep.actual) <- cols
all.data <- rbind(all.data,sim.data,rep.actual)
}
colnames(actual.data) <- c("dataset","count","value")
# for some reason, value is encoded as a factor.
# This changes value to numeric.
# (is there a better way to do this?)
sim.data[,"value"] <- as.numeric(levels(sim.data[,"value"])
[sim.data[,"value"]])
all.data[,"value"] <- as.numeric(levels(all.data[,"value"])
[all.data[,"value"]])
actual.data[,"value"] <- as.numeric(levels(actual.data[,"value"])
[actual.data[,"value"]])
# at this point, there are three data frames worth considering:
# sim.data - simulated data
# actual.data - actual data
# all.data - sim.data, and the actual.data replicated for each model
# create panel function
panel.ppc.plot <- function(...,group.number) {
if (group.number==1) {
panel.bwplot(...)
} else {
panel.lines(...)
}
}
# create and plot lattice object
obj <- bwplot(as.numeric(value) ~ as.factor(count) | dataset + model,
data = all.data,
panel = panel.superpose,
groups=group,
panel.groups = panel.ppc.plot
)
plot(obj)
------------------------------
Message: 119
Date: Sat, 16 Aug 2008 08:14:36 +0000 (UTC)
From: Dieter Menne <[EMAIL PROTECTED]>
Subject: Re: [R] Lattice: problem using panel.superpose and
panel.groups
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset=us-ascii
Michael Braun <braunm <at> MIT.EDU> writes:
I have some data that is split into two groups: some "actual" data,
and some simulated data, generated from several different models.
The
actual data come from two different datasets (calibration and
holdout), and the simulations were calibrated on each data set under
the various models.
What I want to do is create a boxplot on the simulated data, and
superimpose a line representing the actual data. This plot would
condition on dataset and model. While the simulated data various
across model and dataset, the actual data varies only across dataset
and is common for all models.
Michael,
to understand you problem, I started creating a data set that
simulates the
data, but I got stuck with with your intended meaning of "groups.
df = data.frame(p=rnorm(100),count=rpois(100,5),dataset=c("A","B"),
model=rep(c("M1","M2"),each=50),groups= dont' know)
Could you please (as the posting guide says) supply a self-running
example that
shows the problem?
You named your data.frame "data.frame"; it could work, but better
don't use
common things like "c" or "data.frame" as variable name.
Dieter
______________________________________________
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.