[R-sig-Geo] [FORGED] Create a Spatial Weight Matrix based on road distance

Rolando Valdez rv@|dezr @end|ng |rom gm@||@com
Mon Jun 24 06:52:58 CEST 2019


El dom., 23 de jun. de 2019 a la(s) 03:00, Roger Bivand (Roger.Bivand using nhh.no)
escribió:

> Comments inline below:
>
> On Sun, 23 Jun 2019, Rolando Valdez wrote:
>
> > I apologize for the lack of clarity.
> >
> > Let me try again:
> >
> > The SWM captures the spatial structure among territories. In the case of
> a
> > matrix based on distance, you define a distance-threshold, say 50 km, and
> > every territory under that distance is considered as neighbor, in the
> > matrix, those territories considered neighbors take the value 1, and 0
> > otherwise (territories beyond 50 km). This is what 'dnearneigh' function
> > does.
> >
> > Then, I want to define a distance-threshold, say 50 km by road (not
> > euclidean) and every territory under that distance (by road) be
> considered
> > as neighbor.
>
>
> So the main goal is to use distance by road between territories to
> construct a neighbour object, with a maximum distance threshold.
>

Yes, just like that.

>
> Firstly, why do you suppose that this will represent your a priori
> knowledge better than contiguity, which is the most obvious measure of
> neighbourhood for data with areal support?
>

I'm running the same specification with 8 distance-threshold to assess the
impact of the distance on a key dependent variable.

>
> If there are major mountain chains or water bodies impeding contact across
> a boundary between contiguous territories, could you not just edit out
> those graph edges (spdep::edit.nb() for example)? If there are many, a
> programmatic approach may be needed.
>

Yes, there are many cases like this you mentioned.

>
> The inherent difficulty is that distances to territories in practice mean
> that you have to change support from area to point, and that needs
> thinking through. A territory centroid may, for example, not lie on a
> transport link. If you have finer scale population or production data, you
> might use weighted centroids, but this involves further steps, and using
> this kind of data may add endogeneity, as the variables used to define the
> neighbour object may enter your model elsewhere.
>

I have redefine the shapefile to urban areas, these polygons are smaller
than counties, thus, their centroids would lie on the roads more
confidently.

I am not using variables to define the neighbor object.

>
> So:
>
> I) explain why you cannot simply use contiguities (using accessibility as
> a covariate if important);
>

Because the distance is an explanatory component itself.

>
> II) if some contiguities given territory boundaries should be removed
> because there are good reasons (mountain range, ...) for no contact,
> provide a reproducible example so that you can be assisted in programming
> the criteria for thinning the contiguity graph; and
>
> III) if you really want to go with road distances, provide a reproducible
> example for first finding the representative point for each territory and
> then giving the road network and territory boundaries. With the linear
> network and the change-of-support points, it is not unlikely that the
> spatstat linnet route will be easiest to implement. I have used raster
> cost distances in GRASS for things like this (see the Snow example in ch.
> 4 in ASDAR); gdistance is slower in that setting.
>

I've seen the example you suggest, I cannot figure out how to fit to my case
.

>
> Hope this helps,
>
> Roger
>
> PS. It would be really helpful to use affiliations, as gmail addresses
> tell us nothing about what might be expected of background knowledge. This
> posting feels like someone looking for a response to a reviewer of an
> article submitted to a journal, where the reviewer has little idea of the
> underlying challenges involved in making such a revision. Not knowing
> this, and the lack of a reproducible example leaves helpers pretty much in
> the dark. Using existing or toy data sets lets you post without showing
> too much of the detail in your specific problem, but in this thread there
> has been too little information for reasonable traction.
>

You are absolutely right. I am trying to follow a suggestion from a
referee, who suggests to switch from the euclidean distance to a road
distance. This is the reason I posted my doubt, I had no clue even where to
start.

Now, I have task to do.

Thanks a lot for your help.


