Adding a Few Neighbour Relationships to a nb List

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

Adding a Few Neighbour Relationships to a nb List

Stuart Reece
Dear R-Sig-Geo list,

 

I was wondering if it might be possible please to request assistance with
adding some nb relationships to a .nb.gal list composed either by GeoDa or
poly2nb in R????

 

The shapefile at this URL
<https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
e>  divides USA into 395 substate regions.  For health and demographical
reasons it is important to include both Hawaii and Alaska in the
spatiotemporal analysis so I want to introduce these into the Southeast
coast of California and the Pacific northwest respectively.

 

This is just as Giovanni Millo added in spatial relationships for Sicily
across the Strait of Messina for splm on page 7 of the splm pdf.

 

I found edit.nb in spdep and operated it just as described in the
instructions and here
<https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
crashed RStudio many times but ran well in R3.6.1.  However even though I
assigned it to a new object it did not save well.  Although when I plotted
the dxxx file as the difference between the old and modified files it
plotted the changes beautifully in red and black respectively when plotted
by themselves it introduced many long distance extraneous relationships.  To
get the edited nb list file out of R 3.6.1 and into RStudio I saved it as an
RDS file.  However when opened in RStudio it was grossly erroneous and
included extraneous links from Hawaii to Boston and New York.  When I opened
the file in RStudio it again introduced these extraneous links.

 

Saving it as a further new object in R 3.6.1 did not remedy these
difficulties.

 

The other problem I have is that the spdep poly2nb function excludes
Richmond, an island off the southern tip of Long Island near New York as it
is an island.  Also one of the areas - Region 10 in Washington DC - is also
excluded for reasons of which I am unsure.

 

I found some code here to just patch single areas
<https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like this
but when I run it, it throws an integer error

"  INTEGER() can only be applied to a 'integer', not a 'double'  

 

No combination of bracketing around subscripts helps or works at all.  The
link mentioned has these statements in it

 

nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))

 

which makes me think that I should insert a vector "  c(i,j) "  where
indicated.  Even using "c(as.integer(i),as.integer(j)) "

or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
error.

 

I am sure I am not the only one to have encountered such difficulties but I
have really tried everything I can think of.

 

The other thing I would really like is some clear instructions as to the
true underlying structure of the nb list.  If I could clearly understand
this then I could just go into the affected lines of the list of lists and
edit them directly.

 

However I am quite unable to find any clear description of its structure on
line.

 

Similarly I cannot find the source code for drop.links online to try to
translate this code into add.links directly, as was also suggested.

 

But such a function would I think be enormously helpful and of invaluable
assistance for final editing.

 

Thankyou ever so much in advance for your kind and gracious assistance.

 

Yours sincerely,

 

Stuart Reece.


        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Vijay Lulla
Maybe https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html
can help with all your questions.
https://cran.r-project.org/web/packages/spdep/vignettes/nb_sf.html contains
a little more detail about nb structure.  Finally, I encourage you to use
`str` to study the structure of R objects.
HTH,
Vijay.

On Wed, Aug 7, 2019 at 10:44 AM Stuart Reece <[hidden email]>
wrote:

> Dear R-Sig-Geo list,
>
>
>
> I was wondering if it might be possible please to request assistance with
> adding some nb relationships to a .nb.gal list composed either by GeoDa or
> poly2nb in R????
>
>
>
> The shapefile at this URL
> <
> https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
> e>  divides USA into 395 substate regions.  For health and demographical
> reasons it is important to include both Hawaii and Alaska in the
> spatiotemporal analysis so I want to introduce these into the Southeast
> coast of California and the Pacific northwest respectively.
>
>
>
> This is just as Giovanni Millo added in spatial relationships for Sicily
> across the Strait of Messina for splm on page 7 of the splm pdf.
>
>
>
> I found edit.nb in spdep and operated it just as described in the
> instructions and here
> <https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
> crashed RStudio many times but ran well in R3.6.1.  However even though I
> assigned it to a new object it did not save well.  Although when I plotted
> the dxxx file as the difference between the old and modified files it
> plotted the changes beautifully in red and black respectively when plotted
> by themselves it introduced many long distance extraneous relationships.
> To
> get the edited nb list file out of R 3.6.1 and into RStudio I saved it as
> an
> RDS file.  However when opened in RStudio it was grossly erroneous and
> included extraneous links from Hawaii to Boston and New York.  When I
> opened
> the file in RStudio it again introduced these extraneous links.
>
>
>
> Saving it as a further new object in R 3.6.1 did not remedy these
> difficulties.
>
>
>
> The other problem I have is that the spdep poly2nb function excludes
> Richmond, an island off the southern tip of Long Island near New York as it
> is an island.  Also one of the areas - Region 10 in Washington DC - is also
> excluded for reasons of which I am unsure.
>
>
>
> I found some code here to just patch single areas
> <https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like
> this
> but when I run it, it throws an integer error
>
> "  INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> No combination of bracketing around subscripts helps or works at all.  The
> link mentioned has these statements in it
>
>
>
> nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
> nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))
>
>
>
> which makes me think that I should insert a vector "  c(i,j) "  where
> indicated.  Even using "c(as.integer(i),as.integer(j)) "
>
> or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
> error.
>
>
>
> I am sure I am not the only one to have encountered such difficulties but I
> have really tried everything I can think of.
>
>
>
> The other thing I would really like is some clear instructions as to the
> true underlying structure of the nb list.  If I could clearly understand
> this then I could just go into the affected lines of the list of lists and
> edit them directly.
>
>
>
> However I am quite unable to find any clear description of its structure on
> line.
>
>
>
> Similarly I cannot find the source code for drop.links online to try to
> translate this code into add.links directly, as was also suggested.
>
>
>
> But such a function would I think be enormously helpful and of invaluable
> assistance for final editing.
>
>
>
> Thankyou ever so much in advance for your kind and gracious assistance.
>
>
>
> Yours sincerely,
>
>
>
> Stuart Reece.
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Stuart Reece
Thanks Vijay.

Big help.

I will go through the recommended chapter in detail.

Normally for a list I can just use single square brackets like this [] to access the elements and change them by assignment.

But I cannot quite figure out how to do this with the nb lists.

 

Doing this with [[]] works really well to create nicely corrected graphs.

 

But fails due it “out of bounds index errors” with regression equations????

 

I find this ever so confusing….???

 

Thankyou so much again,

 

Stuart Reece.

 

 

 

 

 

 

 

 

 

 

From: Vijay Lulla <[hidden email]>
Sent: Thursday, 8 August, 2019 1:53 AM
To: Stuart Reece <[hidden email]>
Cc: Roger Bivand <[hidden email]>; R-sig-geo Mailing List <[hidden email]>
Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List

 

Maybe https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html can help with all your questions. https://cran.r-project.org/web/packages/spdep/vignettes/nb_sf.html contains a little more detail about nb structure.  Finally, I encourage you to use `str` to study the structure of R objects.

HTH,

Vijay.

 

On Wed, Aug 7, 2019 at 10:44 AM Stuart Reece <[hidden email] <mailto:[hidden email]> > wrote:

Dear R-Sig-Geo list,



