(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/
[[alternative HTML version deleted]]
_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo