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

如何用R的varSel包JMdist做Jeffries-Matusita光谱距离分析及解决NA问题

R语言Jeffries-Matusita距离分析问题解决指南

一、JMdist函数使用的统计量说明

JMdist(以RStoolbox包实现为例)计算Jeffries-Matusita距离时,核心依赖两类统计量:

  • 类别均值向量:每类在各光谱波段上的平均值,用于描述类别的光谱中心
  • 类别协方差矩阵:每类内部各光谱波段的方差及波段间的协方差,用于描述类别的光谱离散程度和波段相关性
    注:不需要单独输入标准差,协方差矩阵的对角元素即为各波段的方差(标准差的平方)

二、输出全NA的排查与解决方案

  • 检查输入数据类型:不能直接输入ArcGIS导出的MLC分类栅格(仅含类别标签),必须提供带光谱信息的训练样本数据——即每类对应的原始影像像素值(比如从ArcGIS导出的训练样本点光谱数据,或在R中从原始影像提取分类图对应区域的光谱)。
  • 排查类别样本量:若某类的样本数量≤波段数(这里是3),协方差矩阵会因奇异无法求逆,导致JM距离为NA。用table(df$class)查看每类样本数,合并样本量过少的类别,或补充采集该类样本。
  • 检查协方差矩阵奇异性:即使样本量足够,若某类光谱波段存在完全线性相关(如两个波段值完全一致),协方差矩阵行列式为0(奇异),无法计算距离。用以下代码检查:
    # 按类别拆分光谱数据
    class_list <- split(df[, c("b1","b2","b3")], df$class)
    # 遍历每类计算协方差矩阵行列式
    lapply(class_list, function(x) det(cov(x)))
    
    若输出为0,需移除冗余波段或重新采集样本。
  • 验证参数输入格式:以RStoolbox的JMdist为例,正确输入方式为:
    library(RStoolbox)
    # df是包含光谱列(b1,b2,b3)和类别列(class)的数据框
    jm_res <- JMdist(df, y = "class")
    # 或从superClass模型的统计结果直接计算
    # jm_res <- JMdist(sc_model$stats)
    
  • 清理光谱数据中的缺失值:若原始光谱数据存在NA,会导致统计量计算失败。用df_clean <- na.omit(df)移除含NA的样本后重新计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:30:45