R универсальный кригинг с автоКригом ()

Я пытаюсь использовать функцию autoKrige() в пакете automap для простого применения универсального кригинга. У меня нерегулярно расположенная сетка измерений, и я хочу интерполировать их в точном пространственном масштабе. Пример кода:

    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 точно такими же, как в исходных данных, но я все еще получаю эту ошибку. Я новичок в методах геостатистики, поэтому прошу прощения, если я делаю основную ошибку. Кто-нибудь может посоветовать, где я иду не так? Благодарю.

1 ответ

Решение

Проблема в том, что у вас есть синтаксис autoKrige функционировать неправильно. Формула ввода в autoKrige определяет линейную модель, которую вы хотите использовать, например:

log(zinc) ~ dist

от meuse набор данных. В этом случае вы модель log(zinc) против dist с использованием линейной модели, а остатки этой модели интерполируются с помощью вариограммы. По сути, универсальный кригинг - это линейная регрессия с пространственно коррелированными остатками.

В вашем случае вы указываете:

val ~ x+y

так автоКриге (gstat на самом деле) будет пытаться сначала моделировать линейную модель vals против x а также y (многомерная регрессия) и интерполировать невязки с использованием модели вариограммы. Тем не менее x а также y Переменные отсутствуют в SpatialPointsDataFrame,

Я думаю, что вы хотите сделать, это только пространственно интерполировать с использованием модели вариограммы. В этом случае линейная модель очень проста, на самом деле просто соответствует среднему значению:

vals ~ 1

где среднее значение vals определяется и остатки интерполируются с использованием модели вариограммы. На самом деле это известно как Обычный Кригинг. Ваш звонок в autoKrige будет что-то вроде:

surf <-autoKrige(vals ~ 1, s, new_data=pred) 
Другие вопросы по тегам