Menggunakan resample vs agregat & memperpanjang dalam R untuk memiliki raster resolusi yang cocok dan luas


8

Saya memiliki dua raster resolusi dan tingkat yang berbeda:

> 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

Pertanyaan saya adalah , agar kedua raster ini memiliki resolusi dan luasan yang cocok, apakah lebih baik untuk:

A) gunakan raster::aggregatefungsinya

> 0.008333333/0.002083333
[1] 4

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

dan raster::extendfungsinya

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

(walaupun di sini saya masih mendapatkan perbedaan dan resolusi yang sangat mirip):

> 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 

atau

b) gunakan raster::resamplefungsinya

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

Saya bertanya ini karena saya sudah membaca di Wegmann et al (2016) (p110) (jika saya mengerti benar) bahwa resampling sangat mempengaruhi nilai piksel, dan itu aggregate(), extend()dan crop()harus digunakan sebagai gantinya. Karena perbedaan dalam resolusi dan luasnya cukup kecil dalam kasus saya, dapatkah saya berasumsi bahwa bias yang diciptakan oleh resampling akan minimal di sini?

Jawaban:


10

Periksa resamplefungsi rasterpaket . Ketika resampledigunakan dengan 'bilinearmetode, outputnya sama dengan 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)
            }
        }
    }

Dengan sebuah contoh:

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

Tetapi jika Anda menggunakan 'ngb'sebagai metode, hasilnya berbeda (metode bergantung pada data Anda, jika kategorikal Anda harus menggunakan 'ngb'):

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

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

Dan perluasan tidak mengubah resolusi, hanya sebatas:

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

Dan crop()seperti extend(), tidak akan mengubah resolusi.


@MarieL maaf, luas (saya salah mengeja kata)
aldo_tapia

Apakah bilinearopsi setara dengan meansebagai fungsi untuk aggregatedan ngbopsi setara dengan modal? Saya merujuk pada kasus-kasus di mana targetnya adalah resolusi kasar (ukuran piksel lebih besar) daripada input yang perlu diubah.
user3386170

1
@ user3386170 ya, periksa baris ini: github.com/cran/raster/blob/…
aldo_tapia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.