R for Macroecology Spatial data continued Projections Cylindrical

  • Slides: 25
Download presentation
R for Macroecology Spatial data continued

R for Macroecology Spatial data continued

Projections Cylindrical projections Lambert CEA

Projections Cylindrical projections Lambert CEA

Behrmann EA Latitude of true scale = 30

Behrmann EA Latitude of true scale = 30

Choosing a projection What properties are important? Angles (conformal) Area (equal area) Distance from

Choosing a projection What properties are important? Angles (conformal) Area (equal area) Distance from a point (equidistant) Directions should be strait lines (gnomonic) Minimize distortion Cylindrical, conic, azimuthal http: //www. geo. hunter. cuny. edu/~jochen/gtech 201/lectures/lec 6 concepts/map%20 coordinate%20 systems/how%20 to%20 choose%20 a%20 pro jection. htm

Projecting points project() function in the proj 4 package is good Can also use

Projecting points project() function in the proj 4 package is good Can also use project() from rgdal sp. Transform() (in rgdal) works for Spatial. Points, Spatial. Lines, Spatial. Polygons. . . Can also handle transformations from one datum to another

Projecting points > > > lat = rep(seq(-90, by = 5), (72+1)) long =

Projecting points > > > lat = rep(seq(-90, by = 5), (72+1)) long = rep(seq(-180, by = 5), each = (36+1)) xy = project(cbind(long, lat), "+proj=cea +datum=WGS 84 +lat_ts=30") par(mfrow = c(1, 2)) plot(long, lat) plot(xy)

Projecting a grid > mat = raster("MAT. tif") > mat = aggregate(mat, 10) >

Projecting a grid > mat = raster("MAT. tif") > mat = aggregate(mat, 10) > bea = project. Extent(mat, "+proj=cea +datum=WGS 84 +lat_ts=30") > mat class : Raster. Layer dimensions : 289, 288, 83232 (nrow, ncol, ncell) resolution : 0. 04166667, 0. 04166667 (x, y) extent : 0, 12, 47. 96667, 60. 00833 (xmin, xmax, ymin, ymax) projection : +proj=longlat +ellps=WGS 84 +datum=WGS 84 +no_defs +towgs 84=0, 0, 0 values : in memory min value : -22. 88 max value : 113. 56 > bea class : Raster. Layer dimensions : 289, 288, 83232 (nrow, ncol, ncell) resolution : 4016. 896, 3137. 077 (x, y) extent : 0, 1156866, 5450663, 6357279 (xmin, xmax, ymin, ymax) projection : +proj=cea +datum=WGS 84 +lat_ts=30 +ellps=WGS 84 +towgs 84=0, 0, 0 values : none

Projecting a grid > bea = project. Extent(mat, "+proj=cea +datum=WGS 84 +lat_ts=30") > res(bea)

Projecting a grid > bea = project. Extent(mat, "+proj=cea +datum=WGS 84 +lat_ts=30") > res(bea) = xres(bea) > mat. BEA = project. Raster(mat, bea) > mat class : Raster. Layer dimensions : 289, 288, 83232 (nrow, ncol, ncell) resolution : 0. 04166667, 0. 04166667 (x, y) extent : 0, 12, 47. 96667, 60. 00833 (xmin, xmax, ymin, ymax) projection : +proj=longlat +ellps=WGS 84 +datum=WGS 84 +no_defs +towgs 84=0, 0, 0 values : in memory min value : -22. 88 max value : 113. 56 > mat. BEA class dimensions resolution extent projection values min value max value : : : : Raster. Layer 169, 288, 48672 (nrow, ncol, ncell) 4638. 312, 4638. 312 (x, y) 0, 1335834, 4721690, 5505565 (xmin, xmax, ymin, ymax) +proj=cea +datum=WGS 84 +ellps=WGS 84 +towgs 84=0, 0, 0 +lat_ts=30 in memory -21. 65266 113. 3013

How does it look?

How does it look?

