本文介绍了解决IF(obs<;=ei)2*PV ELSE 2*(1-PV)中的错误:APE包Moran&39;的I函数在R中需要TRUE/FALSE的位置缺少值。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
开发人员!
我遇到错误消息
阻止我从APE包中获取Moran的I函数的值。以下是我所做的:
library(ape)
nrstp <- data.frame(
X = c(300226.9, 300224.6, 300226.4, 300226.1, 300224.0, 300226.4, 300225.7, 300226.4, 300226.1, 300226.4, 300226.3, 300226.3, 300227.1),
Y = c(5057949, 5057952, 5057950, 5057950, 5057956, 5057950, 5057950, 5057950, 5057950, 5057950, 5057950, 5057950, 5057949),
V3 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
nrstp = data.frame(nrstp)
dist = as.matrix(dist(cbind(nrstp$X, nrstp$Y)))
invdist = 1/dist
invdist[is.infinite(invdist)] <- 0
moranI = Moran.I(nrstp$V3, invdist)
此代码的目的是从一系列点计算Moran‘s i,以检查空间自相关性。到目前为止,这似乎是R中唯一适用于Moran‘s I的函数。经过几次测试(我有数千组点),此错误似乎只发生在只有一个值的输入向量上(我尝试了除0之外的其他数字,但仍会引发此错误)。
有人能帮我改进这段代码吗?或者,他们更好的建议是计算Moran‘s i或测试线串的空间自相关性(这些点组是一个线串的原点,并且距离该原点10米缓冲区内的其他线串最近的点)?
提前感谢您的帮助!
推荐答案
问题是您的x
都是相同的值。如果您查看Abdur Rohman的代码,则该函数的计算结果为
m <- mean(x)
y <- x - m
cv <- sum(weight * y %o% y)
v <- sum(y^2)
obs <- (n/s) * (cv/v)
如果所有x
都等于m <- mean(x)
的平均值,则m <- mean(x)
明显等于所有x
和y, v, obs
为0。对于obs
,您可以划分cv/v
,即NaN
因此x
至少应该有一个值不同
这篇关于解决IF(obs<;=ei)2*PV ELSE 2*(1-PV)中的错误:APE包Moran&39;的I函数在R中需要TRUE/FALSE的位置缺少值。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!