本文介绍了解决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)明显等于所有xy, v, obs为0。对于obs,您可以划分cv/v,即NaN

因此x至少应该有一个值不同

这篇关于解决IF(obs&lt;=ei)2*PV ELSE 2*(1-PV)中的错误:APE包Moran&39;的I函数在R中需要TRUE/FALSE的位置缺少值。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-21 04:13