spdep - Nicht-passende Objekte

Alles rund um R Packages und Add-ons. Programmierung, Implementierung und Erstellung.

spdep - Nicht-passende Objekte

Beitragvon BAGZZlash » Fr 11. Dez 2015, 13:53

Hallo zusammen,

ich versuche, mit dem Package spdep eine räumliche Analyse vorzunehmen. Hierzu habe ich zwei Dinge:

1.) Eine Shape-Datei (.shp, .sbx, .dbf usw...), die eine Reihe von Gemarkungen enthält. Gemarkungen sind eine Verwaltungsebene: In der Bundesrepublik gibt es Bundesländer, Landkreise, Gemeinden, Gemarkungen und Flure. Gemarkungen sind also die zweitniedrigste Ebene, oft sind das Stadtviertel o.ä. Die Shape-Datei enthält 15.700 Gemarkungen. Alle Gemarkungen sind über die Attribute der Shape-Datei (die dBASE-Datenbank in der .dbf-Datei) eindeutig identifiziert durch einen Identifier namens "GMKNR". Dies sind die eindeutigen, sechsstelligen Gemarkungsschlüssel.

2.) Einen Dataframe mit Querschnittsdaten (Falldaten). Enthalten ist eine Reihe von Variablen, die die Fälle beschreiben. Unter anderem ist hierbei auch über die Variable "GMKNR" die Gemarkung identifiziert, auf die sich jeder einzelne Fall bezieht. Der Frame umfasst 18.440 Fälle, enthält aber auch ein paar NAs.

Ich stelle zunächst per

Code: Alles auswählen
KQ = lm(y ~ x1 + x2 + x3 + GMKNR, data = FallFrame)


ein einfaches Modell auf. Da NAs enthalten sind, hole ich mir anschließend per "KQ$model" die Designmatrix heraus, der so entstehende neue Dataframe enthält 18.302 Beobachtungen und alle Variablen, die durch die Spezifikation vorgegeben sind.

Um zu schauen, ob es in meiner (bisher noch sehr einfachen) Spezifikation räumliche Effekte gibt, möchte ich beispielsweise Moran's I berechnen. Dafür erzeuge ich per

Code: Alles auswählen
Mynb = poly2nb(Shape, queen = TRUE)


die Nachbarn und dann per

Code: Alles auswählen
W = nb2listw(Mynb, zero.policy = TRUE)


die Gewichtungsmatrix. Ziel wird später ein SEM oder SLM sein, aber das spielt erst mal keine Rolle. Jedenfalls stören nun drei Dinge:

  • Erstens sind im Shape (und somit auch in Mynb und W) Gemarkungen enthalten, die durch den Falldatensatz nicht angesprochen werden, etwa, weil es für eine Gemarkung XY keinen Fall gibt.
  • Zweitens kommt es vor, dass einzelne Gemarkungen im Falldatensatz mehrfach angesprochen werden, weil es sein kann, dass sich mehrere Fälle beispielsweise auf die Gemarkung YZ beziehen.
  • Drittens werden durch den Datensatz einige Gemarkungen angesprochen, die im Shape nicht vorkommen, beispielsweise, weil Gemarkungen inzwischen zusammengelegt wurden und eine neue GMKNR bekommen haben (das Shape-File ist viel neuer als der Datensatz).

Der dritte Punkt spielt keine so große Rolle, das Problem betrifft nicht viele Beobachtungen, diese könnte man einfach rausfiltern und weglassen. Die Probleme führen jedenfalls dazu, dass natürlich die Dimensionen nicht passen:

Code: Alles auswählen
lm.morantest(KQ, W, zero.policy = TRUE)


liefert zu recht:

Code: Alles auswählen
Fehler in lm.morantest(KQ, W, zero.policy = TRUE) :
  objects of different length


Eigentlich kann doch mein Problem nicht so exotisch sein. Wie gehe ich damit um? Ich hab' mir eine Schleife geschrieben, die durch das nb-Objekt iteriert, die einzelnen Elemente über "GMKNR" identifiziert und so zusammenbaut, wie der Dataframe es vorgibt. Das fuktioniert aber nicht, weil so das nb-Objekt total inkonsistent wird und überhaupt: Ich kann mir nicht vorstellen, dass es dafür nicht auch eine Lösung gibt, die ohne solche Hacks auskommt.

Ich fühle mich wie ein Zweijähriger, der versucht, den runden Bauklotz durch die dreieckige Öffnung zu buchsieren. Die beiden Spielzeuge passen einfach nicht zueinander. Was tun?
BAGZZlash
 
Beiträge: 11
Registriert: Fr 11. Dez 2015, 11:46
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Zurück zu Packages und Add-ons

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron