3

我有 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 或 lattice 可以完成我的工作,那就没问题了。任何其他更好的可视化的想法/建议也将受到欢迎。

4

2 回答 2

7

在此处查看@Paul Heimstra 的答案。他们建议从fields包中进行薄板样条插值。如果克里金法适合您,则包automap可能很有用。

如果您关心地理值的插值,值得一提的是DG Rossiter 的地统计学和开源统计计算在线/免费课程

于 2012-12-02T12:08:12.203 回答
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 参数来控制它。在此示例中,增加的网格分辨率没有影响。对于真实的空间数据,使用高分辨率表面进行平滑处理可能会非常引人注目。查看功能帮助以获取更多详细信息。

于 2014-07-24T10:24:34.873 回答