Sử dụng mẫu lại so với tổng hợp & mở rộng trong R để có các mức độ phù hợp với độ phân giải và mức độ phù hợp


8

Tôi có hai raster có độ phân giải và mức độ khác nhau:

> 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

Câu hỏi của tôi là , để hai raster này có độ phân giải và mức độ phù hợp, thì tốt hơn là:

A) sử dụng raster::aggregatechức năng

> 0.008333333/0.002083333
[1] 4

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

raster::extendchức năng

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

(mặc dù ở đây tôi vẫn nhận được các mức độ khác nhau nhưng độ phân giải rất giống nhau):

> 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 

hoặc là

b) sử dụng raster::resamplechức năng

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

Tôi đang yêu cầu này bởi vì tôi đã đọc trong Wegmann et al (2016) (p110) (nếu tôi hiểu đúng) rằng resampling ảnh hưởng lớn đến giá trị pixel, và rằng aggregate(), extend()crop()nên được sử dụng để thay thế. Vì sự khác biệt về độ phân giải và mức độ khá nhỏ trong trường hợp của tôi, tôi có thể cho rằng sự thiên vị được tạo ra bằng cách lấy mẫu lại sẽ là tối thiểu ở đây không?

Câu trả lời:


9

Kiểm tra resamplechức năng của rastergói . Khi resampleđược sử dụng với 'bilinearphương thức, đầu ra giống như aggregatesau:

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)
            }
        }
    }

Với một ví dụ:

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

Nhưng nếu bạn sử dụng 'ngb'làm phương thức, kết quả sẽ khác (phương pháp phụ thuộc vào dữ liệu của bạn, nếu là phân loại bạn phải sử dụng 'ngb'):

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

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

Và mở rộng không thay đổi độ phân giải, chỉ phạm vi:

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

crop()như extend(), sẽ không thay đổi độ phân giải.


@MarieL xin lỗi, là phạm vi (tôi viết sai chính tả)
aldo_tapia

bilineartùy chọn tương đương meannhư chức năng cho aggregatengbtùy chọn tương đương với modal? Tôi đang đề cập đến các trường hợp mục tiêu có độ phân giải thô hơn (kích thước pixel lớn hơn) so với đầu vào cần phải được chuyển đổi.
dùng3386170

1
@ user3386170 có, kiểm tra các dòng sau: github.com/cran/raster/blob/
Khăn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.