Im Moment habe ich einige Schwierigkeiten bei der Berechnung einer räumlichen Verzögerung in R
. Ich weiß, wie man die Verzögerung im raumweiten Format berechnet, kann sie aber nicht in langer Form durchführen, dh ich habe Beobachtungen für die Analyseeinheit wiederholt.
Unten finden Sie einige Scheindaten, um zu veranschaulichen, was ich versuche zu tun. Beginnen wir damit, einige Beobachtungen von Ereignissen zu generieren, an denen ich interessiert bin.
# Create observations
pts<-cbind(set.seed(2014),x=runif(30,1,5),y=runif(30,1,5),
time=sample(1:5,30,replace=T))
require(sp)
pts<-SpatialPoints(pts)
x
und y
sind die Koordinaten, während time
sie den Zeitraum darstellen, in dem das Ereignis stattfindet. Die Ereignisse müssen zu Polygonen aggregiert werden, die die Analyseeinheit darstellen. In diesem Beispiel sind die Polygone Gitterzellen, und der Einfachheit halber sind die Grenzen über die Zeit festgelegt.
# Observations take place in different areas; create polygons for areas
X<-c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5))
Y<-c(rep(seq(1,5,1),5))
df<-data.frame(X,Y)
df$cell<-1:nrow(df) # Grid-cell identifier
require(raster)
coordinates(df)<-~X+Y
rast<-raster(extent(df),ncol=5,nrow=5)
grid<-rasterize(df,rast,df$cell,FUN=max)
grid<-rasterToPolygons(grid) # Create polygons
Wir können die Daten nur zeichnen, um einen Überblick über die Verteilung zu erhalten:
Für ein raumweites Format würde ich die räumliche Verzögerung folgendermaßen berechnen:
pointsincell=over(SpatialPolygons(grid@polygons),SpatialPoints(pts),
returnList=TRUE)
grid$totalcount<-unlist(lapply(pointsincell,length))
require(spdep)
neigh<-poly2nb(grid) # Create neighbour list
weights<-nb2listw(neigh,style="B",zero.policy=TRUE) # Create weights (binary)
grid$spatial.lag<-lag.listw(weights,
grid$totalcount,zero.policy=TRUE) # Add to raster
Wie Sie sehen, berücksichtigt dies jedoch nicht die Tatsache, dass die Ereignisse zu unterschiedlichen Zeitpunkten stattfinden. Es aggregiert einfach alles auf die Polygonebene. Jetzt möchte ich diese räumliche Verzögerung unter Berücksichtigung dieser zeitlichen Dimension berechnen, um die Daten in diesem Fall auf der Ebene der Polygonzeit zu aggregieren.
Ich frage mich, ob jemand einen nützlichen Vorschlag hat, wie dies erreicht werden könnte. Was ist die bequemste Methode zur Berechnung räumlicher Verzögerungen im Langformat?
Ich habe mir das spacetime
Paket angesehen, konnte es aber nicht anwenden.
quelle
Antworten:
Ich denke, der einfachste Weg, dies zu erreichen, besteht darin, Schleifen zu verwenden und die lag.listw () für Ihre Zählvariable für jedes Jahr zu erstellen.
Etwas wie das?
Dann setzen Sie in der for-Schleife sowohl die Punkte als auch die Polygone unter und führen die Überlagerung aus. Anschließend fassen Sie die Anzahl der Punkte für jeden Zeitpunkt zusammen und binden sie jeweils zu einem Zeitpunkt an den Spatlag-Datenrahmen.
Der obige Code dient nur zur Veranschaulichung. Also: 1. Erstellen Sie einen leeren Datenrahmen zum Speichern der Verzögerungen. 2. Für die Schleife für jeden Zeitpunkt. 3. Erstellen Sie eine Teilmenge für die Punkte, an denen die Zeit der Zeit für den Schleifenlauf entspricht. 4. Überlagern Sie die Punkte auf dem Raster / Polygon. 5. Summieren Sie die Zahl Anzahl der Punkte in jeder Polygonüberlagerung (könnte dplyr zum Aggregieren verwenden) 6. Binden Sie die summierte Anzahl von Punkten an den leeren Datenrahmen.
quelle
Dies wäre mit der
slag
Funktion dessplm
Pakets viel einfacher .Sagen Sie R, dass
data.frame
es sich um einen Paneldatenrahmen handelt, und arbeiten Sie dann mit dempseries
.Bitte beachten Sie, dass dies nur mit einem ausgeglichenen Panel funktioniert. Nur um Ihnen ein Beispiel zu geben:
p_data$wage
ist von Klassepseries
, währendfirm_nbwghts
alistw
quelle
Ich glaube, ich habe eine Methode gefunden, um dies zu tun. Die Ausgabedaten werden in Form eines normalen Datenrahmens geliefert. Es ist ein bisschen ungeschickt, aber es funktioniert.
quelle