[R-sig-Geo] Distance-based neighbourhood statistics problem

Gellrich Mario mario.gellrich at env.ethz.ch
Thu Sep 11 17:32:34 CEST 2008


Hi again,


no, the code line is not the problem - what's shown in the first message are just the first 10 lines of the data set. The problem seems to be the coordinates of the data. I have reduced the data set to only seven points to show the problem: 

# Example data set: 

d.geb <- read.table("geb_test.csv", header=T, sep=";")
d.geb

    GEBID ANZAHLGEB ABWOW   XACH   YACH Ortsname
1  896967         1     1 682886 226329 gebaeude
2  915184         1     0 682949 226280 gebaeude
3  988432         1     6 682960 226315 gebaeude
4 1070819         1     1 682939 226282 gebaeude
5 1070925         1     3 682991 226290 gebaeude
6 1413991         1     0 682905 226297 gebaeude
7     -99         0     0 682934 226299  TestOrt


# Here ANZAHLGEB is the number of buildings per data point (= 1, except for the municipality); ABWOW is the number of flats in the building.

library(spdep)

geb.nb2           <- dnearneigh(as.matrix(d.geb[,4:5]), 0, 500, longlat=TRUE)
d.geb$SUMGEB 	  <- unlist(lapply(geb.nb2, function(x) ifelse(any(x==0), 0, sum(d.geb$ANZAHLGEB[x]))))
d.geb

# The outcome 'SUMGEB' is zero (= no buildings within a distance of 500 meters) - this despite 500 m is the distance in wich all points have at least one neighbour: 

    GEBID ANZAHLGEB ABWOW   XACH   YACH Ortsname SUMGEB
1  896967         1     1 682886 226329 gebaeude      0
2  915184         1     0 682949 226280 gebaeude      0
3  988432         1     6 682960 226315 gebaeude      0
4 1070819         1     1 682939 226282 gebaeude      0
5 1070925         1     3 682991 226290 gebaeude      0
6 1413991         1     0 682905 226297 gebaeude      0
7     -99         0     0 682934 226299  TestOrt      0


### If I calculate the Euclidean Distanz between data point 2 and 4, it gives you the correct distance (in meters): 


d.dist <- sqrt( (682949 - 682939)^2 + (226280 - 226282)^2 )
d.dist

[1] 10.19804  

# It seems to be that dnearneigh uses another coordinate system (see also the X and Y variables in the columbus data set which comes with spdep) 


Best regards,

Mario






 
Hi Mario,
I don´t know if it is the problem, but the code line below need be changed:

subset(d.geb, d.geb$MUNICIP == 1)

best wishes,

miltinho astronauta
brazil

On Thu, Sep 11, 2008 at 8:12 AM, Gellrich Mario
<mario.gellrich at env.ethz.ch>wrote:

> Hi,
>
> I've got a question regarding distance-based neighbourhood statistics using
> two separate spatial data sets. What I have are municipalities and buildings
> within municipalities which both come with x- and y-coordinates. I merged
> the two datasets row-wise and used the following code to obtain aggregated
> values for the number of builings surrounding a municipality. The code hower
> doesn't work appropriately. Can anybody help?
>
>
> d.geb <- read.table("gebaeuderecord_selection_test.csv", header=T, sep=";")
> d.geb[1:10,]
>
>     MUNICIP     NAME GEBID NUMBERGEB ABPER    LON    LAT
> 1          0 Gebaeude  4262         1     1 681864 225868
> 2          0 Gebaeude 14168         1     7 682190 224294
> 3          0 Gebaeude 33346         1     5 682176 224354
> 4          0 Gebaeude 44610         1    15 681571 225189
> 5          0 Gebaeude 62785         1     1 679800 226040
> 6          0 Gebaeude 72287         1     1 684619 224239
> 7          0 Gebaeude 83044         1     8 681701 224818
> 8          0 Gebaeude 84827         1     2 684878 230975
> 9          0 Gebaeude 86671         1     0 685733 227247
> 10         0 Gebaeude 88022         1     1 685691 230548
>
>
> # Variable description:
>
> # MUNICIP:   zero for buildings; one for municipalities
> # NAME   :   if 'Gebaeude' == building; otherwise municipality name
> # GEBID:     ID of building; -99 otherwise
> # NUMBERGEB: number of buildings - one for each building-record; set to
> zero if record represents municipality
> # ABWOW:     number of flats in a building
>
>
> ### Creates neighbourhood list and should provide aggregates values within
> a distance of 1 kilometer from a municipality for the variables NUMBERGEB or
> ABWOW
>
> library(spdep)
> geb.nb2         <- dnearneigh(as.matrix(d.geb[,6:7]), 0, 1, longlat=TRUE)
> d.geb$SUMGEB    <- unlist(lapply(geb.nb2, function(x) ifelse(any(x==0), 0,
> sum(d.geb$ABPER[x]))))
>
> subset(d.geb, MUNICIP == 1)
>
>
> Best regards,
>
> Mario
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>




More information about the R-sig-Geo mailing list