What happened? x = x. From. Cell(bea, 1: ncell(bea)) y = y. From. Cell(bea,

What happened? x = x. From. Cell(bea, 1: ncell(bea)) y = y. From. Cell(bea, 1: ncell(bea)) plot(x, y, pch = ". ") xy. LL = project(cbind(x, y), "+proj=cea +datum=WGS 84 +latts=30”, inverse = T) plot(xy. LL, pch = ". ")

What happened Grid of points in lat-long (where each point corresponds with a BEA

What happened Grid of points in lat-long (where each point corresponds with a BEA grid cell) Sample original raster at those points (with interpolation) Different spacing in y direction Identical spacing in x direction

What are the units? > mat. BEA class : Raster. Layer dimensions : 169,

What are the units? > mat. BEA class : Raster. Layer dimensions : 169, 288, 48672 (nrow, ncol, ncell) resolution : 4638. 312, 4638. 312 (x, y) extent : 0, 1335834, 4721690, 5505565 (xmin, xmax, ymin, ymax) projection : +proj=cea +datum=WGS 84 +ellps=WGS 84 +towgs 84=0, 0, 0 +lat_ts=30 values : in memory min value : -21. 65266 max value : 113. 3013 Meters, along the latitude of true scale (30 N and 30 S)

A break to try things out Projections

A break to try things out Projections

Spatially structured data Tobler’s first law of geography “Everything is related to everything else,

Spatially structured data Tobler’s first law of geography “Everything is related to everything else, but near things are more related than distant things. ” Waldo Tobler Nearby data points often have similar conditions Understanding these patterns can provide insights into the data, and are critical for statistical tests

Visualizing spatial structure The correlogram Often based on Moran’s I, a measure of spatial

Visualizing spatial structure The correlogram Often based on Moran’s I, a measure of spatial correlation Positive autocorrelation Negative autocorrelation

Making Correlograms First goal – get x, y and z vectors x = x.

Making Correlograms First goal – get x, y and z vectors x = x. From. Cell(mat, 1: ncell(mat)) y = y. From. Cell(mat, 1: ncell(mat)) z = get. Values(mat) assign. Colors = function(z) { z = (z-min(z, na. rm=T))/(max(z, na. rm=T)-min(z, na. rm=T)) color = rep(NA, length(z)) index = which(!is. na(z)) color[index] = rgb(z[index], 0, (1 -z[index])) return(color) } plot(x, y, col = assign. Colors(z), pch = 15, cex = 0. 2)

Pairwise distance matrix Making a correlogram starts with a pairwise distance matrix! (N data

Pairwise distance matrix Making a correlogram starts with a pairwise distance matrix! (N data points requires ~ N 2 calculations) Big data sets need to be subsetted down > co = correlog(x, y, z, increment = 10, resamp = 0, latlon = T, na. rm=T) Error in outer(zscal, zscal) : alloc. Matrix: too many elements specified

Pairwise distance matrix Making a correlogram starts with a pairwise distance matrix! (N data

Pairwise distance matrix Making a correlogram starts with a pairwise distance matrix! (N data points requires ~ N 2 calculations) Big data sets need to be subsetted down > co = correlog(x, y, z, increment = 100, resamp = 0, latlon = T, na. rm=T) Error in outer(zscal, zscal) : alloc. Matrix: too many elements specified > length(x) [1] 83232 > length(x)^2 [1] 6927565824 sample() can help us do this

Quick comments on sample() takes a vector and draws elements out of it >

Quick comments on sample() takes a vector and draws elements out of it > v = c("a", "c", "f", "g", "r") > sample(v, 3) [1] "r" "f" "c" > sample(v, 3, replace = T) [1] "c" "a" > sample(v, 6, replace = F) Error in sample(v, 6, replace = F) : cannot take a sample larger than the population when 'replace = FALSE‘ > sample(1: 20, 20) [1] 12 14 2 8 6 5 10 4 7 9 18 16 1 17 19 15 20 3 13 11

Sampling What’s wrong with this? co = correlog( x[sample(1: length(x), 1000, replace = F)],

Sampling What’s wrong with this? co = correlog( x[sample(1: length(x), 1000, replace = F)], y[sample(1: length(y), 1000, replace = F)], z[sample(1: length(z), 1000, replace = F)], increment = 10, resamp = 0, latlon = T, na. rm=T)

Sampling, the right way > index = sample(1: length(x), 1000, replace = F) >

Sampling, the right way > index = sample(1: length(x), 1000, replace = F) > co = correlog(x[index], y[index], z[index], increment = 100, resamp = 0, latlon = T, na. rm=T) > plot(co)

Autocorrelation significance Assessed through random permutation tests Reassign z values randomly to x and

Autocorrelation significance Assessed through random permutation tests Reassign z values randomly to x and y coordinates Calculate correlogram Repeat many times Does the observed correlogram differ from random? > index = sample(1: length(x), 1000, replace = F) > co = correlog(x[index], y[index], z[index], increment = 100, resamp = 100, latlon = T, na. rm=T) > plot(co) Downside – this is slow!

Significant deviation from random

Significant deviation from random

Why is spatial dependence important? Classic statistical tests assume that data points are independent

Why is spatial dependence important? Classic statistical tests assume that data points are independent Can bias parameter estimates Leads to incorrect P value estimates A couple of methods to deal with this (next week!) Simultaneous autoregressive models Spatial filters

Just for fun – 3 d surfaces R can render cool 3 d surfaces

Just for fun – 3 d surfaces R can render cool 3 d surfaces Demonstrate live rgl. surface() (package rgl)