I would like to make some kriging in a belgian territory.
I got a data set called clean.donnees.Ni
after removing outliers and NA
values.
I first tried simply with this, but got this warning as result :
Ni.krig <- krige(formula = Ni~1,
data = clean.donnees.Ni,
locations = ~x+y,
newdata = krig.grid,
model = Ni.vg.fit)
Warnings : Covariance matrix singular at location [50686, 156893,0]: skipping
I found on other topics that I probably got points at the same location. (R gstat krige() - Covariance matrix singular at location [5.88,47.4,0]: skipping)
They advice to use this to remove points on the same location:
clean.donnees.Ni <- clean.donnees.Ni[-zerodist(clean.donnees.Ni)[,1],]
When I did this, I finally thought I could make krige() work, but instead it nows returns me this error :
Ni.krig <- krige(formula = Ni~1,
data = clean.donnees.Ni,
locations = ~x+y,
newdata = krig.grid,
model = Ni.vg.fit)
Error in `coordinates<-`(`*tmp*`, value = locations) :
setting coordinates cannot be done on Spatial objects, where they have already been set
Because I had to transform clean.donnees.Ni
in a SpatialPointsDataFrame, locations can't read ~x+y anymore.
Does anyone knows how to makes kriging work ?
1 Answer 1
If your data is a spatial data object then you give it to the locations
argument - you only do locations = ~x+y
if you have a non-spatial data frame with coordinates in those columns. So I think:
coordinates(krig.grid) <- ~x+y
Ni.krig <- krige(formula = Ni~1,
locations = clean.donnees.Ni,
newdata = krig.grid,
model = Ni.vg.fit)
will work for you.
I can reproduce your error with a test dataset, and make it work:
> d = data.frame(x=runif(100), y=runif(100), Z=rnorm(100))
> coordinates(d)=~x+y
>
> k = krige(formula = Z~1, data=d, locations=~x+y, newdata=d)
Error in `coordinates<-`(`*tmp*`, value = locations) :
setting coordinates cannot be done on Spatial objects, where they have already been set
>
> k = krige(formula = Z~1, locations=d, newdata=d)
[inverse distance weighted interpolation]
From the help:
locations: object of class ‘Spatial’ or ‘sf’, or (deprecated) formula
defines the spatial data locations (coordinates) such as
‘~x+y’
data: data frame: should contain the dependent variable,
independent variables, and coordinates, should be missing if
locations contains data.
-
I tried but now I get this as error:
Error in h(simpleError(msg, call)) : error in evaluating the argument 'obj' in selecting a method for function 'coordinates': trying to get slot "bbox" from an object (class "data.table") that is not an S4 object
I don't really understand why it doesn't work :> typeof(clean.donnees.Ni) [1] "S4"
Jouline– Jouline2021年12月10日 14:02:43 +00:00Commented Dec 10, 2021 at 14:02 -
Somewhere you've got a
data.table
object.Krig.grid
perhaps if its not your data points. Edit your Q and showsummary
and/orclass
of your inputs.Spacedman– Spacedman2021年12月10日 23:46:48 +00:00Commented Dec 10, 2021 at 23:46 -
Hi, you were right, my krig.grid had to be also an S4 object ! I still got troubles to plot this, because I've never worked with S4 object. Maybe you can help me ?Jouline– Jouline2021年12月13日 11:07:09 +00:00Commented Dec 13, 2021 at 11:07
-
If you've got more problems, ask a new question, and give as much detail as possible on the data you are feeding the functions - show their
summary
or print them, or create sample data from things we can all use. Tag it "r" and "kriging" and I'll see it!Spacedman– Spacedman2021年12月13日 13:39:53 +00:00Commented Dec 13, 2021 at 13:39