You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不同空间分辨率栅格数据空间自相关分析及邻域错误排查求助

解决两个空间分析问题:不同分辨率栅格的空间自相关图绘制 + Moran检验邻域列表错误修复

一、绘制展示两幅不同分辨率栅格关系的空间自相关图

要展示不同分辨率栅格的空间自相关关系,核心是先统一分辨率,再通过**交叉空间自相关(Cross-Moran's I)**分析两者的空间关联,步骤如下:

  1. 统一栅格分辨率
    将低分辨率栅格重采样到高分辨率栅格的空间范围与单元格尺寸上,确保两者完全对齐:

    library(raster)
    # 加载栅格数据
    r_high <- raster("high_res_raster.tif")
    r_low <- raster("low_res_raster.tif")
    # 连续数据用双线性插值,分类数据用"ngb"最近邻
    r_low_resampled <- resample(r_low, r_high, method = "bilinear")
    
  2. 提取有效配对值
    剔除两个栅格中含NA的单元格,保证分析数据的完整性:

    # 转换为数据框并删除NA行
    grid_df <- data.frame(
      high_val = values(r_high),
      low_val = values(r_low_resampled)
    ) %>% na.omit()
    
  3. 构建空间权重矩阵
    基于对齐后的栅格单元格构建Queen邻域(共享边或角的单元格为邻居):

    library(spdep)
    # 获取高分辨率栅格的行列数
    n_row <- nrow(r_high)
    n_col <- ncol(r_high)
    # 生成邻域列表
    nb <- cell2nb(n_row, n_col, type = "queen")
    # 只保留有效单元格对应的邻域
    valid_cells <- !is.na(values(r_high))
    nb_valid <- nb[valid_cells]
    # 转换为空间权重矩阵,允许零权重处理孤立单元格
    w <- nb2listw(nb_valid, style = "W", zero.policy = TRUE)
    
  4. 绘制交叉空间自相关图
    用交叉Moran散点图展示一个栅格的值与另一个栅格空间滞后值的关联:

    # 计算高分辨率栅格的空间滞后值
    high_lag <- lag.listw(w, grid_df$high_val)
    # 绘制交叉Moran散点图
    moran.plot(grid_df$low_val, high_lag, zero.policy = TRUE,
               main = "Cross-Moran散点图:低分辨率栅格 vs 高分辨率栅格空间滞后",
               xlab = "低分辨率栅格值", ylab = "高分辨率栅格空间滞后值")
    

二、修复重采样后Moran检验的"邻域列表错误"

你遇到的错误大概率是邻域列表与重采样后的栅格行列数不匹配,或大量NA导致空邻域,以下是针对性修复方案:

常见错误原因

  • 重采样后栅格行列数改变,但仍用原栅格行列数构建邻域列表
  • 重采样后存在大量NA单元格,导致邻域列表出现空的邻居组

修正后的完整代码

library(raster)
library(spdep)

# 1. 加载并重采样栅格
r_original <- raster("original_low_res.tif")
r_target <- raster("target_high_res.tif")
r_resampled <- resample(r_original, r_target, method = "bilinear")

# 2. 预处理:提取有效值并筛选有效单元格
resampled_vals <- values(r_resampled)
valid_idx <- !is.na(resampled_vals)
clean_vals <- resampled_vals[valid_idx]

# 3. 构建正确的邻域列表
# 必须使用重采样后栅格的行列数
nb <- cell2nb(nrow(r_resampled), ncol(r_resampled), type = "queen")
# 只保留有效单元格对应的邻域
nb_clean <- nb[valid_idx]
# 删除空邻域(若存在)
nb_clean <- drop.nb(nb_clean)

# 4. 构建空间权重矩阵,开启zero.policy处理孤立单元格
w <- nb2listw(nb_clean, style = "W", zero.policy = TRUE)

# 5. 执行Moran检验
moran_result <- moran.test(clean_vals, w, zero.policy = TRUE)
print(moran_result)

# 绘制常规Moran散点图
moran.plot(clean_vals, w, zero.policy = TRUE,
           main = "重采样后栅格的Moran散点图")

关键修复点

  • 匹配重采样后的行列数:cell2nb的前两个参数必须是nrow(r_resampled)和ncol(r_resampled),不能用原栅格的行列数
  • 处理NA与空邻域:通过valid_idx筛选有效单元格,用drop.nb()删除空邻域,同时在nb2listw和moran.test中设置zero.policy=TRUE,允许存在无邻居的孤立单元格

内容的提问来源于stack exchange,提问作者B27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:53:34