我有2个变量x
和y
,它们是[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或格子可以完成我的工作,那就没问题了。任何其他更好的可视化的想法/建议也将受到欢迎。
答案 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参数来控制它。在此示例中,增加的网格分辨率没有影响。利用真实的空间数据,高分辨率表面的平滑可能是戏剧性的。查看功能帮助以获取更多详细信息。