I was wondering if it might be possible please to request assistance with
adding some nb relationships to a .nb.gal list composed either by GeoDa or
poly2nb in R????



The shapefile at this URL
<https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
e>  divides USA into 395 substate regions.  For health and demographical
reasons it is important to include both Hawaii and Alaska in the
spatiotemporal analysis so I want to introduce these into the Southeast
coast of California and the Pacific northwest respectively.



This is just as Giovanni Millo added in spatial relationships for Sicily
across the Strait of Messina for splm on page 7 of the splm pdf.



I found edit.nb in spdep and operated it just as described in the
instructions and here
<https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
crashed RStudio many times but ran well in R3.6.1.  However even though I
assigned it to a new object it did not save well.  Although when I plotted
the dxxx file as the difference between the old and modified files it
plotted the changes beautifully in red and black respectively when plotted
by themselves it introduced many long distance extraneous relationships.  To
get the edited nb list file out of R 3.6.1 and into RStudio I saved it as an
RDS file.  However when opened in RStudio it was grossly erroneous and
included extraneous links from Hawaii to Boston and New York.  When I opened
the file in RStudio it again introduced these extraneous links.



Saving it as a further new object in R 3.6.1 did not remedy these
difficulties.



The other problem I have is that the spdep poly2nb function excludes
Richmond, an island off the southern tip of Long Island near New York as it
is an island.  Also one of the areas - Region 10 in Washington DC - is also
excluded for reasons of which I am unsure.



I found some code here to just patch single areas
<https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like this
but when I run it, it throws an integer error

"  INTEGER() can only be applied to a 'integer', not a 'double'  



No combination of bracketing around subscripts helps or works at all.  The
link mentioned has these statements in it



nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))



which makes me think that I should insert a vector "  c(i,j) "  where
indicated.  Even using "c(as.integer(i),as.integer(j)) "

or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
error.



I am sure I am not the only one to have encountered such difficulties but I
have really tried everything I can think of.



The other thing I would really like is some clear instructions as to the
true underlying structure of the nb list.  If I could clearly understand
this then I could just go into the affected lines of the list of lists and
edit them directly.



However I am quite unable to find any clear description of its structure on
line.



Similarly I cannot find the source code for drop.links online to try to
translate this code into add.links directly, as was also suggested.



But such a function would I think be enormously helpful and of invaluable
assistance for final editing.



Thankyou ever so much in advance for your kind and gracious assistance.



Yours sincerely,



Stuart Reece.


        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email] <mailto:[hidden email]>
https://stat.ethz.ch/mailman/listinfo/r-sig-geo




        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Barry Rowlingson-3
I recently answered a similar question on Stack Overflow where someone
needed to add detached polygons to their connected network by connecting
them to their nearest neighbour:

https://stackoverflow.com/questions/57269254/how-to-impute-missing-neighbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirect=1#comment101246065_57378930

in short, you can treat a `nb` object like a list of vectors: nb[[i]] is a
vector of indexes of objects connected to object `i`

BUT you have to make sure you store integers:

Here's a `nb` object from that question which in summary has this
manyneighbours for each region:

> card(nb)
[1] 2 3 4 3 2 0 0

lets set the 6th feature to be a neighbour of the first:

> nb[[6]] = 1

then uh-oh...

> card(nb)
Error in card(nb) :
  INTEGER() can only be applied to a 'integer', not a 'double'

same again only `as.integer`:

> nb[[6]] = as.integer(1)

and its happy:

> card(nb)
[1] 2 3 4 3 2 1 0

if you want to set the nighbours of 6 to several features:

> nb[[6]] = as.integer(c(1,2,3))
> card(nb)
[1] 2 3 4 3 2 3 0

Barry



On Wed, Aug 7, 2019 at 10:25 PM Stuart Reece <[hidden email]>
wrote:

> Thanks Vijay.
>
> Big help.
>
> I will go through the recommended chapter in detail.
>
> Normally for a list I can just use single square brackets like this [] to
> access the elements and change them by assignment.
>
> But I cannot quite figure out how to do this with the nb lists.
>
>
>
> Doing this with [[]] works really well to create nicely corrected graphs.
>
>
>
> But fails due it “out of bounds index errors” with regression equations????
>
>
>
> I find this ever so confusing….???
>
>
>
> Thankyou so much again,
>
>
>
> Stuart Reece.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> From: Vijay Lulla <[hidden email]>
> Sent: Thursday, 8 August, 2019 1:53 AM
> To: Stuart Reece <[hidden email]>
> Cc: Roger Bivand <[hidden email]>; R-sig-geo Mailing List <
> [hidden email]>
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>
>
>
> Maybe
> https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html
> can help with all your questions.
> https://cran.r-project.org/web/packages/spdep/vignettes/nb_sf.html
> contains a little more detail about nb structure.  Finally, I encourage you
> to use `str` to study the structure of R objects.
>
> HTH,
>
> Vijay.
>
>
>
> On Wed, Aug 7, 2019 at 10:44 AM Stuart Reece <[hidden email]
> <mailto:[hidden email]> > wrote:
>
> Dear R-Sig-Geo list,
>
>
>
> I was wondering if it might be possible please to request assistance with
> adding some nb relationships to a .nb.gal list composed either by GeoDa or
> poly2nb in R????
>
>
>
> The shapefile at this URL
> <
> https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
> e>  divides USA into 395 substate regions.  For health and demographical
> reasons it is important to include both Hawaii and Alaska in the
> spatiotemporal analysis so I want to introduce these into the Southeast
> coast of California and the Pacific northwest respectively.
>
>
>
> This is just as Giovanni Millo added in spatial relationships for Sicily
> across the Strait of Messina for splm on page 7 of the splm pdf.
>
>
>
> I found edit.nb in spdep and operated it just as described in the
> instructions and here
> <https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
> crashed RStudio many times but ran well in R3.6.1.  However even though I
> assigned it to a new object it did not save well.  Although when I plotted
> the dxxx file as the difference between the old and modified files it
> plotted the changes beautifully in red and black respectively when plotted
> by themselves it introduced many long distance extraneous relationships.
> To
> get the edited nb list file out of R 3.6.1 and into RStudio I saved it as
> an
> RDS file.  However when opened in RStudio it was grossly erroneous and
> included extraneous links from Hawaii to Boston and New York.  When I
> opened
> the file in RStudio it again introduced these extraneous links.
>
>
>
> Saving it as a further new object in R 3.6.1 did not remedy these
> difficulties.
>
>
>
> The other problem I have is that the spdep poly2nb function excludes
> Richmond, an island off the southern tip of Long Island near New York as it
> is an island.  Also one of the areas - Region 10 in Washington DC - is also
> excluded for reasons of which I am unsure.
>
>
>
> I found some code here to just patch single areas
> <https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like
> this
> but when I run it, it throws an integer error
>
> "  INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> No combination of bracketing around subscripts helps or works at all.  The
> link mentioned has these statements in it
>
>
>
> nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
> nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))
>
>
>
> which makes me think that I should insert a vector "  c(i,j) "  where
> indicated.  Even using "c(as.integer(i),as.integer(j)) "
>
> or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
> error.
>
>
>
> I am sure I am not the only one to have encountered such difficulties but I
> have really tried everything I can think of.
>
>
>
> The other thing I would really like is some clear instructions as to the
> true underlying structure of the nb list.  If I could clearly understand
> this then I could just go into the affected lines of the list of lists and
> edit them directly.
>
>
>
> However I am quite unable to find any clear description of its structure on
> line.
>
>
>
> Similarly I cannot find the source code for drop.links online to try to
> translate this code into add.links directly, as was also suggested.
>
>
>
> But such a function would I think be enormously helpful and of invaluable
> assistance for final editing.
>
>
>
> Thankyou ever so much in advance for your kind and gracious assistance.
>
>
>
> Yours sincerely,
>
>
>
> Stuart Reece.
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email] <mailto:[hidden email]>
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Vijay Lulla
In addition to Barry's recommendation/suggestion I will just add that I
always use the suffix L to numbers so that I have integers whenever I need
them.  Here's an example:
> str(1)
 num 1
