Как сделать обычный кригинг с помощью 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)
Это автоматически построит выборочную вариограмму и подгонит модель вариограммы к этой выборочной вариограмме.