2012-12-17 48 views
3

我正在尝试在R中使用gstat库编写代码以创建插值。 我已经阅读了gstat手动和基于互联网上的一些例子我已经成功地编写代码(这只是其中的一部分):如何使用gstat进行普通克立格预测

g <- gstat(id="tec", formula=TEC ~ 1, data=data) ##I create an object 
v <- variogram(g) # plot the empirical variogram 
plot(v) 
mod<-vgm(sill=var(data$TEC),model="Sph",range=200,nugget=200) #create the variogram model 

v.fit <- fit.variogram(v, model=mod,fit.method=1) #fit the empirical variogram 
Theor_variogram=plot(variogram(g),v.fit,main="WLS Model") #plot the theoretical variogram 
plot(Theor_variogram) 
## Kriging interpolation 
p <- predict.gstat(g, model=v.fit, newdata=predGrid) 

我的问题是,当我运行最后一个命令(预测)而不是用普通的克里格插值得到结果,我得到一个具有反距离加权(IDW)的结果。 我在gstat手册中读到:“当没有指定变异函数时,反距离加权插值 是默认操作 当指定变异函数时,默认预测方法是普通的 克里金。

但是,正如你在我的代码中看到的,我指定了经验和理论变异函数。 你知不知道为什么我一直拿IDW而不是普通的克里格?它可以与我拥有的坐标类型相关吗?例如,如果我的坐标彼此接近,或者感兴趣的区域太大? 任何帮助将非常有用。

在此先感谢 季米特里斯

回答

5

您需要包括创建gstat对象,而不是去预测阶段:

g <- gstat(id="tec", formula=TEC ~ 1, data=data, model = v.fit) 

不过,我会建议使用标准接口,使用krigegstat 。这将gstat对象的构建和预测结合为一个功能。很少需要自己构建gstat对象。例如:

data(meuse) 
coordinates(meuse) = ~x+y 
data(meuse.grid) 
gridded(meuse.grid) = ~x+y 
m <- vgm(.59, "Sph", 874, .04) 
# OK: 
x <- krige(log(zinc)~1, meuse, meuse.grid, model = m) 

您也可以使用automap包(其中我的作者),并让变差函数模型自动安装到数据。例如使用meuse数据集:

library(automap) 
kr = autoKrige(log(zinc)~1, meuse, meuse.grid) 

这将自动建立一个样品变差函数,并且适合变差函数模型,以该样本变差函数。

+0

Thanx为您的答案。自动驾驶功能听起来很有趣。当使用它时,你能指定拟合的方法(f.e WLS,OLS)。另外,它使用的是sill/range/nugget的初始值?无论如何,我会尽力为它找到一些文档。感谢名单 – user1919