Pour le moment, j'ai du mal à calculer un décalage spatial dans R
. Je sais comment calculer le décalage dans un format à l'échelle de l'espace, mais je ne peux pas le faire sous une forme longue, c'est-à-dire avoir des observations répétées pour l'unité d'analyse.
Vous trouverez ci-dessous quelques données fictives pour illustrer ce que j'essaie de faire. Commençons par générer des observations d'événements qui m'intéressent.
# 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
et y
sont les coordonnées tandis que time
représente la période de temps pendant laquelle l'événement a lieu. Les événements doivent être agrégés en polygones qui est l'unité d'analyse. Dans cet exemple, les polygones sont des cellules de grille et pour des raisons de simplicité, les limites sont fixées dans le temps.
# 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
Nous pouvons tracer les données juste pour avoir un aperçu de la distribution:
Pour le format à l'échelle de l'espace, je calculerais le décalage spatial de la manière suivante:
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
Cependant, comme vous pouvez le voir, le faire de cette façon ne prend pas en compte le fait que les événements se produisent à différents moments dans le temps. Il agrège simplement tout au niveau du polygone. Maintenant, je veux calculer ce décalage spatial en tenant compte de cette dimension temporelle afin d'agréger les données dans ce cas au niveau polygone-temps.
Je me demande si quelqu'un a une suggestion utile sur la façon dont cela pourrait être accompli? Quelle est la manière la plus pratique de calculer les décalages spatiaux au format long?
J'ai jeté un coup d'œil au spacetime
paquet mais je n'ai pas réussi à l'appliquer.