Thanks,
A good way of incorporating it.
Paul
Edzer Pebesma schreef:
(I'm adding r-sig-geo to this thread)
Paul/Ashton,
I included your code, Paul; I also added the option (with the same
argument name) to variogramLine so you can now also do e.g. a
variogramLine(vgm(1, "Sph", 1, anis=c(0, 0.5)), dir =
c(1/sqrt(c(2,2)),0), dist_vector = c(0, 0.1, 0.5, 1, 2))
(that is, irregular distances at a given direction and anisotropic model)
--
Edzer
Paul Hiemstra wrote:
Hi Ashton,
I had the same problem and also tried your workaround. But the
problem that that is really slow. To get past this I delved into te
C-source code of gstat and reworked one of the C-functions to get
what I wanted. This solution works much faster (few orders of
magnitude).
In order to get this working you need to reinstall gstat with one
modified .c file (s.c, located in the src directory of the source
version of the gstat package). I added the modified .c file as an
attachment (hope that is possible on the mailing list). Once you
replaced s.c you install gstat to get the new C-function available.
The new C-function accepts a vector of distances as input and returns
a vector of gammas. An example providing an R-wrapper function:
getGammas = function(dist_vector, varModel, covariance = FALSE) {
# dist_vector is the input vector with distances
# varModel is the variogram model
# covariance is a logical to choose for semivariances (FALSE)
# or for covariances (TRUE)
.Call("gstat_init", as.integer(0))
gstat:::load.variogram.model(varModel)
ret = .Call("get_covariance_list", as.integer(c(0,0)),
as.integer(covariance), as.numeric(dist_vector))[[2]]
.Call("gstat_exit", 0)
ret }
library(gstat)
data(meuse)
vgm1 <- variogram(log(zinc)~1, ~x+y, meuse)
m = fit.variogram(vgm1, vgm(1,"Sph",300,1))
getGammas(seq(1,1000, 100), varModel = m)
It is experimental code but it works very well for me, much faster
than the workaround with variogramLine. Please let me know what you
think of this solution.
cheers and hth,
Paul
Ashton Shortridge wrote:
I have a vector of lags for which I'd like to calculate covariances,
given a variogram (covariance) model. variogramLines() almost seems
to do this; however, it generates a table of distances and
covariances for a sequence of values between user-specified min and
max distances - the user can't pass a vector of h-values.
I was hoping I could simply modify the R wrapper code for
variogramLines to do what I wished, but it seems that the relevant
code is called from elsewhere.
My current workaround is to call variogramLines for each lag value,
specifying an npoints of two. For example, using a vgm object for an
omnidirectional variogram called testmod, and interested in the
covariance for a distance of 15, I run:
gstat.covar <- variogramLine(testmod, 15, 2, covariance=TRUE)
and then grab the second row in gstat.covar. This is tedious, and
I'm guessing a better way is out there!
Thanks for any help,
Ashton
------------------------------------------------------------------------
_______________________________________________
Gstat-info mailing list
[EMAIL PROTECTED]
http://mailman.geo.uu.nl/mailman/listinfo/gstat-info
--
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster,
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de/
--
Drs. Paul Hiemstra
Department of Physical Geography
Faculty of Geosciences
University of Utrecht
Heidelberglaan 2
P.O. Box 80.115
3508 TC Utrecht
Phone: +31302535773
Fax: +31302531145
http://intamap.geo.uu.nl/~paul
_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo