Example of universal kriging with R/gstat in GRASS needed
Roger,
This is what the summary() command gives me before/after I use
fullgrid(dem) <- FALSE
dem<-readFLOAT6sp("ohrfc.dem")
> summary(dem)
Object of class SpatialGridDataFrame
Coordinates:
min max
coords.x1 -351000 675000
coords.x2 -486000 486000
Is projected: TRUE
proj4string : [+proj=lcc +lat_0=39.0000000000 +lat_1=60.0000000000
+lat_2=30.0000000000 +lon_0=-86.0000000000 +x_0=0.0000000000
+y_0=0.0000000000 +a=6378137 +rf=298.257223563 +no_defs
+towgs84=0.000,0.000,0.000]
Number of points: 2
Grid attributes:
cellcentre.offset cellsize cells.dim
1 -346500 9000 114
2 -481500 9000 108
Data attributes:
ohrfc.dem
Min. : 0.0
1st Qu.: 183.0
Median : 244.0
Mean : 302.2
3rd Qu.: 335.0
Max. :1707.1
NA's :1513.0
=============================================
> fullgrid(dem)<-FALSE
> summary(dem)
Object of class SpatialPixelsDataFrame
Coordinates:
min max
s1 -351000 675000
s2 -432000 468000
Is projected: TRUE
proj4string : [+proj=lcc +lat_0=39.0000000000 +lat_1=60.0000000000
+lat_2=30.0000000000 +lon_0=-86.0000000000 +x_0=0.0000000000
+y_0=0.0000000000 +a=6378137 +rf=298.257223563 +no_defs
+towgs84=0.000,0.000,0.000]
Number of points: 10799
Data attributes:
ohrfc.dem
Min. : 0.0
1st Qu.: 183.0
Median : 244.0
Mean : 302.2
3rd Qu.: 335.0
Max. :1707.1
> names(dem)
[1] "ohrfc.dem"
Regards,
Tom
Roger Bivand wrote:
On Fri, 28 Apr 2006, Thomas Adams wrote:
Roger,
Your suggestion:
fullgrid(dem) <- FALSE
did turn dem into class type SpatialGridDataFrame, but when I tried:
z <- predict(UK_fit,newdata=dem)
I got an error:
Error in model.frame(... :
invalid variable type.
I think I should restate the problem:
I have a file 'temps' which has class SpatialPointsDataFrame read from
GRASS 6.1, that looks like:
coordinates cat x y z temp name
1 (-341460, -2154.42) 1 -90.05 38.90 166 63 ALN
2 (-198769, 301388) 2 -88.47 41.77 215 67 ARR
3 (-334899, -40321) 3 -89.95 38.55 140 66 BLV
4 (-240028, 163910) 4 -88.92 40.48 268 69 BMI
5 (-187957, 114806) 5 -88.27 40.04 229 64 CMI
6 (-351730, -37305.9) 6 -90.15 38.57 126 65 CPS
7 (-242424, 98244.7) 7 -88.92 39.87 204 66 DEC
8 (-179844, 315889) 8 -88.24 41.91 232 69 DPA
9 (-136093, -24538.2) 9 -87.61 38.76 131 68 LWV
10 (-278964, -126152) 10 -89.25 37.78 125 66 MDH
11 (-140792, 302011) 11 -87.75 41.79 187 73 MDW
12 (-364737, 274189) 12 -90.51 41.45 180 73 MLI
13 (-190503, 54493.9) 13 -88.28 39.48 219 64 MTO
and I have a a file 'dem' which has class SpatialGridDataFrame which
just consists of grid of elevation values read from GRASS 6.1 using
dem<-readFLOAT6sp(). (Sorry, I know I'm repeating myself).
What I want to do is to use the grid of elevation values ('dem') as a
proxy in the spatial interpolation of the 'temp' values in my 'temps'
file that are located at the coordinates in parentheses(). Notice that
the temps file also has 'z' values of elevations. So, is this what you
already understood? Converting 'dem' to a SpatialPixelsDataFrame seemed
to only leave me with the grid locations and not the elevation values ?
is this right.
What does: summary(dem) say before and after doing fullgrid(dem) <- FALSE? Afterwards it should be a SpatialPixelsDataFrame with names(dem) being "z". Saying summary(dem) will give you an idea of what is inside, str() should too. Roger PS. This is usually a one-off thing, once it works, you note down how, and then it just does from then on.
Thanks again for your help!
Regards,
Tom
Roger Bivand wrote:
On Fri, 28 Apr 2006, Thomas Adams wrote:
Roger,
This got me further along, but I am encountering a problem with:
z <- predict(UK_fit, newdata=BMcD_SPx)
The gstat step works for me, where I have:
UK_fit<-gstat(formula=temps$temp~dem,data=temps,model=efitted)
temps has class SpatialPointsDataFrame:
coordinates cat x y z temp name
1 (-341460, -2154.42) 1 -90.05 38.90 166 63 ALN
2 (-198769, 301388) 2 -88.47 41.77 215 67 ARR
3 (-334899, -40321) 3 -89.95 38.55 140 66 BLV
4 (-240028, 163910) 4 -88.92 40.48 268 69 BMI
5 (-187957, 114806) 5 -88.27 40.04 229 64 CMI
6 (-351730, -37305.9) 6 -90.15 38.57 126 65 CPS
7 (-242424, 98244.7) 7 -88.92 39.87 204 66 DEC
8 (-179844, 315889) 8 -88.24 41.91 232 69 DPA
9 (-136093, -24538.2) 9 -87.61 38.76 131 68 LWV
10 (-278964, -126152) 10 -89.25 37.78 125 66 MDH
11 (-140792, 302011) 11 -87.75 41.79 187 73 MDW
12 (-364737, 274189) 12 -90.51 41.45 180 73 MLI
13 (-190503, 54493.9) 13 -88.28 39.48 219 64 MTO
and dem has class SpatialGridDataFrame and just consists of grid values.
I think
fullgrid(dem) <- FALSE
should make a SpatialPixelsDataFrame, but you'll have to make sure the
name of the dem variable is the same as in the formula.
Roger
I tried to create a SpatialPixelsDataFrame for predict(), but with (for
example):
m = SpatialPixelsDataFrame(points=meuse.grid[c("x","y")],data=meuse.grid)
I have nothing like meuse.grid, so this does not work. I can use
image(dem), which produces a plot of elevation values. My point is that
meuse.grid and my dem files have very different structures.
I'm not sure where to go to from here.
Regards,
Tom
Roger Bivand wrote:
On Thu, 27 Apr 2006, Thomas Adams wrote:
List:
I can not seem to work out the syntax for using R/gstat within a GRASS
6.1 session to do universal kriging. I have a DEM (elevation data on a
grid) and point data for temperature; theoretically, the temperatures
should relate to elevation. So, I am trying to spatially interpolate the
temperature data based on the elevations at the grid points. How do I
setup the gstat command in R/gstat (and using spgrass6, of course)? I
have no trouble reading in my elevation data (DEM) from GRASS and I have
no problem doing ordinary kriging of my temperature data using
GRASS/R/gstat.
What do the data look like? Do you have temperature and elevation at the
observation points and elevation over the grid? If temperature is the
variable for which you want to interpolate, then the formula argument in
the gstat() function would be temp ~ elev, data=pointsdata (if a
SpatialPointsDataFrame no need for location= ~ x + y). Then the predict()
step would need a SpatialGridDataFrame object as newdata, with elev as
(one of) the columns in the data slot.
An example for the Meuse bank data in Burrough and McDonnell:
cvgm <- variogram(Zn ~ Fldf, data=BMcD, width=100, cutoff=1000)
uefitted <- fit.variogram(cvgm, vgm(psill=1, model="Exp", range=100,
nugget=1))
UK_fit <- gstat(id="UK_fit", formula = Zn ~ Fldf, data = BMcD,
model=uefitted)
z <- predict(UK_fit, newdata=BMcD_SPx)
where BMcD_SPx is a SpatialPixelsDataFrame (the grid has ragged edges)
with flood frequencies in Fldf (actually a factor, but works neatly).
Hope this helps,
Roger
Regards,
Tom
Thomas E Adams National Weather Service Ohio River Forecast Center 1901 South State Route 134 Wilmington, OH 45177 EMAIL: thomas.adams at noaa.gov VOICE: 937-383-0528 FAX: 937-383-0033