Hi,
I want to perform spatial interpolation of soil moisture (here named 'sm')
using regression kriging (RK) following the example given by Tom Hengl
http://spatial-analyst.net/wiki/index.php?title=Spatial_prediction_of_soil_moisture)
and compare results with OK.
The covariate is the soil electrical resistivity (her named 'res') and is stored
in the same data.frame of the target variable.
sm and res data were collected on a regular grid 200x60 m with a 5m sampling
step and the coordinates are given in ED50, UTM zone33. CRS.
Searching on the sig-Geo archive i discovered that other peoples had more or
less the same problem as mine, but there are some differences.
All the examples i read used the meuse.grid data set which already stores
covariates (dist, soils, ffreq...) and coordinates at an higher spatial
resolution than the target variable sample. This is not my case. because res is
sampled at the points of sm.
I had to define the grid by myself.
#read data
casa032009<- read.csv("C:/data/morfeo/morfeo_data/casa_032009.csv")
str(casa032009)
'data.frame': 533 obs. of 9 variables:
$ objectid: int 489 490 491 492 493 494 495 496 1 2 ...
$ row : int 185 180 175 170 165 160 155 150 195 190 ...
$ col : Factor w/ 13 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 2 2 ...
$ key : Factor w/ 533 levels "A0","A10","A100",..: 21 20 19 18 17 16 15 14
64 63 ...
$ ka : num 23.4 19 14.4 14.5 16.6 16.8 14.2 14.8 16.7 21.5 ...
$ sm : num 37.3 32 26.7 26.7 29 29.3 26.5 27.1 29.2 35.2 ...
$ x : num 288097 288102 288107 288112 288117 ...
$ y : num 4754051 4754051 4754052 4754052 4754053 ...
$ res : num 55.1 56.3 63 62.9 57.2 ...
#explicit spatial object
coordinates(casa032009)<- c("x", "y")
# divide the data set in calibration and validation groups
> dim(casa032009 at data)[1]/3
>valid.id<- sample(1:dim(casa032009 at data)[1],
>casa032009.val<- casa032009[valid.id,] #valiadtion data set
>str(casa032009.val)
>casa032009.cal<- casa032009[!is.element(1:dim(casa032009 at data)[1],
valid.id),] #calibration data set, almost 350 points
>lm.casa<- lm(sm ~ res, data= as.data.frame(casa032009.cal))
>summary(lm.casa)
v.rk<- variogram(residuals(lm.casa)~1, casa032009.cal)
> plot(v.rk, pl=T)
>vm.rk<- vgm(psill=16, "Exp", range=9, nugget=2) #eye-ball fit
>plot(v.rk, pl=T, model=vm.rk)
>vmf.rk<- fit.variogram(v.rk, vm.rk) #statistical fit
>vmf.rk
>plot(v.rk, pl=T, model=vmf.rk)
bbox(casa032009)
(min.x<- bbox(casa032009)["x","min"]-2)
(min.y<- bbox(casa032009)["y","min"]-1.75)
(max.x<- bbox(casa032009)["x","max"]+2)
(max.y<- bbox(casa032009)["y","max"]+1.75)
(cells.x<- (max.x - min.x)/4)
(cells.y<- (max.y - min.y)/4)
casa.grid<- (GridTopology(c(min.x+2.5, min.y+2.5), c(5, 5), c(cells.x,
cells.y)))
casa.grid<- SpatialGrid(casa.grid)
str(casa.grid)
sm.rk<- krige(sm ~ res, location=casa032009.cal, newdata=casa.grid,
model=vmf.rk)
The problem is : I understand the 'newdata' parameter of the krige function
needs a SpatialGrifDataFrame containig res data at each grid node. I don't know
how create a SpatialGridDataFrames storing res data on points that are different
from the ones that were sampled.
Thanks for any help.
Giuseppe
[[alternative HTML version deleted]]