2015-09-07 154 views
0

我想在自动映射包中使用autoKrige()函数进行通用克里金简单应用。我有一个不规则间距的测量网格,我想在精细的空间尺度上插入它们之间。示例代码:R通用克里金与autoKrige()

library('automap') 

    # create an irregularly spaced grid 
    y <-x <-c(-5,-4,-2,-1,-0.5,0,0.5,1,2,4,5) 
    grid <-expand.grid(x,y) 
    names(grid) <-c('x', 'y') 

    # create some measurements, greatest in the centre, with some noise 
    vals <-apply(grid,1, function(x) {12/(0.1+sqrt(x[1]^2 + x[2]^2))+rnorm(1,2,1.5)}) 

    # get data into sp format 
    s <-SpatialPointsDataFrame(grid, data.frame(vals)) 

    # make some prediction locations and get them into sp format 
    pred <-expand.grid(seq(-5,5,by=0.5), seq(-5,5,by=0.5)) 
    pred <-cbind(pred[,1], pred[,2]) # this seems to be needed, not sure why 
    pred <-SpatialPoints(pred) 

    # try universal kriging 
    surf <-autoKrige(vals~x+y, s, new_data=pred)  

这导致错误:

Error in gstat.formula.predict(d$formula, newdata, na.action = na.action, : 
     NROW(locs) != NROW(X): this should not occur 

我试图使NEW_DATA具有相同的行数与原始数据,并且甚至试图使在NEW_DATA的坐标与原始数据完全相同,但仍然出现此错误。如果我犯了一个基本错误,我对地质统计学技术很陌生,所以很抱歉。任何人都可以告诉我哪里出错了?谢谢。

+0

的'预解码<-cbind(PRED [,1],预解码[,2])'一步可以省略对我来说,'autoKrige'工作,即使没有它。 –

回答

2

问题是您的autoKrige函数的语法错误。公式输入autoKrige指定要使用线性模式,例如:

log(zinc) ~ dist 

meuse数据集。在这种情况下,您使用线性模型对log(zinc)dist进行建模,并使用变差函数对该模型的残差进行插值。基本上,通用克里金是具有空间相关残差的线性回归。

在你的情况,你指定:

所以autoKrige(gstat实际上)将首先尝试模式valsxy(多元回归)的线性模型,并利用变差函数插值残差模型。但是,xy变量不存在于SpatialPointsDataFrame中。

我认为你想要做的只是插值空间使用变差函数模型。在这种情况下,线性模型是很简单的,实际上只是装配一个平均值:

vals ~ 1 

其中vals平均值被确定,并且残差使用变差函数模型内插。这实际上被称为普通克里格。您对autoKrige调用将是这样的:

surf <-autoKrige(vals ~ 1, s, new_data=pred)