tests/testthat/test-sa-fns.R

context("SA indices")
test_that("SA indices produce the same results as spdep when expected", {
    skip_on_cran()
#    skip_if_not_installed("spatialreg")
    d=10
    data(georgia)
    W <- shape2mat(georgia, style = "W")
    C <- shape2mat(georgia, style = "B")
    nb <- spdep::poly2nb(georgia)
    lw.W <- spdep::nb2listw(nb, style = "W")    
    lw.C <- spdep::nb2listw(nb, style = "B")
    x <- sim_sar(w=W, rho = 0.7)
    n <- length(x)
    ## Moran coefficient, binary matrix C
    mc_spdep <- spdep::moran.test(x, lw.C)$estimate["Moran I statistic"]
    mc_spdep <- as.numeric(mc_spdep)
    mc_geostan <- mc(x, C, digits = d)
    expect_equal(mc_geostan, mc_spdep)
    ## Moran coefficient, row-standardized matrix W
    mc_spdep <- spdep::moran.test(x, lw.W)$estimate["Moran I statistic"]
    mc_spdep <- as.numeric(mc_spdep)
    mc_geostan <- mc(x, W, digits = d)
    expect_equal(mc_geostan, mc_spdep)
    ## Local Moran's I: is not calculated in the same manner
    geo_lisa <- geostan::lisa(x, W, type = FALSE, digits = d)
    spdep_lisa <- as.numeric(spdep::localmoran(x, lw.W)[,"Ii"])
    m2 <- sum(scale(x, center=T, scale = T)^2)/length(x)
    expect_equal(geo_lisa/m2, spdep_lisa)
    ## APLE (estimate of SAR SA parameter) (requires external package spatialreg)
#    x <- as.numeric(scale(x))
#    aple_spdep <- spatialreg::aple(x, lw.W)
#    aple_geostan <- geostan::aple(x, W, digits = d)
#    expect_equal(aple_spdep, aple_geostan)    
    ## Geary Ratio
    GR_geostan <- gr(x, W, digits = d)
    GR_spdep <- spdep::geary.test(x, lw.W)
    expect_equal(GR_geostan, as.numeric(GR_spdep$estimate["Geary C statistic"]))    
    ## Local Geary
    LG_geostan <- lg(x, W, digits = d)
    LG_spdep <- spdep::localC(x, lw.W)
    expect_equal(LG_geostan, LG_spdep)
})

Try the geostan package in your browser

Any scripts or data that you put into this service are public.

geostan documentation built on April 3, 2025, 10:04 p.m.