> >
> > El sáb., 22 de jun. de 2019 a la(s) 21:15, Rolf Turner (
> > r.turner using auckland.ac.nz) escribió:
> >
> >> On 23/06/19 3:30 PM, Rolando Valdez wrote:
> >>> Sorry again.
> >>>
> >>> A Spatial Weight Matrix (swm) is an object used in spatial econometrics
> >>> to characterize the spatial structure among territories. It is an
> >>> element nxn where n is the number of territorial units (counties,
> >>> districts, states, cities, regions) in the sample and it could be based
> >>> on contiguity or distance. Usually, you can create a swm based on
> >>> distance using 'dnearneigh' from spdep and then convert to a listw
> >>> through 'nb2listw'. The problem is that the matrix that you generate
> >>> trough 'dnearneigh'computes the euclidean distance among centroids of
> >>> polygons. This is where I spot my issue, I need to compute the swm
> using
> >>> the road distance instead of euclidean distance computed through
> >>> 'dnearneigh'. I do have a shapefile with poligons (counties) and
> another
> >>> shapefile with lines (roads).
> >>
> >> OK.  It's getting a *bit* clearer ....  You are interested in "road
> >> distances" between counties.  I'm still not entirely sure what this
> >> means.  Is it the *minimum* distance by road from one county to another?
> >> In which case, if two counties are contiguous (adjacent) and there is a
> >> road crossing the border between the two, is the distance between the
> >> counties equal to zero?  (This doesn't seem like it would be
> >> satisfactory ....)
> >>
> >> Yes, actually it is possible that two counties were connected by more
> than
> > one road, however it's not a big deal. If I define a distance of 50 km,
> it
> > doesn't matter how many times two counties are connected, I just need
> that
> > they are at 50 km trough, at least, one road.
> >
> >> If this is not the case, then what *is* the case?  Perhaps you want
> >> distances between the *centroids* of the counties.  What then do you
> >> mean by road distance when the centroids do not lie on a road?
> >>
> >
> > This is a big challenge, I'm still working on it.
> >
> >>
> >> You apparently need to deal with counties in which there are no roads at
> >> all.  To handle this you have to define what *you* mean by the distance
> >> by road from county A to county B when there are no roads at all in
> >> county B.  Perhaps infinity would be the appropriate distance, but *I*
> >> don't know; you have to make the call.
> >>
> >
> > If two counties are not connected through a road, they could not be
> > neighbors. In this case, it would correspond to a value 0 in the matrix.
> >
> >>
> >> Previously you indicated that you needed to know (pairwise) road
> >> distances between specified points in a given set, and I showed you how
> >> to obtain those using pairdist(), from spatstat.  Now it seems that you
> >> want something rather different, and it's still not clear what.
> >>
> >> In a sense is the same, but you said so properly, We have different
> > research fields.
> >
> >
> >> You need to get *your* thoughts clear; make some definitions and
> >> specifications, and decide what you really want or need.
> >>
> >
> > I got it.
> >
> >>
> >> It seems that you are expecting R to magically do your thinking for you;
> >> it won't!
> >>
> >> No, I'm not expecting that.
> >
> >> cheers,
> >>
> >> Rolf
> >>
> >>> El sáb., 22 de jun. de 2019 a la(s) 20:00, Rolf Turner
> >>> (r.turner using auckland.ac.nz <mailto:r.turner using auckland.ac.nz>) escribió:
> >>>
> >>>
> >>>     On 23/06/19 2:38 PM, Rolando Valdez wrote:
> >>>
> >>>     > I am sorry, I was not clear enough. My goal is to calculate a
> >>>     spatial
> >>>     > weight matrix (nxn) across counties but, instead of euclidean
> >>>     distance,
> >>>     > to use road distance.
> >>>
> >>>     I'm afraid I still don't understand.  To put it mildly. You
> >> presumably
> >>>     have a clear idea of what you are trying to, but those of us who
> are
> >>>     not
> >>>     involved in your research have no such idea.  We (or at least I)
> >>>     haven't
> >>>     a clue as to what you are talking about.
> >>>
> >>>     What do you mean by "spatial weight"?  What are these weights used
> >> for?
> >>>     What is n?  How are the counties involved?  Is n the number of
> >>>     counties?
> >>>     Are you interested in the road distance (minimum road distance?)
> >>>     between
> >>>     pairs of counties?
> >>>
> >>>     Please explain *clearly* and do not expect those who are trying to
> >> help
> >>>     you to be mind-readers!!!
> >>>
> >>>     cheers,
> >>>
> >>>     Rolf
> >>>
> >>>     >
> >>>     > El sáb., 22 de jun. de 2019 a la(s) 19:28, Rolf Turner
> >>>     > (r.turner using auckland.ac.nz <mailto:r.turner using auckland.ac.nz>
> >>>     <mailto:r.turner using auckland.ac.nz <mailto:r.turner using auckland.ac.nz>>)
> >>>     escribió:
> >>>     >
> >>>     >
> >>>     >     On 23/06/19 1:17 PM, Rolando Valdez wrote:
> >>>     >
> >>>     >     > Thank you for your answer.
> >>>     >     >
> >>>     >     > I have a shapefile with, say, counties, and I got another
> >>>     >     shapefile with
> >>>     >     > the roads. ¿What if a county does not intersect any road?
> >>>     >
> >>>     >     I am sorry, but it is not at all clear to me just what the
> >>>     problem is.
> >>>     >     How do the counties come into the picture?  You said you
> >>>     wanted to get
> >>>     >     the road distance between points on the roads.  What have the
> >>>     counties
> >>>     >     got to do with this?
> >>>     >
> >>>     >     Can you perhaps provide a reproducible example?
> >>>     >
> >>>     >     cheers,
> >>>     >
> >>>     >     Rolf
> >>>     >
> >>>     >     >
> >>>     >     > El jue., 20 de jun. de 2019 a la(s) 19:08, Rolf Turner
> >>>     >     > (r.turner using auckland.ac.nz <mailto:r.turner using auckland.ac.nz>
> >>>     <mailto:r.turner using auckland.ac.nz <mailto:r.turner using auckland.ac.nz>>
> >>>     >     <mailto:r.turner using auckland.ac.nz
> >>>     <mailto:r.turner using auckland.ac.nz> <mailto:r.turner using auckland.ac.nz
> >>>     <mailto:r.turner using auckland.ac.nz>>>)
> >>>     >     escribió:
> >>>     >     >
> >>>     >     >
> >>>     >     >     On 21/06/19 12:26 PM, Rolando Valdez wrote:
> >>>     >     >
> >>>     >     >     > Dear community,
> >>>     >     >     >
> >>>     >     >     > Is there any way to create a spatial weight matrix
> >>>     based
> >>>     >     on road
> >>>     >     >     distance?
> >>>     >     >     > I am trying to use the road distance between two
> >> points
> >>>     >     instead of
> >>>     >     >     > euclidean distance.
> >>>     >     >     >
> >>>     >     >     > I've seen that there is a package named osrm. Can
> >>>     anyone give
> >>>     >     >     some advice?
> >>>     >     >
> >>>     >     >     I don't know anything about "osrm".  Calculating "road
> >>>     distances"
> >>>     >     >     can be
> >>>     >     >     done in the spatstat package reasonably easily, if you
> >>>     take
> >>>     >     the trouble
> >>>     >     >     to represent your collection of roads as a "linnet"
> >>>     object.
> >>>     >     >
> >>>     >     >     Given that you have done so, suppose that your linnet
> >>>     object
> >>>     >     is "L" and
> >>>     >     >     that you have vectors "x" and "y" specifying the
> >>>     points on L
> >>>     >     (i.e. on
> >>>     >     >     your roads) between which you want to know the
> >> distances.
> >>>     >     >
> >>>     >     >     Do:
> >>>     >     >
> >>>     >     >           X    <- lpp(data.frame(x=x,y=y),L)
> >>>     >     >           dMat <- pairdist(X)
> >>>     >     >
> >>>     >     >     The object "dMat" is a (symmetric) square matrix;
> >>>     dMat[i,j]
> >>>     >     is the
> >>>     >     >     distance between point i and point j.  (Of course the
> >>>     >     diagonal entries
> >>>     >     >     are all 0.)
> >>>     >     >
> >>>     >     >     If your collection of roads is specified by means of a
> >>>     shapefile,
> >>>     >     >     vignette("shapefiles") will tell you how to turn this
> >>>     >     collection into a
> >>>     >     >     "psp" ("planar segment pattern") object; the function
> >>>     (method)
> >>>     >     >     as.linnet.psp() can then be used to turn the "psp"
> >>>     object into a
> >>>     >     >     "linnet" object.
> >>>     >     >
> >>>     >     >     HTH
> >>
> >
> >
> >
>
> --
> Roger Bivand
> Department of Economics, Norwegian School of Economics,
> Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
> https://orcid.org/0000-0003-2392-6140
> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en



-- 
Rol~

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list