> str(1L)
 int 1
> str(c(1,2,3))
 num [1:3] 1 2 3
> str(c(1L,2L,3L))
 int [1:3] 1 2 3
>

This isn't possible when you're indexing based on values extracted from
other lists/vectors in which case you have to use `as.integer` to force
integers.  Again, I find `str` to be invaluable in figuring all this out.
HTH,
Vijay.

On Wed, Aug 7, 2019 at 6:50 PM Barry Rowlingson <[hidden email]>
wrote:

> I recently answered a similar question on Stack Overflow where someone
> needed to add detached polygons to their connected network by connecting
> them to their nearest neighbour:
>
>
> https://stackoverflow.com/questions/57269254/how-to-impute-missing-neighbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirect=1#comment101246065_57378930
>
> in short, you can treat a `nb` object like a list of vectors: nb[[i]] is a
> vector of indexes of objects connected to object `i`
>
> BUT you have to make sure you store integers:
>
> Here's a `nb` object from that question which in summary has this
> manyneighbours for each region:
>
> > card(nb)
> [1] 2 3 4 3 2 0 0
>
> lets set the 6th feature to be a neighbour of the first:
>
> > nb[[6]] = 1
>
> then uh-oh...
>
> > card(nb)
> Error in card(nb) :
>   INTEGER() can only be applied to a 'integer', not a 'double'
>
> same again only `as.integer`:
>
> > nb[[6]] = as.integer(1)
>
> and its happy:
>
> > card(nb)
> [1] 2 3 4 3 2 1 0
>
> if you want to set the nighbours of 6 to several features:
>
> > nb[[6]] = as.integer(c(1,2,3))
> > card(nb)
> [1] 2 3 4 3 2 3 0
>
> Barry
>
>
>
> On Wed, Aug 7, 2019 at 10:25 PM Stuart Reece <[hidden email]>
> wrote:
>
>> Thanks Vijay.
>>
>> Big help.
>>
>> I will go through the recommended chapter in detail.
>>
>> Normally for a list I can just use single square brackets like this [] to
>> access the elements and change them by assignment.
>>
>> But I cannot quite figure out how to do this with the nb lists.
>>
>>
>>
>> Doing this with [[]] works really well to create nicely corrected graphs.
>>
>>
>>
>> But fails due it “out of bounds index errors” with regression
>> equations????
>>
>>
>>
>> I find this ever so confusing….???
>>
>>
>>
>> Thankyou so much again,
>>
>>
>>
>> Stuart Reece.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> From: Vijay Lulla <[hidden email]>
>> Sent: Thursday, 8 August, 2019 1:53 AM
>> To: Stuart Reece <[hidden email]>
>> Cc: Roger Bivand <[hidden email]>; R-sig-geo Mailing List <
>> [hidden email]>
>> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>>
>>
>>
>> Maybe
>> https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html
>> can help with all your questions.
>> https://cran.r-project.org/web/packages/spdep/vignettes/nb_sf.html
>> contains a little more detail about nb structure.  Finally, I encourage you
>> to use `str` to study the structure of R objects.
>>
>> HTH,
>>
>> Vijay.
>>
>>
>>
>> On Wed, Aug 7, 2019 at 10:44 AM Stuart Reece <[hidden email]
>> <mailto:[hidden email]> > wrote:
>>
>> Dear R-Sig-Geo list,
>>
>>
>>
>> I was wondering if it might be possible please to request assistance with
>> adding some nb relationships to a .nb.gal list composed either by GeoDa or
>> poly2nb in R????
>>
>>
>>
>> The shapefile at this URL
>> <
>> https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
>> e>  divides USA into 395 substate regions.  For health and demographical
>> reasons it is important to include both Hawaii and Alaska in the
>> spatiotemporal analysis so I want to introduce these into the Southeast
>> coast of California and the Pacific northwest respectively.
>>
>>
>>
>> This is just as Giovanni Millo added in spatial relationships for Sicily
>> across the Strait of Messina for splm on page 7 of the splm pdf.
>>
>>
>>
>> I found edit.nb in spdep and operated it just as described in the
>> instructions and here
>> <https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
>> crashed RStudio many times but ran well in R3.6.1.  However even though I
>> assigned it to a new object it did not save well.  Although when I plotted
>> the dxxx file as the difference between the old and modified files it
>> plotted the changes beautifully in red and black respectively when plotted
>> by themselves it introduced many long distance extraneous relationships.
>> To
>> get the edited nb list file out of R 3.6.1 and into RStudio I saved it as
>> an
>> RDS file.  However when opened in RStudio it was grossly erroneous and
>> included extraneous links from Hawaii to Boston and New York.  When I
>> opened
>> the file in RStudio it again introduced these extraneous links.
>>
>>
>>
>> Saving it as a further new object in R 3.6.1 did not remedy these
>> difficulties.
>>
>>
>>
>> The other problem I have is that the spdep poly2nb function excludes
>> Richmond, an island off the southern tip of Long Island near New York as
>> it
>> is an island.  Also one of the areas - Region 10 in Washington DC - is
>> also
>> excluded for reasons of which I am unsure.
>>
>>
>>
>> I found some code here to just patch single areas
>> <https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like
>> this
>> but when I run it, it throws an integer error
>>
>> "  INTEGER() can only be applied to a 'integer', not a 'double'
>>
>>
>>
>> No combination of bracketing around subscripts helps or works at all.  The
>> link mentioned has these statements in it
>>
>>
>>
>> nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
>> nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))
>>
>>
>>
>> which makes me think that I should insert a vector "  c(i,j) "  where
>> indicated.  Even using "c(as.integer(i),as.integer(j)) "
>>
>> or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
>> error.
>>
>>
>>
>> I am sure I am not the only one to have encountered such difficulties but
>> I
>> have really tried everything I can think of.
>>
>>
>>
>> The other thing I would really like is some clear instructions as to the
>> true underlying structure of the nb list.  If I could clearly understand
>> this then I could just go into the affected lines of the list of lists and
>> edit them directly.
>>
>>
>>
>> However I am quite unable to find any clear description of its structure
>> on
>> line.
>>
>>
>>
>> Similarly I cannot find the source code for drop.links online to try to
>> translate this code into add.links directly, as was also suggested.
>>
>>
>>
>> But such a function would I think be enormously helpful and of invaluable
>> assistance for final editing.
>>
>>
>>
>> Thankyou ever so much in advance for your kind and gracious assistance.
>>
>>
>>
>> Yours sincerely,
>>
>>
>>
>> Stuart Reece.
>>
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> [hidden email] <mailto:[hidden email]>
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>
>>
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> [hidden email]
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Barry Rowlingson-3
In reply to this post by Barry Rowlingson-3
Wrap the assigned vector in `as.integer`:

