View source: R/local.sp.runs.test.R
local.sp.runs.test | R Documentation |
This function calculates the local spatial runs tests for all localizations.
local.sp.runs.test(formula = NULL, data = NULL, fx = NULL, distr = "asymptotic", listw = listw, alternative = "two.sided" , nsim = NULL, control = list())
formula |
An (optional) formula with the factor included in |
data |
An (optional) data frame or a sf object containing the variable to testing for. |
fx |
An (optional) factor of observations with the same length as the neighbors list in |
distr |
a character string specifying the distribution "asymptotic" (default) or "bootstrap" |
listw |
A neighbourhood list (an object type knn or nb) or a W matrix that indicates the order of the elements in each $m_i-environment$ (for example of inverse distance). To calculate the number of runs in each $m_i-environment$, an order must be established, for example from the nearest neighbour to the furthest one. |
alternative |
a character string specifying the alternative hypothesis, must be one of "two.sided" (default), "greater" or "less". |
nsim |
Default value is NULL to obtain the asymptotic version of the local test. For the bootstrap version nsim is the number of permutations to obtain the pseudo-value. |
control |
Optional argument. See Control Argument section. |
The object listw
can be the class:
knn
: Objects of the class knn that consider the neighbours in
order of proximity.
nb
: If the neighbours are obtained from an sf object, the code internally
will call the function nb2nb_order
it will order them in order
of proximity of the centroids.
matrix
: If a object of matrix class based in the inverse of
the distance in introduced as argument, the function nb2nb_order
will
also be called internally to transform the object the class matrix to a matrix of the
class nb with ordered neighbours.
The output is an object of the class localsrq
local.SRQ
A matrix with
runs.i | number of runs in the localization 'i'. |
E.i | expectation of local runs statistic in the localization 'i'. |
Sd.i | standard deviate of local runs statistic in the localization 'i'. |
z.value | standard value of local runs statistic (only for asymptotic version). |
p.value | p-value of local local runs statistic (only for asymptotic version). |
zseudo.value | standard value of local runs statistic (only for boots version). |
pseudo.value | p-value of local runs statistic (only for boots version). |
MeanNeig
Mean of run.i
MaxNeig
Maximum of run.i
listw
the object listw
alternative
a character string describing the alternative hypothesis
seedinit | Numerical value for the seed in boot version. Default value seedinit = 123 |
Fernando López | fernando.lopez@upct.es |
Román Mínguez | roman.minguez@uclm.es |
Antonio Páez | paezha@gmail.com |
Manuel Ruiz | manuel.ruiz@upct.es |
@references
Ruiz, M., López, F., and Páez, A. (2021). A test for global and local homogeneity of categorical data based on spatial runs. Working paper.
sp.runs.test
, dgp.spq
# Case 1: Local spatial runs test based on knn library(lwgeom) N <- 100 cx <- runif(N) cy <- runif(N) x <- cbind(cx,cy) listw <- spdep::knearneigh(cbind(cx,cy), k = 10) p <- c(1/6,3/6,2/6) rho <- 0.5 fx <- dgp.spq(p = p, listw = listw, rho = rho) # Asymtotic version lsrq <- local.sp.runs.test(fx = fx, listw = listw, alternative = "less") print(lsrq) plot(lsrq, sig = 0.05) # Asymtotic version lsrq <- local.sp.runs.test(fx = fx, listw = listw, alternative = "two.sided", distr ="bootstrap", nsim = 399) print(lsrq) plot(lsrq, sig = 0.1) # Case 2:Fastfood example. sf (points) library(lwgeom) data("FastFood.sf") sf::sf_use_s2(FALSE) x <- sf::st_coordinates(sf::st_centroid(FastFood.sf)) listw <- spdep::knearneigh(x, k = 10) formula <- ~ Type lsrq <- local.sp.runs.test(formula = formula, data = FastFood.sf, listw = listw) print(lsrq) plot(lsrq, sf = FastFood.sf, sig = 0.05) # Case 3: With a sf object (poligons) library(lwgeom) fname <- system.file("shape/nc.shp", package="sf") nc <- sf::st_read(fname) listw <- spdep::poly2nb(as(nc,"Spatial"), queen = FALSE) p <- c(1/6,3/6,2/6) rho = 0.5 nc$fx <- dgp.spq(p = p, listw = listw, rho = rho) plot(nc["fx"]) formula <- ~ fx lsrq <- local.sp.runs.test(formula = formula, data = nc, listw = listw) print(lsrq) plot(lsrq, sf = nc) # Version boot lsrq <- local.sp.runs.test(formula = formula, data = nc, listw = listw, distr ="bootstrap", nsim = 399) print(lsrq) plot(lsrq, sf = nc) # Case 4: With isolated areas library(lwgeom) data(provinces_spain) listw <- spdep::poly2nb(as(provinces_spain,"Spatial"), queen = FALSE) provinces_spain$Male2Female <- factor(provinces_spain$Male2Female > 100) levels(provinces_spain$Male2Female) = c("men","woman") plot(provinces_spain["Male2Female"]) formula <- ~ Male2Female lsrq <- local.sp.runs.test(formula = formula, data = provinces_spain, listw = listw) print(lsrq) plot(lsrq, sf = provinces_spain, sig = 0.1) # Boots Version lsrq <- local.sp.runs.test(formula = formula, data = provinces_spain, listw = listw, distr ="bootstrap", nsim = 199) print(lsrq) plot(lsrq, sf = provinces_spain, sig = 0.10) # Case 5: SRQ test based on a distance matrix (inverse distance) library(lwgeom) N <- 100 cx <- runif(N) cy <- runif(N) coor <- as.data.frame(cbind(cx,cy)) coor <- sf::st_as_sf(coor,coords = c("cx","cy")) n = dim(coor)[1] dis <- 1/matrix(as.numeric(sf::st_distance(coor,coor)), ncol = n, nrow = n) diag(dis) <- 0 dis <- (dis < quantile(dis,.10))*dis p <- c(1/6,3/6,2/6) rho <- 0.5 fx <- dgp.spq(p = p, listw = dis, rho = rho) lsrq <- local.sp.runs.test(fx = fx, listw = dis) print(lsrq) plot(lsrq, coor = cbind(cx,cy), sig = 0.05) lsrq <- local.sp.runs.test(fx = fx, listw = dis, data = ) print(lsrq) plot(lsrq, sf = coor) # Version boots lsrq <- local.sp.runs.test(fx = fx, listw = dis, data = coor, distr ="bootstrap", nsim = 299) print(lsrq) plot(lsrq, sf = coor) # SRQ test based on inverse distance library(lwgeom) data("FastFood.sf") sf::sf_use_s2(FALSE) n = dim(FastFood.sf)[1] dis <- 1000000/matrix(as.numeric( sf::st_distance(FastFood.sf, FastFood.sf)), ncol = n, nrow = n) diag(dis) <- 0 dis <- (dis < quantile(dis,.01))*dis formula <- ~ Type lsrq <- local.sp.runs.test(formula = formula, data = FastFood.sf, listw = dis) print(lsrq) plot(lsrq, sf = FastFood.sf)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.