R: Spatial neighbour sparse representation

as.spam.listw {spatialreg} | R Documentation

## Spatial neighbour sparse representation

### Description

Interface between Matrix class objects and weights lists. The `as.spam.listw` method converts a `"listw"` object to a sparse matrix as defined in the spam package.

### Usage

    as.spam.listw(listw)
    listw2U_spam(lw)
    listw2U_Matrix(lw)
    as_dgRMatrix_listw(listw)
    as_dsTMatrix_listw(listw)
    as_dsCMatrix_I(n)
    as_dsCMatrix_IrW(W, rho)
    Jacobian_W(W, rho)
    powerWeights(W, rho, order=250, X, tol=.Machine$double.eps^(3/5))

### Arguments

`listw, lw` | a `listw` object from for example `nb2listw`
`W` | a `dsTMatrix` object created using `as_dsTMatrix_listw` from a symmetric `listw` object
`rho` | spatial regression coefficient
`n` | length of diagonal for identity matrix
`order` | Power series maximum limit
`X` | A numerical matrix
`tol` | Tolerance for convergence of power series

### Author(s)

Roger Bivand Roger.Bivand@nhh.no

### See Also

`nb2listw`

### Examples

    ## Not run:
    require(sf, quietly=TRUE)
    columbus <- st_read(system.file("shapes/columbus.shp", package="spData")[1], quiet=TRUE)
    #require(spdep, quietly=TRUE)
    col.gal.nb <- spdep::read.gal(system.file("weights/columbus.gal", package="spData")[1])
    col.listw <- spdep::nb2listw(col.gal.nb)
    if (require("spam", quietly=TRUE)) {
      col.sp <- as.spam.listw(col.listw)
      str(col.sp)
    }
    suppressMessages(nyadjmat <- as.matrix(foreign::read.dbf(system.file(
     "misc/nyadjwts.dbf", package="spData")[1])[-1]))
    nyadjlw <- spdep::mat2listw(nyadjmat)
    listw_NY <- spdep::nb2listw(nyadjlw$neighbours, style="B")
    W_C <- as(listw_NY, "CsparseMatrix")
    W_R <- as(listw_NY, "RsparseMatrix")
    W_S <- as(listw_NY, "symmetricMatrix")
    n <- nrow(W_S)
    I <- Diagonal(n)
    rho <- 0.1
    c(determinant(I - rho * W_S, logarithm=TRUE)$modulus)
    sum(log(1 - rho * eigenw(listw_NY)))
    nW <- - W_S
    nChol <- Cholesky(nW, Imult=8)
    n * log(rho) + (2 * c(determinant(update(nChol, nW, 1/rho))$modulus))

    ## End(Not run)
    nb7rt <- spdep::cell2nb(7, 7, torus=TRUE)
    x <- matrix(sample(rnorm(500*length(nb7rt))), nrow=length(nb7rt))
    lw <- spdep::nb2listw(nb7rt)
    if (FALSE) {
    # Only needed in some simulation settings where the input and
    # output distributions must agree in all but autocorrelation
    x <- apply(x, 2, scale)
    st <- apply(x, 2, function(x) shapiro.test(x)$p.value)
    x <- x[, (st > 0.2 & st < 0.8)]
    x <- apply(x, 2, function(v) residuals(spautolm(v ~ 1, listw=lw,
     method="eigen", control=list(pre_eig=e, fdHess=FALSE))))
    x <- apply(x, 2, scale)
    }
    W <- as(lw, "CsparseMatrix")
    system.time(e <- invIrM(nb7rt, rho=0.98, method="solve", feasible=NULL) %*% x)
    system.time(ee <- powerWeights(W, rho=0.98, X=x))
    str(attr(ee, "internal"))
    all.equal(e, as(ee, "matrix"), check.attributes=FALSE)
    ## Not run:
    system.time(ee <- powerWeights(W, rho=0.9, X=x))
    system.time(ee <- powerWeights(W, rho=0.98, order=1000, X=x))
    all.equal(e, as(ee, "matrix"), check.attributes=FALSE)
    nb60rt <- spdep::cell2nb(60, 60, torus=TRUE)
    W <- as(spdep::nb2listw(nb60rt), "CsparseMatrix")
    set.seed(1)
    x <- matrix(rnorm(dim(W)[1]), ncol=1)
    system.time(ee <- powerWeights(W, rho=0.3, X=x))
    str(as(ee, "matrix"))
    obj <- errorsarlm(as(ee, "matrix")[,1] ~ 1, listw=spdep::nb2listw(nb60rt), method="Matrix")
    coefficients(obj)

    ## End(Not run)

[Package spatialreg version 1.2-1 Index]