Как сделать обычный кригинг с помощью gstat

Я пытаюсь написать код на R, который использует библиотеку 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 вместо обычного кригинга? Это может быть связано с типом координат, которые у меня есть? Если, например, у меня есть координаты, близкие друг к другу, или если область интересов слишком большая? Любая помощь будет действительно полезна.

Заранее спасибо димитрис

1 ответ

Решение

Вам необходимо включить создание объекта gstat, а не в фазу прогнозирования:

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

Тем не менее, я бы рекомендовал использовать стандартный интерфейс для gstat с помощью krige, Это сочетает в себе строительство 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)

Это автоматически построит выборочную вариограмму и подгонит модель вариограммы к этой выборочной вариограмме.

Другие вопросы по тегам