I'm fitting an exponential model to an empirical semivariogram using the package gstat.
My dataset (data) has latitude and longitude values in decimal degrees.
The range estimated using fit.variogram()
doesn't match the range that I'd expect by looking at the plot of the model. See code and figures below.
This is the output from fit.variogram()
:
model psill range
1 Nug 26.66719 0.00000
2 Exp 26.26643 25.76976
From here I would expect the range corresponding to a sill of ~53 (26.66719+26.26643) to be 25.76976. However, when looking at the plot the range corresponding to a sill of ~53 is >60 km.
library(gstat)
library(sp)
coordinates(data)= ~ longitude+latitude
proj4string(data)=CRS("+longlat")
TheVariogram=variogram(Svmean~1, data=data, cutoff=90)
plot(TheVariogram) #to get seed parameters
lzn.fit <- fit.variogram(TheVariogram, model = vgm(psill=60, model="Exp", nugget=20, range=70),fit.method=6)
plot(TheVariogram, pl=F, model=lzn.fit, xlab="Distance (km)", ylab=expression(Semivariance (dB^2)))
The range reported is the range parameter a in the model exp(-h/a), and not the value at which the exponential model reaches 95% of its (partial) sill. To get that latter value, multiply by (approximately) 3.