Дублирование данных при использовании пакета gstat или automap в R

Я пытаюсь использовать обычный кригинг для пространственного прогнозирования данных о местонахождении животного на основе переменных-предикторов с использованием пакета gstat или automap в R. У меня много (более 100) повторяющихся точек координат, которые я не могу выбросить, так как эти станции были выбраны. многократно в течение многих лет. Каждый раз, когда я запускаю приведенный ниже код для обычного кригинга, я получаю ошибку LDL из-за повторяющихся точек. Кто-нибудь знает, как решить эту проблему, не выбрасывая данные? Я попробовал код из пакета automap, который должен исправлять дубликаты, но я не могу заставить его работать. Спасибо вам за помощь!

coordinates(fish) <- ~ LONGITUDE+LATITUDE
x.range <- range(fish@coords[,1])
y.range <- range(fish@coords[,2])
grd <- expand.grid(x=seq(from=x.range[1], to=x.range[2], by=3), y=seq(from=y.range[1], to=y.range[2], by=3))
coordinates(grd) <- ~ x+y
plot(grd, pch=16, cex=.5)
gridded(grd) <- TRUE

library(gstat)
zerodist(fish) ###146 duplicate points
v <- variogram(log(WATER_TEMP) ~1, fish, na.rm=TRUE)
plot(v)
vgm()
f <- vgm(1, "Sph", 300, 0.5)
print(f)
v.fit <- fit.variogram(v,f)
plot(v, model=v.fit) ####In fit.variogram(v, d) : Warning: singular model in variogram fit

krg <- krige(log(WATER_TEMP) ~ 1, fish, grd, v.fit) 
## [using ordinary kriging]
##"chfactor.c", line 131: singular matrix in function LDLfactor()Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim,: LDLfactor

##automap code for correcting for duplicates
fish.dup = rbind(fish, fish[1,]) # Create duplicate
coordinates(fish.dup) = ~LONGITUDE + LATITUDE 
kr = autoKrige(WATER_TEMP, fish.dup, grd)
###Error in inherits(formula, "SpatialPointsDataFrame"):object 'WATER_TEMP' not found
###somehow my predictor variables are no longer available when in a Spatial Points Data Frame??

person ms.elasmo    schedule 04.02.2016    source источник
comment
Пожалуйста, отредактируйте Q, чтобы включить library вызов (или ссылку), который делает fish доступным.   -  person IRTFM    schedule 04.02.2016
comment
О, извините, я новичок в этом. Должен ли я предоставлять свои личные данные (например, рыба)? Я не знал, можно ли посмотреть код и понять, где я ошибся.   -  person ms.elasmo    schedule 04.02.2016
comment
Это может быть возможно, если вы найдете знающего пользователя этого пакета. Я не так, мне нужно иметь объект данных для работы. Можете ли вы получить ошибку с одним из объектов данных, представленных в gstat? (Первая ошибка также не выглядит как полное сообщение об ошибке R.)   -  person IRTFM    schedule 04.02.2016
comment
Когда я использую предоставленный набор данных (meuse) для этого пакета, все работает нормально. Я не уверен, что это о моих данных, которые не будут работать. Я исправил сообщения об ошибках в своем исходном вопросе до полного сообщения.   -  person ms.elasmo    schedule 04.02.2016


Ответы (3)


automapимеет очень простое решение для повторяющихся наблюдений — отбрасывать их. Итак, automap на самом деле не решает вашу проблему. Я вижу несколько вариантов:

  • Отбросьте дубликаты.
  • Слегка измените координаты дубликатов, чтобы они больше не находились в одном и том же месте.
  • Выполните пространственно-временной кригинг, используя gstat.

Что касается вашей конкретной проблемы, пожалуйста, сделайте ваш пример воспроизводимым. Я могу предположить, что rbind вашего объекта fish не делает того, что вы ожидаете...

person Paul Hiemstra    schedule 05.02.2016
comment
Спасибо за ваши предложения, Павел. Я последовал вашему совету и смог запустить функцию autoKrige с моими дублирующими координатами, слегка искаженными. Прогностические сетки кригинга получаются очень нечеткими (т. е. очень пикселизированными сетками), но это может быть связано с тем, как я изначально установил размеры сетки. Спасибо! - person ms.elasmo; 08.02.2016

automap::autoKrige ожидает формулу в качестве первого аргумента, попробуйте

kr = autoKrige(WATER_TEMP~1, fish.dup, grd)
person Edzer Pebesma    schedule 05.02.2016
comment
Наконец-то я заставил это работать, хотя мне придется поиграть с размерами моей сетки. Спасибо! - person ms.elasmo; 08.02.2016

В качестве альтернативы вы можете использовать функцию jitterDupCoords пакета geoR. https://cran.r-project.org/web/packages/geoR/geoR.pdf

person F. Costa    schedule 02.03.2016