[R] How to set the dimension of a matrix correctly?

Ben Bolker bbolker at gmail.com
Wed Apr 13 14:21:14 CEST 2011


Lin Pei-Ling <barthealin <at> hotmail.com> writes:

>  Hi all, I use kriging to interpolate the precipitation from
> stations, but the map of this results show lots of stripes. (please
> see the attachment)I think there's something wrong with the setting
> of the dimension of this matrix, however, I have no idea how to know
> or test to see if this setting is correct or not.I've tried to
> switch the latitude and longitude, but still got the same results
> (stripes). Hope anyone can take a look at it and give me some
> suggestion.  Thanks for help,Peiling


  My main suggestion is that you try to boil your example down
to something smaller, simpler, and reproducible.  The attention
span of R-helpers is only about 10 minutes, maximum (maybe a little
longer for problems they are particularly interested in), and
it took me almost that long just to reformat your R code so
it was readable.

   Often the process of trying to simplify the problem leads
you to discover your own problem.

  good luck,
   Ben Bolker


  
> 
> ------------------
library(geoR) #functions for geostatistical data analysis
coords<- as.matrix(read.table('/Users/R/Code/stncoords.dat'))
ppt<- as.matrix(read.table('/Users/R/Code/ppt_15day.dat'))
xx <- dim(ppt) # (77,528)
plat <- seq(37.5,42,by=0.07273)
plon <- seq(-105.5,-93.5,by=0.07273)
pgrid <- expand.grid(x=plon,y=plat)
pdim <- dim(pgrid) # (10230,2)
#plot(pgrid, cex=0.5)
lat <- coords[,1] 
lon <- coords[,2] 
ppt1 <- ppt[,1:xx[2]] # 1:528
pptpred <- matrix(0,ncol=xx[2],nrow=1)
 
############# Only test one period data##################
ptemp <- ppt1[,3]		
ll <- which(ptemp>0)
ppt2 <- matrix(0,nrow=length(ll),ncol=3) # (lon,lat,ptemp)		
ppt2[,1] <- lat[ll] # y-axis
ppt2[,2] <- lon[ll] # x-axis
ppt2[,3] <- ptemp[ll] # ppt
pptd <- as.geodata(ppt2)
bin1 <- variog(pptd) 
## 	plot(bin1) # fig1
bin2 <- variog(pptd,estimator.type="modulus")
##	plot(bin2) # fig2
ini1 <- max(bin1$v) 		
ols <- variofit(bin1, fix.nugget = FALSE,
   weights="cressie",ini.cov.pars=c(ini1,4))
kc <- krige.conv(pptd,loc=pgrid,
  krige=krige.control(type.krige="OK",trend.d="2nd",
   trend.l="2nd",cov.pars=ols[2]$cov.pars))
pvalxx <- which(kc$predict < 0)		
kc$predict[pvalxx] <- 0		
## ?? something got mangled here ??
## pptpred <- kc$predict		}else{	  
##      pptpred <- 0*(1:pdim[1])	}}
 
## need to fit the lat/lon frame
newpptpred <- matrix(pptpred, nrow=62, ncol=165) 
plat <- seq(37.5,42,by=0.07273)  ## repeat from above?
plon <- seq(-105.5,-93.5,by=0.07273)  ## repeat from above?
lat2 <- which((plat> 37)&(plat< 42))
lon2 <- which((plon> -106)&(plon< -93))
## fixed ? typos ?
newpptpred <- pptpred[lat2,lon2]
nLevel <- 60
quartz()
filled.contour(plon,plat,t(newpredppt),
   col=rainbow(nLevel),plot.axes={axis(1);axis(2)})



More information about the R-help mailing list