Works:
> col.gal.nb[[1]] = as.integer(c(4,5))
> card(col.gal.nb)
 [1]  2  3  4  4  7  2  4  6  8  4  5  6  4  6  6  7  3  4  3 10  3  6  3
 7  7
[26]  6  4  9  7  4  2  4  4  4  7  5  6  6  2  5  3  2  6  5  4  2  2  4  3


Fails:

> col.gal.nb[[1]] = c(4,5)
> card(col.gal.nb)
Error in card(col.gal.nb) :
  INTEGER() can only be applied to a 'integer', not a 'double'

Barry


On Thu, Aug 8, 2019 at 5:01 AM Dr Stuart Reece <[hidden email]>
wrote:

> Thanks Barry.
>
> That is so perfect and so super helpful!!!
>
> And if I want to add three areas to an area – say I want to add 6,7 and 8
> to the area 10??
>
> Please may I have the syntax for that to avoid the integer error??
>
> Is this also the root of the error about not being the correct index??
>
> Many thanks again,
>
> Stuart.
>
>
>
> *From:* Barry Rowlingson [mailto:[hidden email]]
> *Sent:* Thursday, 8 August 2019 8:51 AM
> *To:* Stuart Reece
> *Cc:* Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
> *Subject:* Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
> List
>
>
>
> I recently answered a similar question on Stack Overflow where someone
> needed to add detached polygons to their connected network by connecting
> them to their nearest neighbour:
>
>
>
>
> https://stackoverflow.com/questions/57269254/how-to-impute-missing-neighbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirect=1#comment101246065_57378930
>
>
>
> in short, you can treat a `nb` object like a list of vectors: nb[[i]] is a
> vector of indexes of objects connected to object `i`
>
>
>
> BUT you have to make sure you store integers:
>
>
>
> Here's a `nb` object from that question which in summary has this
> manyneighbours for each region:
>
>
>
> > card(nb)
> [1] 2 3 4 3 2 0 0
>
>
>
> lets set the 6th feature to be a neighbour of the first:
>
>
>
> > nb[[6]] = 1
>
>
>
> then uh-oh...
>
>
>
> > card(nb)
> Error in card(nb) :
>   INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> same again only `as.integer`:
>
>
>
> > nb[[6]] = as.integer(1)
>
>
>
> and its happy:
>
>
>
> > card(nb)
> [1] 2 3 4 3 2 1 0
>
>
>
> if you want to set the nighbours of 6 to several features:
>
>
>
> > nb[[6]] = as.integer(c(1,2,3))
> > card(nb)
> [1] 2 3 4 3 2 3 0
>
>
>
> Barry
>
>
>
>
>
>
>
> On Wed, Aug 7, 2019 at 10:25 PM Stuart Reece <[hidden email]>
> wrote:
>
> Thanks Vijay.
>
> Big help.
>
> I will go through the recommended chapter in detail.
>
> Normally for a list I can just use single square brackets like this [] to
> access the elements and change them by assignment.
>
> But I cannot quite figure out how to do this with the nb lists.
>
>
>
> Doing this with [[]] works really well to create nicely corrected graphs.
>
>
>
> But fails due it “out of bounds index errors” with regression equations????
>
>
>
> I find this ever so confusing….???
>
>
>
> Thankyou so much again,
>
>
>
> Stuart Reece.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> From: Vijay Lulla <[hidden email]>
> Sent: Thursday, 8 August, 2019 1:53 AM
> To: Stuart Reece <[hidden email]>
> Cc: Roger Bivand <[hidden email]>; R-sig-geo Mailing List <
> [hidden email]>
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>
>
>
> Maybe
> https://cran.r-project.org/web/packages/spdep/vignettes/nb_igraph.html
> can help with all your questions.
> https://cran.r-project.org/web/packages/spdep/vignettes/nb_sf.html
> contains a little more detail about nb structure.  Finally, I encourage you
> to use `str` to study the structure of R objects.
>
> HTH,
>
> Vijay.
>
>
>
> On Wed, Aug 7, 2019 at 10:44 AM Stuart Reece <[hidden email]
> <mailto:[hidden email]> > wrote:
>
> Dear R-Sig-Geo list,
>
>
>
> I was wondering if it might be possible please to request assistance with
> adding some nb relationships to a .nb.gal list composed either by GeoDa or
> poly2nb in R????
>
>
>
> The shapefile at this URL
> <
> https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefil
> e>  divides USA into 395 substate regions.  For health and demographical
> reasons it is important to include both Hawaii and Alaska in the
> spatiotemporal analysis so I want to introduce these into the Southeast
> coast of California and the Pacific northwest respectively.
>
>
>
> This is just as Giovanni Millo added in spatial relationships for Sicily
> across the Strait of Messina for splm on page 7 of the splm pdf.
>
>
>
> I found edit.nb in spdep and operated it just as described in the
> instructions and here
> <https://github.com/r-spatial/spdep/blob/master/man/edit.nb.Rd> .  It
> crashed RStudio many times but ran well in R3.6.1.  However even though I
> assigned it to a new object it did not save well.  Although when I plotted
> the dxxx file as the difference between the old and modified files it
> plotted the changes beautifully in red and black respectively when plotted
> by themselves it introduced many long distance extraneous relationships.
> To
> get the edited nb list file out of R 3.6.1 and into RStudio I saved it as
> an
> RDS file.  However when opened in RStudio it was grossly erroneous and
> included extraneous links from Hawaii to Boston and New York.  When I
> opened
> the file in RStudio it again introduced these extraneous links.
>
>
>
> Saving it as a further new object in R 3.6.1 did not remedy these
> difficulties.
>
>
>
> The other problem I have is that the spdep poly2nb function excludes
> Richmond, an island off the southern tip of Long Island near New York as it
> is an island.  Also one of the areas - Region 10 in Washington DC - is also
> excluded for reasons of which I am unsure.
>
>
>
> I found some code here to just patch single areas
> <https://stat.ethz.ch/pipermail/r-sig-geo/2006-June/001073.html>  like
> this
> but when I run it, it throws an integer error
>
> "  INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> No combination of bracketing around subscripts helps or works at all.  The
> link mentioned has these statements in it
>
>
>
> nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2])))
> nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1])))
>
>
>
> which makes me think that I should insert a vector "  c(i,j) "  where
> indicated.  Even using "c(as.integer(i),as.integer(j)) "
>
> or " as.integer(c(I,j)) "   doesn't work and still gives rise to the same
> error.
>
>
>
> I am sure I am not the only one to have encountered such difficulties but I
> have really tried everything I can think of.
>
>
>
> The other thing I would really like is some clear instructions as to the
> true underlying structure of the nb list.  If I could clearly understand
> this then I could just go into the affected lines of the list of lists and
> edit them directly.
>
>
>
> However I am quite unable to find any clear description of its structure on
> line.
>
>
>
> Similarly I cannot find the source code for drop.links online to try to
> translate this code into add.links directly, as was also suggested.
>
>
>
> But such a function would I think be enormously helpful and of invaluable
> assistance for final editing.
>
>
>
> Thankyou ever so much in advance for your kind and gracious assistance.
>
>
>
> Yours sincerely,
>
>
>
> Stuart Reece.
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email] <mailto:[hidden email]>
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Stuart Reece
In reply to this post by Barry Rowlingson-3
Thankyou so much Vijay and Barry.

