Coğrafi koordinatlardan çekirdek yoğunluğu tahminini hesaplamanın doğru yolu nedir?


11

Enlem ve boylam koordinatları listesinden 2d çekirdek yoğunluğu tahminini (kde) hesaplamalıyım. Ancak enlemdeki bir derece, boylamdaki bir derece ile aynı mesafe değildir, bu, bireysel çekirdeklerin oval olacağı anlamına gelir, özellikle nokta ekvatordan daha uzaktır.

Benim durumumda, noktaların birbirine düz bir toprağa dönüştürülmesinin çok fazla soruna neden olmaması gerektiği kadar yakın. Yine de bunun doğru olmaması durumunda bunun nasıl düzgün bir şekilde ele alınması gerektiğini merak ediyorum.


İlk tahmin olarak, uygun bir küresel mesafe metriğini standart bir çekirdek yaklaşımıyla değiştireceğinizi varsayarım.
Sycorax: Reinstate Monica

Oval çekirdeklere sahip olmanın yanlış olduğunu kim söyleyebilir?
gung - Monica'yı eski

1
@gung Bir direğe yeterince yakın bir nokta yerleştirirseniz ne olacağını hayal edin. Boyuna eksen boyunca sıkılır. Ve aslında kutuplardan birini kapsayan bir çekirdeği nasıl ele alırsınız?
Aaron de Windt

Kutup üzerinde, tüm boylamlarda eşit derecede yüksek bir yumru olurdu. Bu neden yanlış?
gung - Monica'yı eski

@gung Çünkü 1 derece bir çekirdek çapı seçersem, tüm boylamların üzerinde olmazdı. Nokta 1 direğin üzerinde olan ~ 110 km ile karşılaştırıldığında, nokta direğe yeterince yakınsa 1 metreden fazla olabilir.
Aaron de Windt

Yanıtlar:


7

Von Mises-Fisher yoğunluğu gibi özellikle küreye uygun bir çekirdek kullanmayı düşünebilirsiniz.

f(x;κ,μ)exp(κμx)

burada ve birim küredeki 3B Kartezyen koordinatlarla ifade edilen konumlardır.μx

Bant genişliğinin analogu parametresidir . Bu nedenle, ağırlığına sahip, küre üzerindeki konumundaki bir giriş noktasından konumuna bir katkıdır.κxμω(μ)

ω(μ)f(x;κ,μ).

Her , bu katkıları tüm giriş noktalarına göre toplayın .xμi

Örneklemek gerekirse, Rvon Mises-Fisher yoğunluğunu hesaplamak için kod, ve ağırlıklar (bunlardan 12 tanesi kodda) rastgele konumlar oluşturmak ve belirtilen çekirdek yoğunluğunun bir haritasını görüntülemek için kod değeri ( kodda eşit ).μiω(μi)κ6

[Şekil]

Noktaları siyah noktalar ağırlıklarına alanları orantılı olması boyutlu olarak gösterilir . yakınındaki büyük noktanın katkısı kuzey enlemleri boyunca belirgindir. Etrafındaki parlak sarı-beyaz yama, Ortografik (uzaydan dünya) gibi uygun bir projeksiyonda gösterildiğinde yaklaşık olarak dairesel olacaktır.μiω(μi)(100,60)

#
# von Mises-Fisher density.
# mu is the location and x the point of evaluation, *each in lon-lat* coordinates.
# Optionally, x is a two-column array.
#
dvonMises <- function(x, mu, kappa, inDegrees=TRUE) {
  lambda <- ifelse(inDegrees, pi/180, 1)
  SphereToCartesian <- function(x) {
    x <- matrix(x, ncol=2)
    t(apply(x, 1, function(y) c(cos(y[2])*c(cos(y[1]), sin(y[1])), sin(y[2]))))
  }
  x <- SphereToCartesian(x * lambda)
  mu <- matrix(SphereToCartesian(mu * lambda), ncol=1)

  c.kappa <- kappa / (2*pi*(exp(kappa) - exp(-kappa)))
  c.kappa * exp(kappa * x %*% mu)
}
#
# Define a grid on which to compute the kernel density estimate.
#
x.coord <- seq(-180, 180, by=2)
y.coord <- seq(-90, 90, by=1)
x <- as.matrix(expand.grid(lon=x.coord, lat=y.coord))
#
# Give the locations.
#
n <- 12
set.seed(17)
mu <- cbind(runif(n, -180, 180), asin(runif(n, -1, 1))*180/pi)
#
# Weight them.
#
weights <- rexp(n)
#
# Compute the kernel density.
#
kappa <- 6
z <- numeric(nrow(x))
for (i in 1:nrow(mu)) {
  z <- z + weights[i] * dvonMises(x, mu[i, ], kappa)
}
z <- matrix(z, nrow=length(x.coord))
#
# Plot the result.
#
image(x.coord, y.coord, z, xlab="Longitude", ylab="Latitude")
points(mu[, 1], mu[, 2], pch=16, cex=sqrt(weights))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.