[R] How to generate a smoothed surface for a three dimensional dataset?
Duncan Murdoch
murdoch.duncan at gmail.com
Wed Dec 4 17:56:35 CET 2013
On 04/12/2013 11:36 AM, Jun Shen wrote:
> Hi,
>
> I have a dataset with two independent variables (x, y) and a response
> variable (z). I was hoping to generate a response surface by plotting x, y,
> z on a three dimensional plot. I can plot the data with rgl.points(x, y,
> z). I understand I may not have enough data to generate a surface. Is there
> a way to smooth out the data points to generate a surface? Thanks a lot.
There are many ways to do that. You need to fit a model that predicts z
from (x, y), and then plot the predictions from that model.
An example below follows yours.
>
> Jun
>
> ===========================
>
> An example:
>
> x<-runif(20)
> y<-runif(20)
> z<-runif(20)
>
> library(rgl)
> rgl.points(x,y,z)
Don't use rgl.points, use points3d() or plot3d(). Here's the full script:
x<-runif(20)
y<-runif(20)
z<-runif(20)
library(rgl)
plot3d(x,y,z)
fit <- lm(z ~ x + y + x*y + x^2 + y^2)
xnew <- seq(min(x), max(x), len=20)
ynew <- seq(min(y), max(y), len=20)
df <- expand.grid(x = xnew,
y = ynew)
df$z <- predict(fit, newdata=df)
surface3d(xnew, ynew, df$z, col="red")
Duncan Murdoch
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
More information about the R-help
mailing list