Usando remuestreo versus agregado y extensión en R para tener rásteres de resolución y extensión coincidentes


8

Tengo dos rásteres de diferente resolución y extensión:

> res(Elevation)
[1] 0.002083333 0.002083333

> res(Ann_precip)
[1] 0.008333333 0.008333333 

> extent(Elevation)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.641806 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675

Mi pregunta es , para que estos dos rásteres tengan resoluciones y extensiones coincidentes, es mejor:

A) usa la raster::aggregatefunción

> 0.008333333/0.002083333
[1] 4

Elevation_res<-aggregate(Elevation, fact=4, fun=mean)

y la raster::extendfunción

Elevation_res<-extend(Elevation_res, Ann_precip, values=NA)

(aunque aquí todavía obtengo extensiones y resoluciones diferentes pero muy similares):

> res(Elevation_res)
[1] 0.008333333 0.008333333

> res(Ann_precip)
[1] 0.008333333 0.008333333

> res(Elevation_res)==res(Ann_precip)
[1] FALSE FALSE

> extent(Elevation_res)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.635556 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675 

o

b) usa la raster::resamplefunción

Elevation_res<-resample(Elevation, Ann_precip, method="bilinear")

> res(Elevation_res)==res(Ann_precip)
[1] TRUE TRUE

> extent(Elevation_res)==extent(Ann_precip)
[1] TRUE

Pregunto esto porque he leído en Wegmann et al (2016) (p110) (si lo entiendo correctamente) que el remuestreo afecta en gran medida los valores de píxeles, y eso aggregate(), extend()y crop()debería usarse en su lugar. Dado que las diferencias en resolución y extensión son bastante pequeñas en mi caso, ¿puedo suponer que el sesgo creado por el remuestreo sería mínimo aquí?

Respuestas:


9

Verifique la resamplefunción del rasterpaquete . Cuando resamplese usa con el 'bilinearmétodo, la salida es la misma que aggregate:

if (!skipaggregate) {
    rres <- res(y) / res(x)
    resdif <- max(rres)
    if (resdif > 2) {
        ag <- pmax(1, floor(rres-1))
        if (max(ag) > 1) {
            if (method == 'bilinear') {
                x <- aggregate(x, ag, 'mean')
            } else {  
                x <- aggregate(x, ag, modal)
            }
        }
    }

Con un ejemplo:

library(raster)

r <- raster(nrow=4,ncol=8)

r2 <- raster(nrow=2,ncol=4)

r <- setValues(r,values = 1:32)

r_agg <- aggregate(r,fact=2,fun=mean)

r_resam <- resample(r,r2,method='bilinear')

values(r_resam) == values(r_agg)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

values(r_resam)
## [1]  5.5  7.5  9.5 11.5 21.5 23.5 25.5 27.5

Pero si lo usa 'ngb'como método, el resultado es diferente (el método depende de sus datos, si es categórico debe usarlo 'ngb'):

r_resam2 <- resample(r,r2,method='ngb')

values(r_resam2)
## [1] 10 12 14 16 26 28 30 32

Y extender no cambia la resolución, solo la extensión:

r
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

r_ext <- extend(r,r2,values=NA)

r_ext
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0

Y crop()como extend(), no cambiará la resolución.


@MarieL lo siento, es extensión (escribí mal la palabra)
aldo_tapia

¿Es la bilinearopción equivalente a meancomo la función para aggregatey la ngbopción equivalente a modal? Me refiero a casos en los que el objetivo es una resolución más gruesa (mayor tamaño de píxel) que la entrada que necesita ser transformada.
user3386170

1
@ user3386170 sí, verifique estas líneas: github.com/cran/raster/blob/…
aldo_tapia
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.