Yes I have found that using these techniques I can add nb relationships nicely.

And they card() nicely too.

And when I nb2listw they transform well and when I test them can.be.simmed(x) they pass this test also.

 

When I draw maps with them Like Roger Bivand showed in his examples for poly2nb – the maps draw just perfectly.

 

However when I use them in the spml or spgm regressions in package splm they fail with an error message usually about indexes being out of bounds.

 

Running this code ….

 

summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),

+              data=MIdf9dfF2, listw=MIdf9sflww,

+              lag=TRUE, moments="fullweights", method="g2sls",

+              model="random", spatial.error=TRUE))

 

Generates this error:

Error in x[, ii] : subscript out of bounds

 

I feel that I must be missing something here but am not able to put my finger on what it is???

Thanks so much again,

Stuart.

 

 

 

 

From: Dr Stuart Reece <[hidden email]>
Sent: Thursday, 8 August, 2019 2:01 PM
To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece' <[hidden email]>
Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
Importance: High

 

Thanks Barry.

That is so perfect and so super helpful!!!

And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??

Please may I have the syntax for that to avoid the integer error??

Is this also the root of the error about not being the correct index??

Many thanks again,

Stuart.

 

From: Barry Rowlingson [mailto:[hidden email]]
Sent: Thursday, 8 August 2019 8:51 AM
To: Stuart Reece
Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List

 

I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:

 

https://stackoverflow.com/questions/57269254/how-to-impute-missing-neighbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirect=1#comment101246065_57378930

 

in short, you can treat a `nb` object like a list of vectors: nb[[i]] is a vector of indexes of objects connected to object `i`

 

BUT you have to make sure you store integers:

 

Here's a `nb` object from that question which in summary has this manyneighbours for each region:

 

> card(nb)
[1] 2 3 4 3 2 0 0

 

lets set the 6th feature to be a neighbour of the first:

 

> nb[[6]] = 1

 

then uh-oh...

 

> card(nb)
Error in card(nb) :
  INTEGER() can only be applied to a 'integer', not a 'double'

 

same again only `as.integer`:

 

> nb[[6]] = as.integer(1)

 

and its happy:

 

> card(nb)
[1] 2 3 4 3 2 1 0

 

if you want to set the nighbours of 6 to several features:

 

> nb[[6]] = as.integer(c(1,2,3))
> card(nb)
[1] 2 3 4 3 2 3 0

 

Barry

 

 


        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Roger Bivand
Administrator
On Thu, 8 Aug 2019, Stuart Reece wrote:

> Thankyou so much Vijay and Barry.

Yes, thanks!

>
> Yes I have found that using these techniques I can add nb relationships
> nicely.
>
> And they card() nicely too.
>
> And when I nb2listw they transform well and when I test them
> can.be.simmed(x) they pass this test also.
>
> When I draw maps with them Like Roger Bivand showed in his examples for
> poly2nb – the maps draw just perfectly.
This is flying on hope not knowledge. If the assigned values are not
within the 1:n set, there will be trouble - this is an S3 class with no
validity check. Further, there may be trouble if the length of attr(.,
"region.id") is incorrect, but this cannot be checked unless you run
traceback() after the error in spgm(). We still need a fully reproducible
example ...

Roger

> However when I use them in the spml or spgm regressions in package splm
> they fail with an error message usually about indexes being out of
> bounds.
>
> Running this code ….
>
> summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),
> +              data=MIdf9dfF2, listw=MIdf9sflww,
> +              lag=TRUE, moments="fullweights", method="g2sls",
> +              model="random", spatial.error=TRUE))
>
> Generates this error:
>
> Error in x[, ii] : subscript out of bounds
>
> I feel that I must be missing something here but am not able to put my
> finger on what it is???
>
> Thanks so much again,
>
> Stuart.
>
>
>
>
>
>
>
>
>
> From: Dr Stuart Reece <[hidden email]>
> Sent: Thursday, 8 August, 2019 2:01 PM
> To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece' <[hidden email]>
> Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
> Importance: High
>
>
>
> Thanks Barry.
>
> That is so perfect and so super helpful!!!
>
> And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??
>
> Please may I have the syntax for that to avoid the integer error??
>
> Is this also the root of the error about not being the correct index??
>
> Many thanks again,
>
> Stuart.
>
>
>
> From: Barry Rowlingson [mailto:[hidden email]]
> Sent: Thursday, 8 August 2019 8:51 AM
> To: Stuart Reece
> Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>
>
>
> I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:
>
>
>
> https://stackoverflow.com/questions/57269254/how-to-impute-missing-neighbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirect=1#comment101246065_57378930
>
>
>
> in short, you can treat a `nb` object like a list of vectors: nb[[i]] is a vector of indexes of objects connected to object `i`
>
>
>
> BUT you have to make sure you store integers:
>
>
>
> Here's a `nb` object from that question which in summary has this manyneighbours for each region:
>
>
>
>> card(nb)
> [1] 2 3 4 3 2 0 0
>
>
>
> lets set the 6th feature to be a neighbour of the first:
>
>
>
>> nb[[6]] = 1
>
>
>
> then uh-oh...
>
>
>
>> card(nb)
> Error in card(nb) :
>  INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> same again only `as.integer`:
>
>
>
>> nb[[6]] = as.integer(1)
>
>
>
> and its happy:
>
>
>
>> card(nb)
> [1] 2 3 4 3 2 1 0
>
>
>
> if you want to set the nighbours of 6 to several features:
>
>
>
>> nb[[6]] = as.integer(c(1,2,3))
>> card(nb)
> [1] 2 3 4 3 2 3 0
>
>
>
> Barry
>
>
>
>
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
--
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: [hidden email]
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Roger Bivand
Department of Economics
Norwegian School of Economics
Helleveien 30
N-5045 Bergen, Norway
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Stuart Reece
Thankyou for this advice Roger.
Happy to provide my work for your review but I am not sure how.
This list server has a limit of 50KB and these files are about 100MB....
Love to assist but I would need advice on how best to proceed....???
Many thanks again,
Stuart.

-----Original Message-----
From: Roger Bivand <[hidden email]>
Sent: Thursday, 8 August, 2019 9:10 PM
To: Stuart Reece <[hidden email]>
Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List

On Thu, 8 Aug 2019, Stuart Reece wrote:

> Thankyou so much Vijay and Barry.

Yes, thanks!

