2015-09-07 2 views
0

Я пытаюсь использовать функцию autoKrige() в пакете automap для простого применения универсального кригинга. У меня есть нерегулярно разнесенная сетка измерений, и я хочу интерполировать между ними в тонком пространственном масштабе. Пример код: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 (пред [1], пред [, 2])' шаг может быть оставлено для меня, 'autoKrige' работает даже без него , –

ответ

2

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

log(zinc) ~ dist 

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

В вашем случае необходимо указать:

так autoKrige (gstat на самом деле) будет пытаться первой модели линейной модели vals против x и y (многомерная регрессия) и интерполировать остатков с помощью вариометра модель. Однако переменные x и y отсутствуют в SpatialPointsDataFrame.

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

vals ~ 1 

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

surf <-autoKrige(vals ~ 1, s, new_data=pred) 
Смежные вопросы