भौगोलिक निर्देशांक से कर्नेल घनत्व अनुमान की गणना का उचित तरीका क्या है?


11

मुझे अक्षांश और देशांतर निर्देशांक की सूची से 2d कर्नेल घनत्व अनुमान (kde) की गणना करनी है। लेकिन अक्षांश में एक डिग्री देशांतर में एक डिग्री के समान दूरी नहीं है, इसका मतलब है कि व्यक्तिगत गुठली अंडाकार होगी, विशेष रूप से बिंदु भूमध्य रेखा से है।

मेरे मामले में सभी बिंदु एक-दूसरे के काफी करीब हैं कि उन्हें समतल पृथ्वी में बदलने से कई समस्याएं पैदा नहीं होनी चाहिए। हालाँकि, मैं अभी भी इस बात को लेकर उत्सुक हूँ कि यह सही नहीं होने की स्थिति में इसे कैसे संभालना चाहिए।


पहले अनुमान के अनुसार, मैं मान सकता हूं कि आप एक मानक गोलाकार दृष्टिकोण में एक उचित गोलाकार दूरी की मीट्रिक को प्रतिस्थापित करेंगे।
साइकोरैक्स का कहना है कि

कौन कहता है कि अंडाकार गुठली होना गलत है?
गुंग - को पुनः स्थापित मोनिका

1
@ गुंग जरा सोचिए कि अगर आप एक पोल के करीब एक बिंदु को रख दें तो क्या होगा। यह अनुदैर्ध्य अक्ष के साथ निचोड़ा जाएगा। और आप एक कर्नेल को कैसे संभालेंगे जो वास्तव में ध्रुवों में से एक को कवर करता है?
आरोन डी विंड्ट

आपके पास ध्रुव पर एक गांठ होगी जो सभी अनुदैर्ध्य पर समान रूप से उच्च होती है। वह गलत क्यों है?
गुंग - को पुनः स्थापित मोनिका

@gung क्योंकि अगर मैं उदाहरण के लिए 1 डिग्री का कर्नेल व्यास चुनता हूं तो यह सभी देशांतरों पर नहीं होगा। यह 1 अनुदैर्ध्य डिग्री से अधिक होगा जो कि कुछ ही मीटर का हो सकता है अगर बिंदु पोल के करीब पर्याप्त है, ~ 110 किमी कि तुलना में 1 अक्षांशीय डिग्री है।
आरोन डी विंड्ट

जवाबों:


7

आप क्षेत्र के लिए विशेष रूप से उपयुक्त कर्नेल का उपयोग करने पर विचार कर सकते हैं, जैसे कि वॉन मिसेस-फिशर घनत्व

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

μx

κxμω(μ)

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

xμi

Rμiω(μi)κ6

[चित्रा]

μ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))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.