使用exact_extract时自定义权重与默认权重结果差异及解决方法咨询
使用exactextractr计算加权均值的疑问与解决
环境准备
library(exactextractr) library(sf) library(terra)
创建示例数据
# 示例多边形 p <- system.file("ex/lux.shp", package="terra") p <- vect(p) p <- p[1, ] p_sf <- st_as_sf(p) # 示例栅格 r <- system.file("ex/elev.tif", package="terra") r <- rast(r) r <- crop(r, p , snap = "out", mask = T)
计算默认面积加权均值
exact_extract(r, p_sf, 'mean') # 467.3792
根据文档说明,上述计算为面积加权均值,即使用栅格单元格与多边形的相交面积作为权重进行平均。
使用自定义栅格权重计算
# 创建栅格权重 r_wt <- r / global(r, "sum", na.rm = T)$sum exact_extract(r, p_sf, weights = r_wt, 'weighted_mean') # 469.8506
疑问
为什么两种方式得到的结果不同?我怀疑即使传入外部权重,该权重仍会与单元格面积权重相乘后用于加权均值计算。请问是否可以关闭面积权重的相乘,仅使用自定义外部权重来计算加权均值?
解答
是的,你的怀疑是正确的:exact_extract的内置weighted_mean统计量会自动将传入的外部权重与单元格的相交面积权重相乘,这就是两次结果存在差异的原因。
如果要仅使用自定义外部权重计算加权均值,需要通过自定义函数实现,而非依赖内置的weighted_mean。具体代码如下:
exact_extract(r, p_sf, function(values, weights) { sum(values * weights, na.rm = TRUE) / sum(weights, na.rm = TRUE) }, weights = r_wt)
这段代码会直接基于你传入的自定义权重计算加权均值,不会再与面积权重相乘。
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

