我需要对R中的光谱可分性执行Jeffries-Matusita距离分析。我正在使用Arcgis,我想知道哪些类的统计数据(mean,sd,covariance matrix)被用在JMdist函数中。我一直在尝试,但我一直只得到NA的向量,该向量应该表示所有类组合的JM距离,我相信这是因为我没有使用正确的信息来运行函数。
wqsoz72f1#
杰弗里斯-松下JM距离使用Bhattacharyya指数度量一对概率分布之间的可分性。在遥感问题中,JM距离通常用于度量两组之间的光谱可分性(例如两个土地使用/土地转换类别)。因此,待评估的变量是光谱带。2这样你就可以得到使两个类之间的光谱可分性最大化的光谱带。关于JM距离的一个重要问题是JM距离有两个版本。原始JM距离定义为:
JMd_ij =√2(1-e^(-B_ij))
其中 B_ij 是分布 i 和分布 j 之间的巴塔查里亚“距离”。因此,JM距离可以在 [0,√2] 范围内取值。然而,各种遥感手册和软件包,如SCP-Qgis使用以下公式:
JMd_ij =2(1-e^(-B_ij))
例如Richards & Jia (2006)的手册使用了这个版本。根据这个方程,JM距离可以取 [0,2] 范围内的值。这个差异很重要,因为应用平方根会使可分性值〉1变小,而值〈1变大。因此,定义使用哪个版本的JM距离来报告结果是很重要的,特别是当您想将结果与其他研究的结果进行比较时。varSel包使用JMd_ij =√ 2(1-e^(-Bij)),如其源代码所示:View(JMdist) .你可以修改代码,使用理查兹& Jia(2006)的公式,如下所示:
varSel
JMd_ij =√ 2(1-e^(-Bij))
View(JMdist)
JMdist_Richards_Jia_2006 <- function (g, X) { # Jeffries-Matusita Distance used in Richards & Jia (2006). # JM_ij = = √ 2(1-e^(-B_ij)) # where B_ij is the Bhattacharyya "distance" between i and j. # Source: ## https://link.springer.com/book/10.1007/978-3-642-30062-2 X <- as.matrix(X) nfeat <- ncol(X) nclass <- length(unique(g)) mu <- by(X, g, colMeans) Cov <- by(X, g, stats::cov) ncomb <- t(utils::combn(unique(g), 2)) Bhat <- c() jm <- c() for (j in 1:nrow(ncomb)) { mu.i <- mu[[ncomb[j, 1]]] cov.i <- Cov[[ncomb[j, 1]]] mu.j <- mu[[ncomb[j, 2]]] cov.j <- Cov[[ncomb[j, 2]]] if (nfeat == 1) { Bhat[j] <- (1/8) * t(mu.i - mu.j) %*% (solve((cov.i + cov.j)/2)) %*% (mu.i - mu.j) + 0.5 * log((((cov.i + cov.j)/2))/(sqrt(((cov.i)) * ((cov.j)))), base = exp(1)) } else { Bhat[j] <- (1/8) * t(mu.i - mu.j) %*% (solve((cov.i + cov.j)/2)) %*% (mu.i - mu.j) + 0.5 * log(det(((cov.i + cov.j)/2))/(sqrt((det(cov.i)) * (det(cov.j)))), base = exp(1)) } jm[j] <- 2 * (1 - exp(-Bhat[j])) } return(list(classComb = ncomb, jmdist = jm)) }
最后,如源代码所示,JMdist使用cov() R函数计算协方差矩阵。
JMdist
cov()
1条答案
按热度按时间wqsoz72f1#
杰弗里斯-松下JM距离使用Bhattacharyya指数度量一对概率分布之间的可分性。在遥感问题中,JM距离通常用于度量两组之间的光谱可分性(例如两个土地使用/土地转换类别)。因此,待评估的变量是光谱带。2这样你就可以得到使两个类之间的光谱可分性最大化的光谱带。
关于JM距离的一个重要问题是JM距离有两个版本。
原始JM距离定义为:
其中 B_ij 是分布 i 和分布 j 之间的巴塔查里亚“距离”。因此,JM距离可以在 [0,√2] 范围内取值。
然而,各种遥感手册和软件包,如SCP-Qgis使用以下公式:
例如Richards & Jia (2006)的手册使用了这个版本。根据这个方程,JM距离可以取 [0,2] 范围内的值。这个差异很重要,因为应用平方根会使可分性值〉1变小,而值〈1变大。
因此,定义使用哪个版本的JM距离来报告结果是很重要的,特别是当您想将结果与其他研究的结果进行比较时。
varSel
包使用JMd_ij =√ 2(1-e^(-Bij))
,如其源代码所示:View(JMdist)
.你可以修改代码,使用理查兹& Jia(2006)的公式,如下所示:
最后,如源代码所示,
JMdist
使用cov()
R函数计算协方差矩阵。