rgeoda icon indicating copy to clipboard operation
rgeoda copied to clipboard

Odd p-values from `local_geary()`

Open rsbivand opened this issue 3 years ago • 0 comments

In an example just added to spdep on github, issue https://github.com/r-spatial/spdep/issues/68, I find that the lisa_pvalues() are not bounded by [0, 0.5] as in for example local_moran() for the same data. When I "fold back" the values > 0.5, the vector correlates well with the equivalent conditional permutation output for the local Geary measure just added to spdep. Installing spdep from github (main), the following reproduces the objects and oddness:

library(spdep)
orig <- spData::africa.rook.nb
listw <- nb2listw(orig)
x <- spData::afcon$totcon

(A <- localC(x, listw))
listw1 <- nb2listw(droplinks(sym.attr.nb(orig), 3, sym=TRUE), zero.policy=TRUE)
(A1 <- localC(x, listw1, zero.policy=FALSE))
(A2 <- localC(x, listw1, zero.policy=TRUE))
if (require(rgeoda, quietly=TRUE)) {
  W <- create_weights(as.numeric(length(x)))
  for (i in 1:length(listw$neighbours)) {
    set_neighbors_with_weights(W, i, listw$neighbours[[i]], listw$weights[[i]])
    update_weights(W)
  }
  set.seed(1)
  B <- local_geary(W, data.frame(x))
  all.equal(A, lisa_values(B))
}
set.seed(1)
C <- localC_perm(x, listw, nsim = 499, conditional=TRUE, alternative="two.sided")
plot(lisa_pvalues(B), attr(C, "pseudo-p")[,6])
cor(lisa_pvalues(B), attr(C, "pseudo-p")[,6])
cor(ifelse(lisa_pvalues(B) < 0.5, lisa_pvalues(B), 1-lisa_pvalues(B)), attr(C, "pseudo-p")[,6])

rsbivand avatar Nov 23 '21 13:11 rsbivand