>
> Yes I have found that using these techniques I can add nb
> relationships nicely.
>
> And they card() nicely too.
>
> And when I nb2listw they transform well and when I test them
> can.be.simmed(x) they pass this test also.
>
> When I draw maps with them Like Roger Bivand showed in his examples
> for poly2nb – the maps draw just perfectly.

This is flying on hope not knowledge. If the assigned values are not within the 1:n set, there will be trouble - this is an S3 class with no validity check. Further, there may be trouble if the length of attr(.,
"region.id") is incorrect, but this cannot be checked unless you run
traceback() after the error in spgm(). We still need a fully reproducible example ...

Roger

> However when I use them in the spml or spgm regressions in package
> splm they fail with an error message usually about indexes being out
> of bounds.
>
> Running this code ….
>
> summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),
> +              data=MIdf9dfF2, listw=MIdf9sflww,
> +              lag=TRUE, moments="fullweights", method="g2sls",
> +              model="random", spatial.error=TRUE))
>
> Generates this error:
>
> Error in x[, ii] : subscript out of bounds
>
> I feel that I must be missing something here but am not able to put my
> finger on what it is???
>
> Thanks so much again,
>
> Stuart.
>
>
>
>
>
>
>
>
>
> From: Dr Stuart Reece <[hidden email]>
> Sent: Thursday, 8 August, 2019 2:01 PM
> To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece'
> <[hidden email]>
> Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List'
> <[hidden email]>
> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
> List
> Importance: High
>
>
>
> Thanks Barry.
>
> That is so perfect and so super helpful!!!
>
> And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??
>
> Please may I have the syntax for that to avoid the integer error??
>
> Is this also the root of the error about not being the correct index??
>
> Many thanks again,
>
> Stuart.
>
>
>
> From: Barry Rowlingson [mailto:[hidden email]]
> Sent: Thursday, 8 August 2019 8:51 AM
> To: Stuart Reece
> Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
> List
>
>
>
> I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:
>
>
>
> https://stackoverflow.com/questions/57269254/how-to-impute-missing-nei
> ghbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirec
> t=1#comment101246065_57378930
>
>
>
> in short, you can treat a `nb` object like a list of vectors: nb[[i]]
> is a vector of indexes of objects connected to object `i`
>
>
>
> BUT you have to make sure you store integers:
>
>
>
> Here's a `nb` object from that question which in summary has this manyneighbours for each region:
>
>
>
>> card(nb)
> [1] 2 3 4 3 2 0 0
>
>
>
> lets set the 6th feature to be a neighbour of the first:
>
>
>
>> nb[[6]] = 1
>
>
>
> then uh-oh...
>
>
>
>> card(nb)
> Error in card(nb) :
>  INTEGER() can only be applied to a 'integer', not a 'double'
>
>
>
> same again only `as.integer`:
>
>
>
>> nb[[6]] = as.integer(1)
>
>
>
> and its happy:
>
>
>
>> card(nb)
> [1] 2 3 4 3 2 1 0
>
>
>
> if you want to set the nighbours of 6 to several features:
>
>
>
>> nb[[6]] = as.integer(c(1,2,3))
>> card(nb)
> [1] 2 3 4 3 2 3 0
>
>
>
> Barry
>
>
>
>
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> [hidden email]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

--
Roger Bivand
Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: [hidden email]
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Roger Bivand
Administrator
On Thu, 8 Aug 2019, Stuart Reece wrote:

> Thankyou for this advice Roger.
> Happy to provide my work for your review but I am not sure how.
> This list server has a limit of 50KB and these files are about 100MB....
> Love to assist but I would need advice on how best to proceed....???

Choose a built-in data set, such as Produc, change two states to ALASKA
and HAWAII, drop the ones you chose from the map and any other states not
on your map, and use that data set, putting the script needed at the head
of your example. Then create the weights, initially with no links to
ALASKA and HAWAII, and run the model. Next, edit the neighbour object in
script form, and try again. Then anyone with your map object (you gave a
link), your script, and the plm and splm packages can reproduce your
problem.

Do also run traceback() after errors, and post what you see.

Roger

> Many thanks again,
> Stuart.
>
> -----Original Message-----
> From: Roger Bivand <[hidden email]>
> Sent: Thursday, 8 August, 2019 9:10 PM
> To: Stuart Reece <[hidden email]>
> Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>
> On Thu, 8 Aug 2019, Stuart Reece wrote:
>
>> Thankyou so much Vijay and Barry.
>
> Yes, thanks!
>
>>
>> Yes I have found that using these techniques I can add nb
>> relationships nicely.
>>
>> And they card() nicely too.
>>
>> And when I nb2listw they transform well and when I test them
>> can.be.simmed(x) they pass this test also.
>>
>> When I draw maps with them Like Roger Bivand showed in his examples
>> for poly2nb – the maps draw just perfectly.
>
> This is flying on hope not knowledge. If the assigned values are not within the 1:n set, there will be trouble - this is an S3 class with no validity check. Further, there may be trouble if the length of attr(.,
> "region.id") is incorrect, but this cannot be checked unless you run
> traceback() after the error in spgm(). We still need a fully reproducible example ...
>
> Roger
>
>> However when I use them in the spml or spgm regressions in package
>> splm they fail with an error message usually about indexes being out
>> of bounds.
>>
>> Running this code ….
>>
>> summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),
>> +              data=MIdf9dfF2, listw=MIdf9sflww,
>> +              lag=TRUE, moments="fullweights", method="g2sls",
>> +              model="random", spatial.error=TRUE))
>>
>> Generates this error:
>>
>> Error in x[, ii] : subscript out of bounds
>>
>> I feel that I must be missing something here but am not able to put my
>> finger on what it is???
>>
>> Thanks so much again,
>>
>> Stuart.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> From: Dr Stuart Reece <[hidden email]>
>> Sent: Thursday, 8 August, 2019 2:01 PM
>> To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece'
>> <[hidden email]>
>> Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List'
>> <[hidden email]>
>> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>> List
>> Importance: High
>>
>>
>>
>> Thanks Barry.
>>
>> That is so perfect and so super helpful!!!
>>
>> And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??
>>
>> Please may I have the syntax for that to avoid the integer error??
>>
>> Is this also the root of the error about not being the correct index??
>>
>> Many thanks again,
>>
>> Stuart.
>>
>>
>>
>> From: Barry Rowlingson [mailto:[hidden email]]
>> Sent: Thursday, 8 August 2019 8:51 AM
>> To: Stuart Reece
>> Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
>> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>> List
>>
>>
>>
>> I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:
>>
>>
>>
>> https://stackoverflow.com/questions/57269254/how-to-impute-missing-nei
>> ghbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredirec
>> t=1#comment101246065_57378930
>>
>>
>>
>> in short, you can treat a `nb` object like a list of vectors: nb[[i]]
>> is a vector of indexes of objects connected to object `i`
>>
>>
>>
>> BUT you have to make sure you store integers:
>>
>>
>>
>> Here's a `nb` object from that question which in summary has this manyneighbours for each region:
>>
>>
>>
>>> card(nb)
>> [1] 2 3 4 3 2 0 0
>>
>>
>>
>> lets set the 6th feature to be a neighbour of the first:
>>
>>
>>
>>> nb[[6]] = 1
>>
>>
>>
>> then uh-oh...
>>
>>
>>
>>> card(nb)
>> Error in card(nb) :
>>  INTEGER() can only be applied to a 'integer', not a 'double'
>>
>>
>>
>> same again only `as.integer`:
>>
>>
>>
>>> nb[[6]] = as.integer(1)
>>
>>
>>
>> and its happy:
>>
>>
>>
>>> card(nb)
>> [1] 2 3 4 3 2 1 0
>>
>>
>>
>> if you want to set the nighbours of 6 to several features:
>>
>>
>>
>>> nb[[6]] = as.integer(c(1,2,3))
>>> card(nb)
>> [1] 2 3 4 3 2 3 0
>>
>>
>>
>> Barry
>>
>>
>>
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> [hidden email]
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>
> --
> Roger Bivand
> Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; e-mail: [hidden email]
> https://orcid.org/0000-0003-2392-6140
> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>
>
--
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: [hidden email]
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Roger Bivand
Department of Economics
Norwegian School of Economics
Helleveien 30
N-5045 Bergen, Norway
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Stuart Reece
Thanks Roger.
Happy to do as you have requested.
Which server do you suggest??
Thanks again,
Stuart.

