R gstat krige () - Matrice de covariance singulière à l'emplacement [5.88,47.4,0]: saut


10

Lorsque je veux effectuer le krigeage, cela ne fonctionne que parfois, selon les valeurs que j'utilise dans ma table de données. En raison de la fonction krige que j'obtiens pour var1.pred: NA NA NA ...et var1.var: NA NA NA ...(mais uniquement lorsque j'utilise les "mauvaises" valeurs dans ma table de données.)

Par exemple:

  • ça marche toujours (jusqu'à présent) quand je n'utilise que 10 valeurs
  • ça marche quand j'utilise 50 valeurs, mais seulement avec certaines
  • cela ne fonctionne pas lorsque j'utilise 50 valeurs et les «mauvaises» valeurs
  • cela fonctionne lorsque j'utilise 25 valeurs et les «mauvaises» valeurs mentionnées ci-dessus

Je ne comprends pas pourquoi cela fonctionne parfois et parfois non. Ce qui est étrange, c'est que lorsque j'ajoute Zwiesel;49.02999878;13.22999954;2.2à la table de données, cela fonctionne lorsque j'utilise moins de ~ 20 valeurs, mais cela ne fonctionne pas lorsque j'utilise plus de 50 valeurs ...

Où est mon erreur?

myWeatherTable.csv:

Place;Latitude;Longitude;Temperature
Aachen;50.77999878;6.09999990;3
Abbikenhausen;53.52999878;8.00000000;7.9
Adelbach;49.04000092;9.76000023;3.1
Adendorf;51.61999893;11.69999981;1.9
Alberzell;48.45999908;11.34000015;4.6
...
...

Mon code pour effectuer une interpolation de krigeage

WeatherData <- read.csv(file="myWeatherTable", header = TRUE, sep ";")

coordinates(WeatherData) = ~Longitude + Latitude

vario <-  variogram(log(Temperature) ~1, WeatherData)
vario.fit <- fit.variogram(vario, vgm("Sph"))

min_lon <- min(WeatherData$Longitude)
max_lon <- max(WeatherData$Longitude)
min_lat <- min(WeatherData$Latitude)
max_lat <- max(WeatherData$Latitude)
Longitude.range <- as.numeric(c(min_lon,max_lon))
Latitude.range <- as.numeric(c(min_lat,max_lat))
grd <- expand.grid(Longitude = seq(from = Longitude.range[1], to = Longitude.range[2], by = 0.1),
  Latitude = seq(from = Latitude.range[1],to = Latitude.range[2], by = 0.1))
coordinates(grd) <- ~Longitude + Latitude
gridded(grd) <- TRUE

plot1 <- WU_data_spatial %>% as.data.frame %>%
  ggplot(aes(Longitude, Latitude)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points with measurements")

plot2 <- grd %>% as.data.frame %>%
  ggplot(aes(Longitude, Latitude)) + geom_point(size=1) + coord_equal() + 
  ggtitle("Points at which to estimate")

grid.arrange(plot1, plot2, ncol = 2)

kriged <- krige(Temperature~ 1, WeatherData, grd, model=variogram_fit)

Avertissements :

1: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [5.88,47.4,0]: skipping...
2: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [5.98,47.4,0]: skipping...
3: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [6.08,47.4,0]: skipping...
4: In predict.gstat(g, newdata = newdata, block = block,  ... :
Covariance matrix singular at location [6.18,47.4,0]: skipping...
...
...

Réponses:


16

Cette erreur est généralement retournée car vous avez des emplacements en double. Vous pouvez le vérifier en utilisant la sp::zerodistfonction.

Pour supprimer les emplacements en double que vous appelez sp::zerodistdans un index de parenthèse.

WeatherData <- WeatherData[-zerodist(WeatherData)[,1],] 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.