平滑“空间”数据

时间:2012-12-02 09:45:41

标签: r spatial smoothing

我有2个变量xy,它们是[0,1]处的笛卡尔坐标,而z是这些坐标处的(连续)变量的值。 z向量有一些重要的异常值

x<-sample(seq(0,1,0.001), replace=F)
y<-sample(seq(0,1,0.001), replace=F)
z<-runif(1001,min=0,max=1)
z[100]<-8;z[400]<-16;z[800]<-4

filled.contour

中展示这些数据时,我想强调一下这些异常值

到目前为止我已经习惯了

library(akima)
a<-interp(x,y,z)
filled.contour(a$x,a$y,a$z)

但我对这种线性插值感到不满意。例如(异常值没有正确显示)。

我在想我需要的是z的某种最近邻“空间”平滑(基于x,y位置)。任何人都可以帮助或查明可以帮助我的数据/示例/包/代码吗?我更喜欢基础R解决方案,但如果ggplot2或格子可以完成我的工作,那就没问题了。任何其他更好的可视化的想法/建议也将受到欢迎。

2 个答案:

答案 0 :(得分:7)

查看@Paul Heimstra的回答here。他们建议从fields包中进行薄板样条插值。如果克里金适合您,那么包automap可能会有用。

如果您关注地理值的插值,值得一提的是DG Rossiter's online/free course on Geostatistics and Open-source statistical computing

答案 1 :(得分:4)

来自字段包的薄板样条线或Tps()函数是您的票证。然后必须将模型结果放入相同包中的predictSurface()函数中,以生成平滑的空间数据。只需几行代码就可以了:

test.spline <- Tps(data.frame(x,y), z)
new.grid <- predictSurface(test.spline, nx = 200, ny = 200)
image(new.grid)

数据的性质将定义网格的合适程度。您可以使用predictSurface()中的nx和ny参数来控制它。在此示例中,增加的网格分辨率没有影响。利用真实的空间数据,高分辨率表面的平滑可能是戏剧性的。查看功能帮助以获取更多详细信息。