[R-sig-Geo] Problem with universal kriging using gstat
Tomislav Hengl
hengl at science.uva.nl
Mon Apr 14 10:36:31 CEST 2008
Auxiliary variables that are used to explain the trend-part of variation need to be available also
at all new prediction locations.
see ?krige:
"newdata - data frame or Spatial object with prediction/simulation locations; should contain
attribute columns with the independent variables (if present) and (if locations is a formula) the
coordinates with names as defined in locations"
Gstat obviously can not find X and Y coordinates of your new locations (data.grid).
Try instead:
> data.grid <- expand.grid(x=seq(xLL,xUL,xN), y=seq(xLL,xUL,xN))
> names(data.grid) = c("X","Y")
> gridded(data.grid) <- ~X+Y
cheers,
Tom Hengl
http://spatial-analyst.net/
-----Original Message-----
From: r-sig-geo-bounces at stat.math.ethz.ch [mailto:r-sig-geo-bounces at stat.math.ethz.ch] On Behalf Of
Yong Li
Sent: maandag 14 april 2008 6:45
To: r-sig-geo at stat.math.ethz.ch
Subject: [R-sig-Geo] Problem with universal kriging using gstat
Hi ALL,
Can any expert to see my mistake in the following R script when I try the gstat universal kriging?
The error occurs at the last step. It sounds I missed the setup for the names of coordinates of the
SpatialGrid "data.grid".
Regards
Yong
> memory.size()
[1] 47930616
> memory.size(TRUE)
[1] 85377024
> memory.limit(size=2048)
NULL
> round(memory.limit()/1048576.0, 2)
[1] 2048
> options(scipen=3)
>
> options(digits=15)
> rm(list=ls())
> require(sp)
[1] TRUE
> require(gstat)
[1] TRUE
> require(maptools)
[1] TRUE
> require(foreign)
[1] TRUE
>
> cellsize <- 10
>
> # 1 2 3 4
> VarName=c("logit(SOM)","logit(TN)","logit(OLSENP)","logit(EXTK)")
> out=paste("Variable","No","Model","C0","C","Spatial","Range","R2","p","SSE",sep=",")
> setwd("E:\\Rcode\\EJSS\\Hongtong\\village")
> data <- read.dbf("libaocun_gs.dbf")
> names(data)
[1] "ID" "XCOOR" "YCOOR" "NO" "CDBH" "NO3N" "NH4N" "MINERALN" "SOM"
"TOTALN" "OLSENP" "EXTK"
[13] "TN" "X" "Y"
> class(data)
[1] "data.frame"
> names(data)[14] <- "X"
> names(data)[15] <- "Y"
>
> data$X <- data$X + 1750
> data$Y <- data$Y + 650
>
> coordinates(data) <- ~X+Y
> proj4string(data) <- CRS("+proj=tmerc +lat_0=0 +lon_0=111 +k=1.0 +x_0=500000 +y_0=0 +ellps=krass
+units=m +no_defs +towgs84=22,-118,30.5,0,0,0,0")
>
> #read in a shape file of the boundary
> aSHAPE <- readShapePoly("libao_bd.shp", IDvar="BSM", proj4string=CRS(proj4string(data)))
>
> #generate the grid coordinates (in meters)
> xLL <- round(slot(aSHAPE,"bbox")[1]) - 100
> xUR <- round(slot(aSHAPE,"bbox")[3]) + 100
> yLL <- round(slot(aSHAPE,"bbox")[2]) - 100
> yUR <- round(slot(aSHAPE,"bbox")[4]) + 100
> xN <- round((xUR-xLL)/cellsize)
> yN <- round((yUR-yLL)/cellsize)
> data.grid = SpatialGrid(GridTopology(c(xLL,yLL),c(cellsize,cellsize),c(xN,yN)))
> proj4string(data.grid) <- CRS(proj4string(aSHAPE))
>
>
> #data logit transformation
> SOM_MAX <- max(data$SOM)*1.1
> SOM_MIN <- min(data$SOM)*0.9
> SOM_DIFF <- SOM_MAX - SOM_MIN
> data$SOMt <- log(((data$SOM-SOM_MIN)/SOM_DIFF)/(1-(data$SOM-SOM_MIN)/SOM_DIFF))
>
> TN_MAX <- max(data$TN)*1.1
> TN_MIN <- min(data$TN)*0.9
> TN_DIFF <- TN_MAX - TN_MIN
> data$TNt <- log(((data$TN-TN_MIN)/TN_DIFF)/(1-(data$TN-TN_MIN)/TN_DIFF))
>
> OLSENP_MAX <- max(data$OLSENP)*1.1
> OLSENP_MIN <- min(data$OLSENP)*0.9
> OLSENP_DIFF <- OLSENP_MAX - OLSENP_MIN
> data$OLSENPt <-
log(((data$OLSENP-OLSENP_MIN)/OLSENP_DIFF)/(1-(data$OLSENP-OLSENP_MIN)/OLSENP_DIFF))
>
> EXTK_MAX <- max(data$EXTK)*1.1
> EXTK_MIN <- min(data$EXTK)*0.9
> EXTK_DIFF <- EXTK_MAX - EXTK_MIN
> data$EXTKt <- log(((data$EXTK-EXTK_MIN)/EXTK_DIFF)/(1-(data$EXTK-EXTK_MIN)/EXTK_DIFF))
>
> #SOM
> # plot
> X11(width=8, height=6.5)
> par(mfrow=c(1,1))
> spplot(aSHAPE["BSM"], scales=list(draw=TRUE, cex=0.7), xlab="Easting (m)", ylab="Northing (m)",
+ sp.layout=list("sp.points", pch="+", col="black", data), col.regions=FALSE,
colorkey=FALSE)
>
> X11(width=8, height=6.5)
> par(mfrow=c(1,2))
> hist(data$SOMt, main="", xlab=VarName[1], n=25)
> boxplot(data$SOMt, xlab=VarName[1])
>
> #estimate semivariogram model
> soil.v <- variogram(SOMt~X+Y+X*Y+X^2+Y^2, data=data, cutoff=1050, width=90)
> vmodel <- vgm(0.5, "Sph", 1000, 0.1)
> v.sph <- fit.variogram(object=soil.v, model=vmodel, fit.sills=TRUE, fit.ranges=TRUE,
fit.method=7)
> v.sph
model psill range
1 Nug 0.269063860535796 0.000000000000
2 Sph 0.217370623520010 815.994438576304
> X11(width=8, height=6.5)
> par(mfrow=c(1,1))
> plot(soil.v, model=v.sph, col="red", cex=1, lwd=2.0, main=VarName[1], xlab="Separation distance
(m)")
>
> #Univeral kriging
> data.gstat <- gstat(id="SOMt", formula=SOMt~X+Y+X*Y+X^2+Y^2, data=data, nmax=15, model=v.sph)
>
> #Predicting surface
> data.grid <- predict(data.gstat, data.grid)
Error in eval(expr, envir, enclos) : object "X" not found
>
>
[[alternative HTML version deleted]]
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo at stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
More information about the R-sig-Geo
mailing list