Deepayan,

Thanks alot for your help. I managed to rescale the 3rd response variable, which was what Montgomery did in the example. Plotting the 3rd surface was as easy as including a 3rd argument for "MW".

The only problem now is to work out how to shade a particlar area of interest, depending on selected constrainst for each response. I �ll try working on that next.

Many thanks again


Peter


Deepayan Sarkar wrote:

On Friday 06 August 2004 10:47, Peter Ho wrote:


Hi,

Is there a way to plot more than one trend surface using the
functions contourplot() and wireframe(). I have found an add=T in
contour(), but no equivalent argument in contourplot() and
wireframe()?

I have taken the example 11-2 (pages 441-451) from Design and
analysis of experiments (Montgomery 2001, 5th edition) to see if
this could be done in R. I have managed to plot individual contours
for each response after using the surf.ls() and trmat() functions
from the Spatial package, but have been unable to overlay the
contours. Ideally, it would be nice to also choose a different set
of colours for shading the surface, so that when combing surfaces, we
can immediately identify the optimum conditions. The final overlaid
plot is shown on page 451 (Figure 11-16) of the book.



I don't have access to that book, so a scan or a rough sketch of what that looks like would be helpful.


Ideally, this sort of thing should be done by using a groups= argument. This needs your data to be restructured into a single data frame, e.g.:

trsurfY$z <- as.vector(trsurfY$z)
trsurfV$z <- as.vector(trsurfV$z)
trsurfMW$z <- as.vector(trsurfMW$z)

trsurf.comb <- rbind(as.data.frame(trsurfY),
as.data.frame(trsurfV),
as.data.frame(trsurfMW))
trsurf.comb$g <- factor(rep(c("Y", "V", "MW"), each = length(trsurfY$x)))



The subsequent call should be like


contourplot(z ~ x * y, trsurf.comb, groups = g)

Unfortunately, contourplot has no idea how to deal with groups, so you will have to tell it by writing your own panel function:


contourplot(z ~ x * y, trsurf.comb, subset = g %in% c("V", "Y"), groups = g, cuts = 30,
panel = function(..., groups, subscripts) {
gvals <- levels(groups)
for (i in gvals)
{
panel.levelplot(...,
subscripts = subscripts[groups[subscripts] == i])
## panel.contourplot should also work here,
## but doesn't because I forgot to export it
}
})


Note that the range of the z-values in your 3rd group (MV) is very different from the other 2, so trying to include all 3 won't work unless you specify an appropriate 'at' vector that covers the ranges of all 3 surfaces (by default it will try to put contours at evenly spaced locations over the whole range, almost all of which will miss the data).

I have no idea what you were hoping to do with levelplots (where the inter-contour regions are colored).

You can do something similar with wireframe to get the 3 surfaces together. It does know how to handle groups, so the call is simpler. (Note that this doesn't really work if your surfaces intersect, but you can usually get by with making the grid fine enough.):


wireframe(z ~ x * y, trsurf.comb, groups = g, subset = g %in% c("V", "Y"), shade = TRUE)


Hope that helps,

Deepayan






______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to