Кригинг с помощью gstat: «Ковариационная матрица единственного числа в местоположении» - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь сделать оценку, используя kstging с помощью gstat, но никогда не могу достичь ее из-за проблемы с ковариационной матрицей.У меня никогда нет оценок на места, которые я хочу, потому что все они пропущены.У меня есть следующее предупреждающее сообщение для каждого местоположения:

1: In predict.gstat(g, newdata = newdata, block = block, nsim = nsim,  : 
Covariance matrix singular at location [-8.07794,48.0158,0]: skipping...

И все оценки равны NA.

До сих пор я просмотрел множество связанных потоков StackOverflow, но ни одна из них не решила мои проблемы (https://gis.stackexchange.com/questions/222192/r-gstat-krige-covariance-matrix-singular-at-location-5-88-47-4-0-skipping; https://gis.stackexchange.com/questions/200722/gstat-krige-error-covariance-matrix-singular-at-location-917300-3-6109e06-0; https://gis.stackexchange.com/questions/262993/r-gstat-predict-error?rq=1)

Я проверил, что:

  • фактически есть пространственная структура в моем наборе данных (см. Пузырьграфик с кодом ниже)

  • нет повторяющихся местоположений

  • модель вариограммы не является единственной и хорошо подходит для экспериментальной вариограммы (см. график с кодом ниже)

  • Я также попробовал несколько значений range, sill, nugget и всех моделей в библиотеке gstat

  • ковариационная матрица положительно определена и имеет положительные собственные значения. Она является единственной в соответствии с gstat, но не функцией is.singular.matrix

  • Для экспериментальной вариограммы было достаточно пары точек

Как преодолеть эту проблемуЛем?Какие советы, чтобы избежать единственной ковариационной матрицы?Я также приветствую любую «лучшую практику» кригинга.

Код (требуется для SO.Rdata: https://www.dropbox.com/s/5vfj2gw9rkt365r/forSO.Rdata?dl=0):

library(ggplot2)
library(gstat)

#Attached Rdata
load("forSO.Rdata")

#The observations
str(abun)

#Spatial structure
abun %>% as.data.frame %>% 
  ggplot(aes(lon, lat)) +
  geom_point(aes(colour=prop_species_cells), alpha=3/4) + 
  coord_equal() + theme_bw()

#Number of pair of points
cvgm <- variogram(prop_species_cells ~1, data=abun, width=3,  cutoff=300)
plot(cvgm$dist,cvgm$np)

#Fit a model covariogram
efitted = fit.variogram(cvgm, vgm(model="Mat", range=100, nugget=1), fit.method=7, fit.sills=TRUE, fit.ranges=TRUE)
plot(cvgm,efitted)

#No warning, and the model is non singular
attr(efitted, "singular")

#Covariance matrix (only on a small set of points, I have more than 25000 points) : positive-definite, postiive eigen values and not singular
hex_pointsDegTiny=hex_pointsDeg
hex_pointsDegTiny@coords=hex_pointsDegTiny@coords[1:10,]
dists <- spDists(hex_pointsDegTiny)
covarianceMatrix=variogramLine(efitted, maxdist = max(cvgm$dist), n = 10*max(cvgm$dist), dir = c(1,0,0), dist_vector = dists, covariance = TRUE)
eigen(covarianceMatrix)$values
is.positive.definite(covarianceMatrix)
is.singular.matrix(covarianceMatrix)

# No duplicate locations
zerodist(hex_pointsDegTiny)

# Impossible to krig
OK_fit <- gstat(id = "OK_fit", formula = prop_species_cells ~ 1, data = abun, model = efitted)
dist <- predict(OK_fit, newdata = hex_pointsDegTiny)
dist@data

1 Ответ

0 голосов
/ 23 ноября 2018

На самом деле в наборе данных abun (zerodist(abun)) были повторяющиеся местоположения, их нельзя было искать в сетке, по которой я хотел получить оценки.После избавления от дубликатов кригинг работал нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...