-----Original Message-----
From: Roger Bivand <[hidden email]>
Sent: Thursday, 8 August, 2019 9:35 PM
To: Stuart Reece <[hidden email]>
Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List

On Thu, 8 Aug 2019, Stuart Reece wrote:

> Thankyou for this advice Roger.
> Happy to provide my work for your review but I am not sure how.
> This list server has a limit of 50KB and these files are about 100MB....
> Love to assist but I would need advice on how best to proceed....???

Choose a built-in data set, such as Produc, change two states to ALASKA and HAWAII, drop the ones you chose from the map and any other states not on your map, and use that data set, putting the script needed at the head of your example. Then create the weights, initially with no links to ALASKA and HAWAII, and run the model. Next, edit the neighbour object in script form, and try again. Then anyone with your map object (you gave a link), your script, and the plm and splm packages can reproduce your problem.

Do also run traceback() after errors, and post what you see.

Roger

> Many thanks again,
> Stuart.
>
> -----Original Message-----
> From: Roger Bivand <[hidden email]>
> Sent: Thursday, 8 August, 2019 9:10 PM
> To: Stuart Reece <[hidden email]>
> Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson'
> <[hidden email]>; 'R-sig-geo Mailing List'
> <[hidden email]>
> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
> List
>
> On Thu, 8 Aug 2019, Stuart Reece wrote:
>
>> Thankyou so much Vijay and Barry.
>
> Yes, thanks!
>
>>
>> Yes I have found that using these techniques I can add nb
>> relationships nicely.
>>
>> And they card() nicely too.
>>
>> And when I nb2listw they transform well and when I test them
>> can.be.simmed(x) they pass this test also.
>>
>> When I draw maps with them Like Roger Bivand showed in his examples
>> for poly2nb – the maps draw just perfectly.
>
> This is flying on hope not knowledge. If the assigned values are not
> within the 1:n set, there will be trouble - this is an S3 class with
> no validity check. Further, there may be trouble if the length of
> attr(.,
> "region.id") is incorrect, but this cannot be checked unless you run
> traceback() after the error in spgm(). We still need a fully reproducible example ...
>
> Roger
>
>> However when I use them in the spml or spgm regressions in package
>> splm they fail with an error message usually about indexes being out
>> of bounds.
>>
>> Running this code ….
>>
>> summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),
>> +              data=MIdf9dfF2, listw=MIdf9sflww,
>> +              lag=TRUE, moments="fullweights", method="g2sls",
>> +              model="random", spatial.error=TRUE))
>>
>> Generates this error:
>>
>> Error in x[, ii] : subscript out of bounds
>>
>> I feel that I must be missing something here but am not able to put
>> my finger on what it is???
>>
>> Thanks so much again,
>>
>> Stuart.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> From: Dr Stuart Reece <[hidden email]>
>> Sent: Thursday, 8 August, 2019 2:01 PM
>> To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece'
>> <[hidden email]>
>> Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List'
>> <[hidden email]>
>> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>> List
>> Importance: High
>>
>>
>>
>> Thanks Barry.
>>
>> That is so perfect and so super helpful!!!
>>
>> And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??
>>
>> Please may I have the syntax for that to avoid the integer error??
>>
>> Is this also the root of the error about not being the correct index??
>>
>> Many thanks again,
>>
>> Stuart.
>>
>>
>>
>> From: Barry Rowlingson [mailto:[hidden email]]
>> Sent: Thursday, 8 August 2019 8:51 AM
>> To: Stuart Reece
>> Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
>> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>> List
>>
>>
>>
>> I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:
>>
>>
>>
>> https://stackoverflow.com/questions/57269254/how-to-impute-missing-ne
>> i
>> ghbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredire
>> c
>> t=1#comment101246065_57378930
>>
>>
>>
>> in short, you can treat a `nb` object like a list of vectors: nb[[i]]
>> is a vector of indexes of objects connected to object `i`
>>
>>
>>
>> BUT you have to make sure you store integers:
>>
>>
>>
>> Here's a `nb` object from that question which in summary has this manyneighbours for each region:
>>
>>
>>
>>> card(nb)
>> [1] 2 3 4 3 2 0 0
>>
>>
>>
>> lets set the 6th feature to be a neighbour of the first:
>>
>>
>>
>>> nb[[6]] = 1
>>
>>
>>
>> then uh-oh...
>>
>>
>>
>>> card(nb)
>> Error in card(nb) :
>>  INTEGER() can only be applied to a 'integer', not a 'double'
>>
>>
>>
>> same again only `as.integer`:
>>
>>
>>
>>> nb[[6]] = as.integer(1)
>>
>>
>>
>> and its happy:
>>
>>
>>
>>> card(nb)
>> [1] 2 3 4 3 2 1 0
>>
>>
>>
>> if you want to set the nighbours of 6 to several features:
>>
>>
>>
>>> nb[[6]] = as.integer(c(1,2,3))
>>> card(nb)
>> [1] 2 3 4 3 2 3 0
>>
>>
>>
>> Barry
>>
>>
>>
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> [hidden email]
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>
> --
> Roger Bivand
> Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; e-mail: [hidden email]
> https://orcid.org/0000-0003-2392-6140
> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>
>

--
Roger Bivand
Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: [hidden email]
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Adding a Few Neighbour Relationships to a nb List

Roger Bivand
Administrator
On Thu, 8 Aug 2019, Stuart Reece wrote:

> Thanks Roger.
> Happy to do as you have requested.
> Which server do you suggest??

You gave the link to the map as:

https://www.samhsa.gov/data/report/2014-2016-nsduh-substate-region-shapefile 
leading to
https://www.samhsa.gov/data/sites/default/files/cbhsq-reports/NSDUHsubstateShapeFile2016/ShapeFile2016.zip

