Utiliser le rééchantillonnage par rapport à l'agrégation et étendre dans R pour avoir des rasters de résolution et d'étendue correspondantes

8

J'ai deux rasters de résolution et d'étendue différentes:

> 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

Ma question est la suivante : pour que ces deux rasters aient des résolutions et des étendues identiques, est-il préférable de:

A) utiliser la raster::aggregatefonction

> 0.008333333/0.002083333
[1] 4

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

et la raster::extendfonction

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

(bien qu'ici j'obtienne toujours des résolutions et des extensions différentes mais très similaires):

> 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 

ou

b) utiliser la raster::resamplefonction

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

Je pose cette question parce que j'ai lu dans Wegmann et al (2016) (p110) (si je comprends bien) que le rééchantillonnage affecte considérablement les valeurs des pixels, et cela aggregate(), extend()et crop()devrait être utilisé à la place. Étant donné que les différences de résolution et d'étendue sont assez faibles dans mon cas, puis-je supposer que le biais créé par le rééchantillonnage serait minime ici?

M514
la source

Réponses:

10

Vérifiez la resamplefonction du rasterpackage . Lorsque resampleest utilisé avec la 'bilinearméthode, la sortie est la même 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)
            }
        }
    }

Avec un exemple:

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

Mais si vous utilisez 'ngb'comme méthode, le résultat est différent (la méthode dépend de vos données, si elle est catégorique, vous devez utiliser 'ngb'):

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

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

Et étendre ne change pas la résolution, seulement l'étendue:

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

Et crop()comme extend(), ne changera pas la résolution.

aldo_tapia
la source
@MarieL désolé, c'est l'étendue (j'ai mal orthographié le mot)
aldo_tapia
L' bilinearoption est-elle équivalente à meanla fonction aggregateet l' ngboption est-elle équivalente à modal? Je fais référence aux cas où la cible est une résolution plus grossière (plus grande taille de pixel) que l'entrée qui doit être transformée.
user3386170
1
@ user3386170 oui, vérifiez ces lignes: github.com/cran/raster/blob/…
aldo_tapia