Dear Kevin,
If you look at the examples under ?xyplot, you'll get some idea
about using panel functions. In your case, assume your data frame
has variables x, y, w (for weight), G (for panel) and g (for sub-
group). You could plot this using something like the following
clumsy effort:
x <- rnorm(500)
y <- 0.9*x + sqrt(1-0.9*0.9)*rnorm(500)
g <- sample(x=1:2, size=500, replace=TRUE)
G <- sample(x=c("A", "B", "C"), size=500,
replace=TRUE)
w <- runif(500)
tmp <- data.frame(x=x, y=y, w=w, g=g, G=G)
#
xyplot(y ~ x | G, data=tmp, groups=g, weights=w,
panel=function(x,y,groups,subscripts=subscripts,
weights,...) {
t1 <- unique(groups)
for (i in 1:length(t1)) {
w <- is.element(groups[subscripts], t1[i])
lpoints(x[w], y[w], pch=i, col=i)
panel.abline(lm(y[w] ~ x[w], weights=(weights,
[subscripts])[w]), lty=i, col=i)
}
}, key=list(space="top", columns=2, points=list(pch=1:2,
col=1:2), text=list(paste("Group", 1:2),
col=1:2)))
Regards,
Andrew C. Ward
CAPE Centre
Department of Chemical Engineering
The University of Queensland
Brisbane Qld 4072 Australia
andreww at cheque.uq.edu.au
Quoting Kevin Brown <kevin.brown at mail.mcgill.ca>:
> Dear R-users,
>
> I am trying to create a multipanel scatter plot which displays
> weighted
> regression lines for each subgroup. I am having diffuculty
> figuring out
> how the Trellis multipanel plotting functions work, in general.
> Does
> someone know where there are some beginners examples on how to
> create
> and use panel.xxx functions in conjunction with the xyplot
> functions?
>
> Back to the matter at hand - There are two different ways that
> I could
> add these lines, I think.
>
> The first, and simplest would be to first find the coeffecients
> of the
> weighted regression line for each panel ( I can do this). Then
> I would
> add these coeffecients into a vector/matrix (i'm not sure what
> form of
> vector would be suitable) and add them to each panel (I do not
> know how
> to do this).
>
> The second way would be to fiddle around with the function
> below to add
> the "weights" to the lm function call. I do not know how to
> change this
> "plot.regression" function to do that.
>
> plot.regression = function(x,y)
> {
> panel.xyplot(x,y)
> panel.abline(lm(y~x))
> }
>
> xyplot(yg~xg | g, panel="plot.regression")
>
> Any help would be great!
> Thanks,
> Kevin Brown.
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>