question on raster Moran's I statistical significance
Thank you very much for your response. Yes indeed it clarifies and helps a lot. Kind regards, Gabriel Cotlier
On Mon, Oct 25, 2021 at 12:00 PM Roger Bivand <Roger.Bivand at nhh.no> wrote:
On Sat, 23 Oct 2021, Gabriel Cotlier wrote:
Hello, I would like to estimate the pseudo p-value of Moran's I from raster data layer, by converting it to polygon data in order to be able to directly
use
the function spdep::mc.moran() and getting in one step not only value of Moran'sI but its statistical significance without using other simulations but only that in the funcion spdep::mc.moran() as an alternative I have used the code below. However, since with the initial version of the code
I
got several errors such as : Error in moran. mc(My_raster, lw.l, 999) : r is not a numeric vector So I converted "r" to a vector using as.vector() in : M <- moran.mc(as.vector(r), lw.l, 999)
First, if you have the spatial weights object lw.l, spdep::moran.test(), using analytical rather than bootstrap inference, is almost certainly more efficient, and yields almost always the same outcome with randomisation=TRUE.
However then appeared another the error: Error in na.fail.default(x) : missing values in object
Please see the na.action= argument to moran.mc() and moran.test(); the default is na.fail, but can be na.exclude, which then also subsets the listw spatial weights object. You can also subset l before creating the neighbour object: library(raster) library(spdep) r <- raster(nrows=10, ncols=10) values(r) <- c(1:(ncell(r)-1), NA) l <- rasterToPolygons(r, na.rm=TRUE) # note that this subsets by default dim(l) # [1] 99 1 nb.l <- poly2nb(l, queen=FALSE) nb.l # here no no-neighbour observations, no need for zero.policy= lw.l <- nb2listw(nb.l, style="W") moran.test(l$layer, lw.l) # default randomisation=TRUE
Finally these errors disappeared with the following version of the code-- see below -- the version of the code below runs OK--unless for the input raster I have used-- with no more errors or problems.
Because rasterToPolygons() removes NA observations by default. Hope this clarifies, Roger
Therefore my question is : if instead of using arguments of the function spdep::mc.moran() such as na.action = na.omit or other --which I have
tried
and could not make work-- is it a valid way to solve the above errors in the way as presented in the code below? I would appreciate it a lot if there is a possibility of knowing what
could
be wrong in the code below? I suspect it could be possible the problem is related to the way in which the raster data layer is converted to polygon data im the code to be input to the function spdep::mc.moran() , but will appreciate any
guidance
and assistance in the issue to get working in the correct manner.
Thanks a lot.
Kind regards,
################### Estimate of Moran's I and its p-value from a raster
layer ##################################
library(raster)
library(spdep)
library(easycsv)
rm(list = ls())
r<- raster(file.choose())
l <- rasterToPolygons(r)
nb.l <- poly2nb(l, queen=FALSE)
lw.l <- nb2listw(nb.l, style="W",zero.policy=TRUE)
v<-r[!is.na(r)]
M <- moran.mc((v), lw.l, 999, zero.policy=TRUE)
M
plot(M, main=sprintf("Original, Moran's I (p = %0.3f)", M$p.value),
xlab="Monte-Carlo Simulation of Moran I", sub =NA, cex.lab=1.5,
cex.axis=1.5, cex.main=1.5, cex.sub=1.5)
abline(v=M$statistic, col="red", lw=2)
dev.off()
################################################################################################
-- Roger Bivand Emeritus Professor Department of Economics, Norwegian School of Economics, Postboks 3490 Ytre Sandviken, 5045 Bergen, Norway. e-mail: Roger.Bivand at nhh.no https://orcid.org/0000-0003-2392-6140 https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
Gabriel Cotlier, PhD Haifa Research Center for Theoretical Physics and Astrophysics (HCTPA) University of Haifa Israel [[alternative HTML version deleted]]