Hi Mark, If the cumbersome part is that you have to create new data to use predict, then I think the answer is "no", there is not an easier way. However, we can consider easy ways to make new data that fit with certain constraints (e.g., variables = their mean). Here's an example:
## original data set.seed(1355) dat <- data.frame(matrix(rnorm(100), ncol = 10, dimnames = list(NULL, letters[1:10]))) ## model predicting column a from all others model <- lm(a ~ ., data = dat) ## lets say "b" is the column of interest bnew <- seq(0, 2, .1) ## create dataframe of means newdat <- data.frame(t(mean(dat, na.rm = TRUE))) ## repeat the rows so it is as long as bnew newdat <- newdat[rep(1, length(bnew)), ] newdat$b <- bnew ## make predictions using your new data predict(model, newdat) Let's say you had a huge original data frame and you only used some of the variables, you could extract just the terms you included in your model. This should give you the column names, which you could use to calculate the mean on a limited number of variables. attr(terms(model), "term.labels") Finally, if you have taken the (not uncommon and sometimes quite beneficial) step of mean centering your variables prior to creating your model, your task is even simpler: cbind(1:10, 0) Cheers, Josh On Mon, Nov 15, 2010 at 1:40 PM, Mark Na <mtb...@gmail.com> wrote: > Hello R-helpers, > > Please see a self-contained example below, in which I attempt to plot > the effect of x1 on y, while controlling for x2. > > Is there a function that does the same thing, without having to > specify that x2 should be held at its mean value? It works fine for > this simple example, but might be cumbersome if the model was more > complex (e.g., lots of x variables, and/or interactions). > > Many thanks, > > Mark > > > #make some random data > x1<-rnorm(100) > x2<-rnorm(100,2,1) > y<-0.75*x1+0.35*x2 > > #fit a model > model1<-lm(y~x1+x2) > > #predict the effect of x1 on y, while controlling for x2 > xv1<-seq(min(x1),max(x1),0.1) > yhat_x1<-predict(model1,list(x1=xv1,x2=rep(mean(x2),length(xv1))),type="response") > > #plot the predicted values > plot(y~x1,xlim=c(min(x1),max(x1)), ylim=c(min(y),max(y))) > lines(xv1,yhat_x1) > > ______________________________________________ > 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. > -- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.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.