Re: [R] Smoothing z-values according to their x, y positions
Emmanuel Levy [EMAIL PROTECTED] wrote in news:[EMAIL PROTECTED]: Dear David, Thanks a lot for pointing out kde2d, just tried it out but the problem is that it indeed takes the density of points into account, which I dont want. For example, if in an region of surface S I've got 10,000 points, and that their average height is 0.5, and in an other region I've got only ten points and their average value if also 0.5, I'd like all these points to be transformed to the same 0.5 value. At the moment, it seems that it's not the case. For example, the range of the values I give is: 0.2 - 3.7, but the range of the values that are outputed is 0 - 0.17. Emmanuel Levy [EMAIL PROTECTED] wrote in news:[EMAIL PROTECTED]: Dear Bert, Thanks for your reply - I indeed saw a lot of functions using: help.search(smooth) The problem is that most seem to not be very appropriate to what I'd like, or they seem extremely complicated (e.g. gma). I am probably missing something as I don't see how to use Loess. From my poor understanding, it seems to be for 2D data. Here I want to smooth the third z component. Your description of what is desired leads me to believe you were misreading the loess documentation. For proof I suggest you visit Deepayan Sarkar's webpage and in particular see Figure 6.8 where 3d plots of loess fits for more complex data arrangements are exemplified: Choose Figure 6.8 (code on right side of window): http://lmdvr.r-forge.r-project.org/figures/figures.html Code: http://dsarkar.fhcrc.org/lattice/book/Chapter06-Trivariate/all.R PNG image: http://dsarkar.fhcrc.org/lattice/book/images/Figure_06_08_stdClassic.png -- David Winsemius __ 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.
[R] Smoothing z-values according to their x, y positions
Dear All, I'm sure this is not the first time this question comes up but I couldn't find the keywords that would point me out to it - so apologies if this is a re-post. Basically I've got thousands of points, each depending on three variables: x, y, and z. if I do a plot(x,y, col=z), I get something very messy. So I would like to smooth the values of z according to the values of their neighbors (given by x and y). Could you please point me out to the function(s) I should look into for the smothing, and possibly for the plotting? Many thanks for your help, Emmanuel __ 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.
Re: [R] Smoothing z-values according to their x, y positions
There are dozens of functions within R and contributed packages that do this. The spatial statistics packages (see the spatial task view on CRAN) is certainly where most are concentrated, but thin plate splines (in splines packages, I believe), tensor product splines (in mgcv package), local likelihood (in locfit package) etc. are also available for spatial smoothing. Perhaps the most basic place to look is the ?loess function in the base distribution, which will do exactly what you requested. Bert Gunter Genentech Nonclinical Statistics -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Emmanuel Levy Sent: Wednesday, March 19, 2008 12:42 PM To: r-help@r-project.org Subject: [R] Smoothing z-values according to their x, y positions Dear All, I'm sure this is not the first time this question comes up but I couldn't find the keywords that would point me out to it - so apologies if this is a re-post. Basically I've got thousands of points, each depending on three variables: x, y, and z. if I do a plot(x,y, col=z), I get something very messy. So I would like to smooth the values of z according to the values of their neighbors (given by x and y). Could you please point me out to the function(s) I should look into for the smothing, and possibly for the plotting? Many thanks for your help, Emmanuel __ 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. __ 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.
Re: [R] Smoothing z-values according to their x, y positions
Dear Bert, Thanks for your reply - I indeed saw a lot of functions using: help.search(smooth) The problem is that most seem to not be very appropriate to what I'd like, or they seem extremely complicated (e.g. gma). I am probably missing something as I don't see how to use Loess. From my poor understanding, it seems to be for 2D data. Here I want to smooth the third z component. In the meantime I adapted a function from Greg Warnes, which sort of does the job (although the smoothing is not very nice). So I'd be very happy to learn how do do something similar with loess! x = runif(1000) y = runif(1000) z = x+y hist2d.el(x,y,z, nbins=10) ## -- This function was adapted from Greg Warnes hist2d.el - function( x,y=NULL, z=NULL, nbins=200, my.cuts = NULL, same.scale=FALSE, na.rm=TRUE, show=TRUE, col=c(black, heat.colors(12)), ... ) { if(is.null(y)) { if(ncol(x) != 2) stop(If y is ommitted, x must be a 2 column matirx) y - x[,2] x - x[,1] } if(length(nbins)==1) nbins - rep(nbins,2) nas - is.na(x) | is.na(y) if(na.rm) { x - x[!nas] y - y[!nas] } else stop(missinig values not permitted if na.rm=FALSE) if(!is.null(my.cuts)){ nbins = rep(length(my.cuts)-1,2) x.cuts=my.cuts y.cuts=my.cuts } else { if(same.scale) { x.cuts - seq( from=min(x,y), to=max(x,y), length=nbins[1]+1) y.cuts - seq( from=min(x,y), to=max(x,y), length=nbins[2]+1) } else { x.cuts - seq( from=min(x), to=max(x), length=nbins[1]+1) y.cuts - seq( from=min(y), to=max(y), length=nbins[2]+1) } } print(nbins) index.x - cut( x, x.cuts, include.lowest=TRUE) index.y - cut( y, y.cuts, include.lowest=TRUE) m - matrix( 0, nrow=nbins[1], ncol=nbins[2], dimnames=list( levels(index.x), levels(index.y) ) ) m.sum - matrix( 0, nrow=nbins[1], ncol=nbins[2], dimnames=list( levels(index.x), levels(index.y) ) ) for( i in 1:length(index.x) ) m[ index.x[i], index.y[i] ] - m[ index.x[i], index.y[i] ] + 1 for( i in 1:length(index.x) ) m.sum[ index.x[i], index.y[i] ] - m.sum[ index.x[i], index.y[i] ] + z[i] m[which(m==0)]=1 m = m.sum/(m) xvals - x.cuts[1:nbins[1]] yvals - y.cuts[1:nbins[2]] if(show) image( xvals,yvals, m, col=col,...) # invisible(list(counts=m,x=xvals,y=yvals)) invisible(m) } On 19/03/2008, Bert Gunter [EMAIL PROTECTED] wrote: There are dozens of functions within R and contributed packages that do this. The spatial statistics packages (see the spatial task view on CRAN) is certainly where most are concentrated, but thin plate splines (in splines packages, I believe), tensor product splines (in mgcv package), local likelihood (in locfit package) etc. are also available for spatial smoothing. Perhaps the most basic place to look is the ?loess function in the base distribution, which will do exactly what you requested. Bert Gunter Genentech Nonclinical Statistics -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Emmanuel Levy Sent: Wednesday, March 19, 2008 12:42 PM To: r-help@r-project.org Subject: [R] Smoothing z-values according to their x, y positions Dear All, I'm sure this is not the first time this question comes up but I couldn't find the keywords that would point me out to it - so apologies if this is a re-post. Basically I've got thousands of points, each depending on three variables: x, y, and z. if I do a plot(x,y, col=z), I get something very messy. So I would like to smooth the values of z according to the values of their neighbors (given by x and y). Could you please point me out to the function(s) I should look into for the smothing, and possibly for the plotting? Many thanks for your help, Emmanuel __ 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. __ 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.
Re: [R] Smoothing z-values according to their x, y positions
Emmanuel Levy [EMAIL PROTECTED] wrote in news:[EMAIL PROTECTED]: Dear Bert, Thanks for your reply - I indeed saw a lot of functions using: help.search(smooth) The problem is that most seem to not be very appropriate to what I'd like, or they seem extremely complicated (e.g. gma). I am probably missing something as I don't see how to use Loess. From my poor understanding, it seems to be for 2D data. Here I want to smooth the third z component. In the meantime I adapted a function from Greg Warnes, which sort of does the job (although the smoothing is not very nice). So I'd be very happy to learn how do do something similar with loess! I am realizing that my memories about the kde2d function were faulty. My suggestion would only let you look at the 2-d marginals. You probably want a true 3d plotting function. The densities would then be closed surfaces. Take a look at Feng and Tierney's figure 10 in this poster at: http://user2007.org/program/posters/feng.pdf The code cannot be cut-and-pasted, but if it does what you want, it would be worth it. -- David Winsemius __ 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.
Re: [R] Smoothing z-values according to their x, y positions
Dear David, Thanks a lot for pointing out kde2d, just tried it out but the problem is that it indeed takes the density of points into account, which I dont want. For example, if in an region of surface S I've got 10,000 points, and that their average height is 0.5, and in an other region I've got only ten points and their average value if also 0.5, I'd like all these points to be transformed to the same 0.5 value. At the moment, it seems that it's not the case. For example, the range of the values I give is: 0.2 - 3.7, but the range of the values that are outputed is 0 - 0.17. I haven't looked yet at the locfit package as it is not installed, but I will check it out! Thanks for helping! Emmanuel On 20/03/2008, David Winsemius [EMAIL PROTECTED] wrote: Emmanuel Levy [EMAIL PROTECTED] wrote in news:[EMAIL PROTECTED]: Dear Bert, Thanks for your reply - I indeed saw a lot of functions using: help.search(smooth) The problem is that most seem to not be very appropriate to what I'd like, or they seem extremely complicated (e.g. gma). I am probably missing something as I don't see how to use Loess. From my poor understanding, it seems to be for 2D data. Here I want to smooth the third z component. In the meantime I adapted a function from Greg Warnes, which sort of does the job (although the smoothing is not very nice). So I'd be very happy to learn how do do something similar with loess! You could consider at combining the kde2d() function in the MASS package within the VR bundle in combination with contour(). The example I followed came from MASS 2ed in chapter 5's section on density estimation. It is probably easiest to just copy the help example: library(MASS) attach(geyser) f1 - kde2d(duration[-272], duration[-1], h = rep(1.5, 2), n = 50, lims = c(0.5, 6, 0.5, 6)) contour(f1, xlab = previous duration, ylab = duration, levels = c(0.05, 0.1, 0.2, 0.4) ) I have also had success with Loader's locfit package. -- David Winsemius __ 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. __ 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.