Output dari kde
dapat diubah menjadi raster dan kemudian dari sana Anda dapat mengekstrak kontur apa pun menggunakan fungsi rasterToPolygons
. Setelah titik Anda dikonversi ke format yang dikenali oleh paket sp
, Anda dapat melihat perpotongan apa pun antara objek spasial menggunakan fungsi gIntersection
.
Anda mendapatkan dua objek SpatialPoints x.inY
dan y.inX
yang berisi titik x yang termasuk dalam kontur 50% dari fhaty dan sebaliknya. Koordinat titik-titik ini dapat diekstraksi dalam array menggunakan coordinates(...)
.
Ini mungkin bukan solusi yang paling elegan tetapi akan berfungsi dengan baik jika array yang dikeluarkan oleh fungsi kde
tidak terlalu besar.
Semoga membantu.
LANGKAH 1: ubah output dari kde menjadi objek raster
# for the x kde
arrayX <- expand.grid(list(fhatx$eval.points[[1]],fhatx$eval.points[[2]]))
arrayX$z <- as.vector(fhatx$estimate)
rasterX <- rasterFromXYZ(arrayX)
# for the y kde
arrayY <- expand.grid(list(fhaty$eval.points[[1]],fhaty$eval.points[[2]]))
arrayY$z <- as.vector(fhaty$estimate)
rasterY <- rasterFromXYZ(arrayY)
LANGKAH 2: ubah skala raster antara 0 dan 100, lalu ubah semua sel dalam kontur 50 menjadi 1. Tentu saja kontur dapat diubah menjadi 95 atau nilai lainnya
#for raster x
rasterX <- rasterX*100/rasterX@data@max
rasterX[rasterX[]<=50,] <- NA
rasterX[rasterX[]>50,] <- 1
#[enter image description here][1]for raster y
rasterY <- rasterY*100/rasterY@data@max
rasterY[rasterY[]<=50,] <- NA
rasterY[rasterY[]>50,] <- 1
LANGKAH 3: ekstrak poligon yang sesuai dengan kontur 50%.
polyX50<-rasterToPolygons(rasterX, n=16, na.rm=T, digits=4, dissolve=T)
polyY50<-rasterToPolygons(rasterY, n=16, na.rm=T, digits=4, dissolve=T)
LANGKAH 4: ubah poin Anda menjadi objek spasial untuk menggunakan perpustakaan sp
x.points <- SpatialPoints(x)
y.points <- SpatialPoints(y)
LANGKAH 5: temukan titik-titik yang berpotongan dengan satu poligon atau poligon lainnya
#x points falling in fhatx 50 contour
x.inY <- gIntersection(x.points, polyY50)
#y points falling in fhatx 50 contour
y.inX <- gIntersection(y.points, polyX50)
Merencanakan
par(mfrow=c(1,2))
plot(fhatx, cont=c(50,95), col="red")
plot(fhaty, cont=c(50,95), col="green",add=TRUE)
plot(x.points, col="red", add=T)
plot(y.points, col="green", add=T)
plot(fhatx, cont=c(50,95), col="red")
plot(fhaty, cont=c(50,95), col="green",add=TRUE)
plot(x.inY, col="red", add=T)
plot(y.inX, col="green", add=T)
person
S.Derville
schedule
05.09.2016