I guess that is the input map. Produc is built into the plm package. So
all we need is a script. Your data are no help; creating a reproducible
example very often guides the person with the problem to a resolution even
without external help. I see that your map has 300+ entities - in that
case find another map that matches the setting (US with Alaska and Hawaii
states, drop to 48 to match Produc).

Roger

> Thanks again,
> Stuart.
>
> -----Original Message-----
> From: Roger Bivand <[hidden email]>
> Sent: Thursday, 8 August, 2019 9:35 PM
> To: Stuart Reece <[hidden email]>
> Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson' <[hidden email]>; 'R-sig-geo Mailing List' <[hidden email]>
> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb List
>
> On Thu, 8 Aug 2019, Stuart Reece wrote:
>
>> Thankyou for this advice Roger.
>> Happy to provide my work for your review but I am not sure how.
>> This list server has a limit of 50KB and these files are about 100MB....
>> Love to assist but I would need advice on how best to proceed....???
>
> Choose a built-in data set, such as Produc, change two states to ALASKA and HAWAII, drop the ones you chose from the map and any other states not on your map, and use that data set, putting the script needed at the head of your example. Then create the weights, initially with no links to ALASKA and HAWAII, and run the model. Next, edit the neighbour object in script form, and try again. Then anyone with your map object (you gave a link), your script, and the plm and splm packages can reproduce your problem.
>
> Do also run traceback() after errors, and post what you see.
>
> Roger
>
>> Many thanks again,
>> Stuart.
>>
>> -----Original Message-----
>> From: Roger Bivand <[hidden email]>
>> Sent: Thursday, 8 August, 2019 9:10 PM
>> To: Stuart Reece <[hidden email]>
>> Cc: 'Dr Stuart Reece' <[hidden email]>; 'Barry Rowlingson'
>> <[hidden email]>; 'R-sig-geo Mailing List'
>> <[hidden email]>
>> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>> List
>>
>> On Thu, 8 Aug 2019, Stuart Reece wrote:
>>
>>> Thankyou so much Vijay and Barry.
>>
>> Yes, thanks!
>>
>>>
>>> Yes I have found that using these techniques I can add nb
>>> relationships nicely.
>>>
>>> And they card() nicely too.
>>>
>>> And when I nb2listw they transform well and when I test them
>>> can.be.simmed(x) they pass this test also.
>>>
>>> When I draw maps with them Like Roger Bivand showed in his examples
>>> for poly2nb – the maps draw just perfectly.
>>
>> This is flying on hope not knowledge. If the assigned values are not
>> within the 1:n set, there will be trouble - this is an S3 class with
>> no validity check. Further, there may be trouble if the length of
>> attr(.,
>> "region.id") is incorrect, but this cannot be checked unless you run
>> traceback() after the error in spgm(). We still need a fully reproducible example ...
>>
>> Roger
>>
>>> However when I use them in the spml or spgm regressions in package
>>> splm they fail with an error message usually about indexes being out
>>> of bounds.
>>>
>>> Running this code ….
>>>
>>> summary(spgm(PC1MI ~ PC1Rx * log(mrjmon),
>>> +              data=MIdf9dfF2, listw=MIdf9sflww,
>>> +              lag=TRUE, moments="fullweights", method="g2sls",
>>> +              model="random", spatial.error=TRUE))
>>>
>>> Generates this error:
>>>
>>> Error in x[, ii] : subscript out of bounds
>>>
>>> I feel that I must be missing something here but am not able to put
>>> my finger on what it is???
>>>
>>> Thanks so much again,
>>>
>>> Stuart.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> From: Dr Stuart Reece <[hidden email]>
>>> Sent: Thursday, 8 August, 2019 2:01 PM
>>> To: 'Barry Rowlingson' <[hidden email]>; 'Stuart Reece'
>>> <[hidden email]>
>>> Cc: 'Vijay Lulla' <[hidden email]>; 'R-sig-geo Mailing List'
>>> <[hidden email]>
>>> Subject: RE: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>>> List
>>> Importance: High
>>>
>>>
>>>
>>> Thanks Barry.
>>>
>>> That is so perfect and so super helpful!!!
>>>
>>> And if I want to add three areas to an area – say I want to add 6,7 and 8 to the area 10??
>>>
>>> Please may I have the syntax for that to avoid the integer error??
>>>
>>> Is this also the root of the error about not being the correct index??
>>>
>>> Many thanks again,
>>>
>>> Stuart.
>>>
>>>
>>>
>>> From: Barry Rowlingson [mailto:[hidden email]]
>>> Sent: Thursday, 8 August 2019 8:51 AM
>>> To: Stuart Reece
>>> Cc: Vijay Lulla; R-sig-geo Mailing List; Stuart Reece
>>> Subject: Re: [R-sig-Geo] Adding a Few Neighbour Relationships to a nb
>>> List
>>>
>>>
>>>
>>> I recently answered a similar question on Stack Overflow where someone needed to add detached polygons to their connected network by connecting them to their nearest neighbour:
>>>
>>>
>>>
>>> https://stackoverflow.com/questions/57269254/how-to-impute-missing-ne
>>> i
>>> ghbours-of-a-spatial-weight-matrix-queen-contiguity/57378930?noredire
>>> c
>>> t=1#comment101246065_57378930
>>>
>>>
>>>
>>> in short, you can treat a `nb` object like a list of vectors: nb[[i]]
>>> is a vector of indexes of objects connected to object `i`
>>>
>>>
>>>
>>> BUT you have to make sure you store integers:
>>>
>>>
>>>
>>> Here's a `nb` object from that question which in summary has this manyneighbours for each region:
>>>
>>>
>>>
>>>> card(nb)
>>> [1] 2 3 4 3 2 0 0
>>>
>>>
>>>
>>> lets set the 6th feature to be a neighbour of the first:
>>>
>>>
>>>
>>>> nb[[6]] = 1
>>>
>>>
>>>
>>> then uh-oh...
>>>
>>>
>>>
>>>> card(nb)
>>> Error in card(nb) :
>>>  INTEGER() can only be applied to a 'integer', not a 'double'
>>>
>>>
>>>
>>> same again only `as.integer`:
>>>
>>>
>>>
>>>> nb[[6]] = as.integer(1)
>>>
>>>
>>>
>>> and its happy:
>>>
>>>
>>>
>>>> card(nb)
>>> [1] 2 3 4 3 2 1 0
>>>
>>>
>>>
>>> if you want to set the nighbours of 6 to several features:
>>>
>>>
>>>
>>>> nb[[6]] = as.integer(c(1,2,3))
>>>> card(nb)
>>> [1] 2 3 4 3 2 3 0
>>>
>>>
>>>
>>> Barry
>>>
>>>
>>>
>>>
>>>
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> [hidden email]
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>
>>
>> --
>> Roger Bivand
>> Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
>> voice: +47 55 95 93 55; e-mail: [hidden email]
>> https://orcid.org/0000-0003-2392-6140
>> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>>
>>
>
> --
> Roger Bivand
> Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway.
> voice: +47 55 95 93 55; e-mail: [hidden email]
> https://orcid.org/0000-0003-2392-6140
> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>
>
--
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: [hidden email]
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Roger Bivand
Department of Economics
Norwegian School of Economics
Helleveien 30
N-5045 Bergen, Norway