Saat ini saya mengalami beberapa kesulitan dalam menghitung jeda spasial dalam R
. Saya tahu bagaimana menghitung lag dalam format space-wide tetapi saya tidak dapat melakukannya dalam bentuk panjang, yaitu telah mengulangi pengamatan untuk unit analisis.
Di bawah ini adalah beberapa data tiruan untuk menggambarkan apa yang saya coba lakukan. Mari kita mulai dengan menghasilkan beberapa pengamatan peristiwa yang saya minati.
# 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
dan y
merupakan koordinat saat time
mewakili periode waktu di mana acara berlangsung. Peristiwa perlu dikumpulkan ke poligon yang merupakan unit analisis. Dalam contoh ini poligon adalah sel-kotak dan untuk kesederhanaan batas-batasnya diperbaiki dari waktu ke waktu.
# 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
Kami dapat memplot data hanya untuk mendapatkan ikhtisar distribusi:
Untuk format ruang-lebar, saya akan menghitung spasi spasi dengan cara berikut:
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
Namun, seperti yang Anda lihat melakukannya dengan cara ini tidak memperhitungkan fakta bahwa peristiwa itu terjadi pada saat yang berbeda pada waktu yang bersamaan. Itu hanya mengumpulkan semuanya ke tingkat poligon. Sekarang saya ingin menghitung keterlambatan spasial ini dengan mempertimbangkan dimensi temporal ini sehingga menggabungkan data dalam kasus ini ke tingkat waktu poligon.
Saya bertanya-tanya apakah ada yang punya saran berguna tentang bagaimana hal ini dapat dicapai? Apa cara paling nyaman untuk menghitung jeda spasial dalam format panjang?
Saya telah melihat spacetime
paketnya tetapi tidak berhasil menerapkannya.
sumber
Jawaban:
Saya pikir cara paling mudah untuk mencapai ini adalah dengan menggunakan loop, dan buat lag.listw () untuk variabel jumlah Anda setiap tahun.
Sesuatu seperti ini?
Kemudian di dalam for loop Anda mengelompokkan kedua titik dan poligon, dan menjalankan overlay. Kemudian Anda merangkum jumlah titik untuk setiap titik waktu dan mengikatnya ke bingkai data spatlag, satu titik waktu pada saat itu.
Kode di atas hanya untuk contoh. Jadi: 1. Buat frame data kosong untuk menyimpan kelambatan 2. Untuk loop untuk setiap titik waktu 3. Buat subset untuk titik-titik di mana waktu sama dengan waktu untuk loop run 4. Overlay titik pada grid / poligon 5. Jumlah angkanya poin di setiap overlay poligon (bisa menggunakan dplyr untuk agregat) 6. Ikat jumlah poin yang diringkas ke frame data kosong.
sumber
Ini akan jauh lebih mudah menggunakan
slag
fungsisplm
paket.Katakan R Anda
data.frame
adalah bingkai data panel, lalu bekerja denganpseries
.Harap perhatikan bahwa ini hanya akan bekerja dengan panel seimbang. Sekedar memberi Anda contoh:
p_data$wage
adalah kelaspseries
, sementarafirm_nbwghts
alistw
sumber
Jadi saya pikir saya sudah menemukan metode untuk melakukan ini. Data keluaran akan datang dalam bentuk kerangka data normal. Agak canggung tapi berhasil.
sumber