I am trying to convert some spatial points into a listw object to run the moran.mc function on my data. The data are not adjacent but the points cluster in spatial patterns. Here is how I have tried to write the code:
library(sp) library(raster) library(spdep) latitude <- c(56.33, 48.12, 51.13, 60.83, 52.46, 60.42, 51.07, 52.02, 52.87, , 55.27) longitude <- c(84.58, 88.35, -55.93, -101.55, -116.19, -150.90, -89.90, -90.13, -89.93, -88.93) core_locations <- cbind(longitude, latitude) pts <- *SpatialPoints(core_locations)
I have tried two approaches to converting this into the listw; the first is to create a weights matrix, but I can't figure out how to pass this to moran.mc
dist <- pointDistance(pts, lonlat = TRUE) weights_matrix <- 1 / dist weights_matrix[!is.finite(weights_matrix)] <- NA rtot <- rowSums(weights_matrix, na.rm = TRUE) weights_matrix <- weights_matrix / rtot
The second is try to convert the points into polygons, but maybe this is just a bad idea....
p <- Polygon(pts) ps <- Polygons(list(p),1) sps <- SpatialPolygons(list(ps)) w <- poly2nb(sps) ww <- nb2listw(w)
*I have a spatial points data frame for these locations with associated attribute data for each point.