The function converts a square spatial weights matrix, optionally a sparse matrix to a weights list object, optionally adding region IDs from the row names of the matrix, as a sequence of numbers 1:nrow(x), or as given as an argument. The style can be imposed by rebuilting the weights list object internally.

mat2listw(x, row.names = NULL, style="M")

## Arguments

x

A square non-negative matrix with no NAs representing spatial weights; may be a matrix of class “sparseMatrix”

row.names

row names to use for region IDs

style

default "M", unknown style; if not "M", passed to nb2listw to re-build the object

## Value

A listw object with the following members:

style

"M", meaning matrix style, underlying style unknown, or assigned style argument in rebuilt object

neighbours

the derived neighbours list

weights

the weights for the neighbours derived from the matrix

## Author

Roger Bivand Roger.Bivand@nhh.no

nb2listw, nb2mat

## Examples

columbus <- st_read(system.file("shapes/columbus.shp", package="spData")[1], quiet=TRUE)
col005 <- dnearneigh(st_coordinates(st_centroid(st_geometry(columbus),
of_largest_polygon=TRUE)), 0, 0.5, as.character(columbus$NEIGNO)) summary(col005) #> Neighbour list object: #> Number of regions: 49 #> Number of nonzero links: 170 #> Percentage nonzero weights: 7.080383 #> Average number of links: 3.469388 #> 4 regions with no links: #> 1005 1006 1008 1043 #> Link number distribution: #> #> 0 1 2 3 4 5 6 7 8 9 #> 4 11 5 8 3 9 2 2 3 2 #> 11 least connected regions: #> 1001 1007 1018 1010 1045 1044 1046 1047 1049 1048 1015 with 1 link #> 2 most connected regions: #> 1038 1036 with 9 links col005.w.mat <- nb2mat(col005, zero.policy=TRUE) col005.w.b <- mat2listw(col005.w.mat) summary(col005.w.b$neighbours)
#> Neighbour list object:
#> Number of regions: 49
#> Number of nonzero links: 170
#> Percentage nonzero weights: 7.080383
#> Average number of links: 3.469388
#> 4 regions with no links:
#> 1005 1006 1008 1043
#>
#>  0  1  2  3  4  5  6  7  8  9
#>  4 11  5  8  3  9  2  2  3  2
#> 11 least connected regions:
#> 1001 1007 1018 1010 1045 1044 1046 1047 1049 1048 1015 with 1 link
#> 2 most connected regions:
#> 1038 1036 with 9 links
diffnb(col005, col005.w.b$neighbours) #> Neighbour list object: #> Number of regions: 49 #> Number of nonzero links: 0 #> Percentage nonzero weights: 0 #> Average number of links: 0 #> 49 regions with no links: #> 1005 1001 1006 1002 1007 1008 1004 1003 1018 1010 1038 1037 1039 1040 #> 1009 1036 1011 1042 1041 1017 1043 1019 1012 1035 1032 1020 1021 1031 #> 1033 1034 1045 1013 1022 1044 1023 1046 1030 1024 1047 1016 1014 1049 #> 1029 1025 1028 1048 1015 1027 1026 col005.w.mat.3T <- kronecker(diag(3), col005.w.mat) col005.w.b.3T <- mat2listw(col005.w.mat.3T, style="W") #> Warning: zero sum general weights summary(col005.w.b.3T$neighbours)
#> Neighbour list object:
#> Number of regions: 147
#> Number of nonzero links: 510
#> Percentage nonzero weights: 2.360128
#> Average number of links: 3.469388
#> 12 regions with no links:
#> 1 3 6 21 50 52 55 70 99 101 104 119
#>
#>  0  1  2  3  4  5  6  7  8  9
#> 12 33 15 24  9 27  6  6  9  6
#> 33 least connected regions:
#> 2 5 9 10 31 34 36 39 42 46 47 51 54 58 59 80 83 85 88 91 95 96 100 103 107 108 129 132 134 137 140 144 145 with 1 link
#> 6 most connected regions:
#> 11 16 60 65 109 114 with 9 links
run <- FALSE
if (require("spatialreg", quiet=TRUE)) run <- TRUE
if (run) {
W <- as(nb2listw(col005, style="W", zero.policy=TRUE), "CsparseMatrix")
col005.spM <- mat2listw(W)
summary(col005.spM$neighbours) } #> Warning: 1005, 1006, 1008, 1043 are not origins #> Neighbour list object: #> Number of regions: 49 #> Number of nonzero links: 170 #> Percentage nonzero weights: 7.080383 #> Average number of links: 3.469388 #> 4 regions with no links: #> 1005 1006 1008 1043 #> Link number distribution: #> #> 0 1 2 3 4 5 6 7 8 9 #> 4 11 5 8 3 9 2 2 3 2 #> 11 least connected regions: #> 1001 1007 1018 1010 1045 1044 1046 1047 1049 1048 1015 with 1 link #> 2 most connected regions: #> 1038 1036 with 9 links if (run) { diffnb(col005, col005.spM$neighbours)
}
#> Neighbour list object:
#> Number of regions: 49
#> Number of nonzero links: 0
#> Percentage nonzero weights: 0
#> Average number of links: 0
#> 49 regions with no links:
#> 1005 1001 1006 1002 1007 1008 1004 1003 1018 1010 1038 1037 1039 1040
#> 1009 1036 1011 1042 1041 1017 1043 1019 1012 1035 1032 1020 1021 1031
#> 1033 1034 1045 1013 1022 1044 1023 1046 1030 1024 1047 1016 1014 1049
#> 1029 1025 1028 1048 1015 1027 1026
if (run && require("Matrix", quiet=TRUE)) {
IW <- kronecker(Diagonal(3), W)
col005.spM.3T <- mat2listw(as(IW, "CsparseMatrix"), style="W")
summary(col005.spM.3T\$neighbours)
}
#> Warning: 1, 3, 6, 21, 50, 52, 55, 70, 99, 101, 104, 119 are not origins
#> Warning: zero sum general weights
#> Neighbour list object:
#> Number of regions: 147
#> Number of nonzero links: 510
#> Percentage nonzero weights: 2.360128
#> Average number of links: 3.469388
#> 12 regions with no links:
#> 1 3 6 21 50 52 55 70 99 101 104 119