Your question would be better answered on r-sig-Geo list.
Nevertheless, here is the solution
neigh.dist <- nbdists(neigh.nb, coords, longlat=TRUE)
inverse <- lapply(neigh.dist, function(x) (1/(x^2)))
Now instead use,
neigh.listw <- nb2listw(neigh.dist, glist=inverse,
style="W",zero.policy=TRUE)
You have to use a nb object to create the list.
Nikhil
On Feb 21, 2010, at 11:26 PM, Adam Boessen wrote:
Hi Everyone,
I'm new to R, so thank you in advance for your patience. I'm using
US census block groups in Buffalo New York to examine how
neighborhood characteristics affect crime. I would like to use an
inverse distance weights (distance decay) of block group centroids
that is banded at 1 kilometer. In other words, I would like to
create a one kilometer buffer around each of the centroids, then use
row standardized inverse distance weights. Finally, I would like to
run a spatial error model using these weights.
Here is my code:
library(foreign)
library(spdep)
buffalo <- read.dta("buffalo_blkgrps.dta")
attach(buffalo)
names(buffalo)
[1] "bgidfp00" "gage2900" "gavghhinc00" "gblack00"
"gcrwd00"
[6] "gethhet00" "ghhincsdln00" "glatino00" "gocc00"
"gowner00"
[11] "gpop00" "gpov00" "assaul" "robber"
"burglr"
[16] "motveh" "murder" "larcen" "x" "y"
#distance based neighbors - making a neighbor list - bounded to 1
kilometer
coords <-(cbind(x,y))
neigh.nb <- dnearneigh(coords, 0, 1, longlat=TRUE)
summary(neigh.nb)
Neighbour list object:
Number of regions: 409
Number of nonzero links: 5298
Percentage nonzero weights: 3.167126
Average number of links: 12.95355
1 region with no links:
12
Link number distribution:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26
1 1 3 3 4 5 14 25 28 23 19 26 32 44 29 24 29 25 24 13 15 12 3
4 1 1 1
1 least connected region:
3 with 1 link
1 most connected region:
382 with 26 links
#making inverse distance weights
neigh.dist <- nbdists(neigh.nb, coords, longlat=TRUE)
inverse <- lapply(neigh.dist, function(x) (1/(x^2)))
#creating row standardized spatial weights from list
neigh.listw <- nb2listw(inverse, style="W",zero.policy=TRUE)
Error in nb2listw(inverse, style = "W", zero.policy = TRUE) :
Not a neighbours list
traceback()
2: stop("Not a neighbours list")
1: nb2listw(inverse, style = "W", zero.policy = TRUE)
assault <- errorsarlm(assaul_r ~ gage2900 + gblack00 + gcrwd00 +
gethhet00 + ghhincsdln00 + glatino00 + gocc00+ gowner00 + gpov00,
+ data=buffalo,listw=neigh.listw, zero.policy=TRUE)
Error in eval(expr, envir, enclos) : object 'assaul_r' not found
The model will run when I do not include the code with the inverse
weights and only interpoint distances, but it's unclear to me why I
can't include the inverse distances when using nb2listw. Any ideas
on why this is occurring and/or help to alleviate this issue would
be much appreciated. The spatial error model from errorsarlm
(package=spdep) will also run fine when I don't include the inverse
weights. Is there a better way to go about running this spatial
error model using row standardized inverse distance weights? Would
spautolm from the spdep package be better suited for these data?
Any comments or suggestions are welcome.
Thank you for your time!
Adam
Adam Boessen
Doctoral Student
Department of Criminology, Law and Society
University of California, Irvine
aboes...@uci.edu
p.s. If it's helpful, here is my version of R:
version
_
platform i386-apple-darwin9.8.0
arch i386
os darwin9.8.0
system i386, darwin9.8.0
status
major 2
minor 10.1
year 2009
month 12
day 14
svn rev 50720
language R
version.string R version 2.10.1 (2009-12-14)
[[alternative HTML version deleted]]
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo