[R] Re: geoR size limit problem

Ole F. Christensen olefc at daimi.au.dk
Fri Jul 25 13:11:28 CEST 2003


Dear Miha

I can reproduce your problem. The cause of the problem is not the size 
of the data (2500), but a combination of the number data locations and 
prediction location [could be that the covariance matrix of the data and 
the prediction variables is the computational bottleneck].
A workaround by splitting the set of prediction locations into smaller 
blocks is given below.

As I wrote in my previous e-mail, I would consider trying the kriging 
functions in the geostatistical packages.


## Example

library(geoR)
g.data <-as.geodata(cbind(rnorm(2500),rnorm(2500), rnorm(2500)))

expvar<-variog(g.data, uvec=seq(0,1000,25), option="bin")
maternfit<-variofit(expvar, ini=c(1600,300), cov.model="matern", 
fix.nug=TRUE, nug=25, kappa=1.5, max.dist=800, weights="npairs")


p.grid<-expand.grid((1:900)/900,(1:650)/650)

## this doesn't work
krige.matern<-krige.conv(g.data, loc=p.grid, 
krige=krige.control(obj.m=maternfit, type="OK"))


## workaround (be patient, it is slow):
nm.grid <- nrow(p.grid)
result <- list(predict=rep(0,nm.grid), krige.var=rep(0,nm.grid))
claas(result) <- "kriging"
##for(ii in 1:585){
for(ii in 1:5){
temp <- krige.matern<-krige.conv(g.data, 
loc=p.grid[(ii-1)*1000+(1:1000),], krige=krige.control(obj.m=maternfit, 
type="OK"))[c("predict", "krige.var")]
result$predict[(ii-1)*1000+(1:1000)] <- temp$predict
result$krige.var[(ii-1)*1000+(1:1000)] <- temp$krige.var
print(ii)
}


Best Regards Ole



Miha STAUT wrote:

>> Dear Miha (cc: Paulo Ribeiro [the developer of geoR, who is not 
>> subscribed to R-help])
>>
>> Some reproducible code would help here.
>
>
> Unfortunately I do not have an internet connect on my computer, that 
> is why I did every thing very descriptive. Anyway I will try:
>
> str(df)
>   [#approx 2500]
> $ x ...
> $ y ...
> $ z ...
> library(geoR)
> g<-as.geodata(df)
> expvar<-variog(g, uvec=seq(0,1000,25), option="bin")
> matern<-variofit(expvar, ini=c(1600,300), cov.model="matern", 
> fix.nug=T, nug=25, kappa=1.5, max.dist=800, weights="npairs")
>
> library(GRASS)
> G<-gmeta()
> grid<-expand.matrix(G$xseq,G$yseq)
> length(G$xseq)
> 900 #approx
> length(G$yseq)
> 650 #approx
> krige.matern<-krige.conv(g, loc=grid, 
> krige=krige.control(obj.m=matern, type="OK"))
>
> #5 min processing
> can not allocate vector of 1500000000 #approx
>
> Thanks, Miha Staut
>
>>
>> Guessing :
>>
>> * geoR does not implement kriging with local neighbourhoods, but 
>> instead conditions on all data. Therefore having 2500 data points 
>> would imply having a covariance matrix of size 2500*2500 approx 
>> 6million . Not sure if this is too much, but I do not think so.
>
>
> _________________________________________________________________

> http://join.msn.com/?page=features/virus
>
>

-- 
Ole F. Christensen
Center for Bioinformatik
Datalogisk Institut
Aarhus Universitet
Ny Munkegade, Bygning 540
8000 Aarhus C
Denmark




More information about the R-help mailing list