4

I'll admit I don't understand kriging to the fullest. Yet, I've read that the weights should add up to 1 as in IDW and Natural Neighbors.

However, surrounding the biggest elevation points of my vector layer, I get some raster cells with greater values.

1
  • Why do you think that the values in the output should lie within the values in the input? The best fit for you data might be such, that the min-max of the interpolated output might lie outside your input data . May 11, 2015 at 5:29

2 Answers 2

4

There are different types of kriging, which make different assumptions.

Simple kriging assumes a known mean for the total extent and ordinary kriging assume a local mean defined within a radius. With those you should not predict larger values than your largest observed value.

Universal kriging assumes a general polynomial trend model. The polynomial might fit with out of range value (kriging works then on the residues)

3
  • Don't forget the nugget effect. If there is error-term specified for the model, Kriging becomes an inexact interpolator. May 11, 2015 at 20:07
  • @Jeffrey Evans : thank you for your comment. However, to the best of my knowledge, the nugget effect does not affect the data range (values being larger or smaller than the values observed in the neighborhood) : the sum of the weights is always equal to one, with or without nugget effect.
    – radouxju
    May 12, 2015 at 6:48
  • Yes, I should have been clearer. It should not effect range and as such, global min or max. But the nugget can cause the at observation(s) value to vary. Whereas, if there is no error term it is an exact interpolator. Only transcendentally related to the OP's question. May 12, 2015 at 13:39
2

Simple kriging may stay inside the data range, depending on the simple kriging mean, but ordinary kriging typically will not:

> library(gstat)
> library(sp)
> p = SpatialPoints(cbind(c(0,0,0,0), 1:4))
> p$z = c(0,1,1,0)
> p
  coordinates z
1      (0, 1) 0
2      (0, 2) 1
3      (0, 3) 1
4      (0, 4) 0
> krige(z~1, p, SpatialPoints(cbind(0,2.5)), vgm(1, "Sph", 2))
[using ordinary kriging]
  coordinates var1.pred  var1.var
1    (0, 2.5)  1.055556 0.3880208
> krige(z~1, p, SpatialPoints(cbind(0,2.5)), vgm(1, "Sph", 2), beta = 0)
[using simple kriging]
  coordinates var1.pred  var1.var
1    (0, 2.5) 0.9975884 0.3807338
> krige(z~1, p, SpatialPoints(cbind(0,2.5)), vgm(1, "Sph", 2), beta = .5)
[using simple kriging]
  coordinates var1.pred  var1.var
1    (0, 2.5)   1.06873 0.3807338

the reason for ordinary kriging to go beyond the data range is that it has to estimate the mean effect from the data, and hence (some) kriging weights become negative.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.