2 डी में कर्नेल घनत्व आकलनकर्ता को एकीकृत करना


12

मैं इस सवाल से आ रहा हूँ अगर कोई भी निशान का पालन करना चाहता है।

मूल रूप से मेरे पास एक डेटा सेट है जो ऑब्जेक्ट्स से बना है, जहां प्रत्येक ऑब्जेक्ट में इसके साथ संलग्न मानों की संख्या दी गई है (दो इस मामले में):ΩN

Ω=o1[x1,y1],o2[x2,y2],...,oN[xN,yN]

मुझे एक नए ऑब्जेक्ट के से संबंधित होने की संभावना को निर्धारित करने के लिए एक तरीका इसलिए मुझे एक कर्नेल घनत्व अनुमानक के माध्यम से प्रायिकता घनत्व प्राप्त करने के लिए उस प्रश्न में सलाह दी गई थी , जो मुझे विश्वास है कि पहले से ही है।p[xp,yp]Ωf^

चूंकि मेरा लक्ष्य इस 2D डेटा सेट से संबंधित इस नई ऑब्जेक्ट ( ) की संभावना प्राप्त करना है , मुझे बताया गया था कि समर्थन के " मूल्यों " के लिए pdf को एकीकृत करना था। घनत्व आपके द्वारा देखे गए से कम है ”। नए ऑब्जेक्ट में "मनाया गया" घनत्व है, जिसका मूल्यांकन किया गया है : यानी । इसलिए मुझे समीकरण हल करने की आवश्यकता है:Ω पी ( एक्स पी , y पी )p[xp,yp]Ωf^f^pf^(xp,yp)

x,y:f^(x,y)<f^(xp,yp)f^(x,y)dxdy

मेरे 2 डी डेटा सेट की पीडीएफ (अजगर के आँकड़े के माध्यम से प्राप्त की गई। Gaussian_kde मॉड्यूल) इस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

जहां लाल बिंदु मेरे डेटा सेट के पीडीएफ पर प्लॉट किए गए नए ऑब्जेक्ट प्रतिनिधित्व करता है ।p[xp,yp]

तो सवाल यह है: मैं कैसे सीमा लिए अभिन्न की गणना कर सकता हूँ जब pdf ऐसा दिखता है?x,y:f^(x,y)<f^(xp,yp)


जोड़ना

मैंने यह देखने के लिए कुछ परीक्षण किए कि जिन टिप्पणियों में मैंने काम किया, उसमें मोंटे कार्लो पद्धति कितनी अच्छी थी। मेरे पास बस यही है:

तालिका

कम घनत्व वाले क्षेत्रों के लिए मान कुछ अलग-अलग दिखाई देते हैं, दोनों बैंडविंड्स में कम या ज्यादा भिन्नता दिखाई देती है। तालिका में सबसे बड़ी भिन्नता बिंदु (x, y) = (2.4,1.5) के लिए होती है, जिसकी तुलना सिल्वरमैन के 2500 बनाम 1000 नमूना मूल्य से की जाती है, जो भिन्नता देता है 0.0126या ~1.3%। मेरे मामले में यह काफी हद तक स्वीकार्य होगा।

संपादित करें : मैंने अभी देखा कि 2 आयाम में स्कॉट का नियम सिल्वरमैन के समकक्ष है जो यहां दी गई परिभाषा के अनुसार है


2
क्या आपने देखा है कि आपका अनुमानक एकतरफा नहीं है, लेकिन यह कि आप जिस सिफारिश का पालन कर रहे हैं, वह केवल "अनिमॉडल" वितरण पर ही लागू होती है? इसका मतलब यह नहीं है कि आप कुछ गलत कर रहे हैं, लेकिन इसका जवाब क्या हो सकता है इसके बारे में कुछ कठिन सोच उत्पन्न करनी चाहिए।
whuber

हाय @ वाउबर, वास्तव में उस सवाल का जवाब कहता है कि यह असमान वितरण के लिए "अच्छा व्यवहार" है, इसलिए मैंने सोचा कि शायद यह कुछ संशोधन के साथ मेरी समस्या पर काम कर सकता है । क्या सांख्यिकीय शब्दजाल (ईमानदार सवाल) में "अच्छी तरह से व्यवहार किया जाता है" केवल "काम करता है"? चीयर्स।
गैब्रियल

मेरी मुख्य चिंता यह है कि केडीई बैंडविड्थ की पसंद के प्रति संवेदनशील हो सकता है और मुझे आपकी अभिन्नता की उम्मीद है, विशेष रूप से सीमांत स्थानों के लिए जैसे चित्रण में दिखाया गया है, पसंद के प्रति बहुत संवेदनशील होगा । (इस तरह से, आप एक बार इस तरह से रेखापुंज छवि बना सकते हैं, तो यह गणना आसान है: यह उन बिंदुओं के बीच छवि में औसत मूल्य के लिए आनुपातिक है, जिसका मूल्य "जांच" बिंदु से कम है।) आप संपर्क कर सकते हैं। उचित बैंडवाइड की पूरी श्रृंखला के लिए उत्तर की गणना करके देखें कि क्या यह उस सीमा के भीतर किसी भी भौतिक तरीके से बदलता है। यदि नहीं, तो आप ठीक हैं।
whuber

मैं समाधान पर टिप्पणी नहीं करूंगा, लेकिन एकीकरण को सरल मोंटे कार्लो द्वारा किया जा सकता है: से नमूना अंक (यह आसान है, क्योंकि kde घनत्व का मिश्रण है जो नमूना से आसान है), और गिनती एकीकरण क्षेत्र के अंदर आने वाले बिंदुओं का अंश (जहां असमानता रहती है)। f^
ज़ेन

आपके डेटासेट में कितने अवलोकन हैं?
हांग ओय जूल

जवाबों:


11

एक सरल तरीका एकीकरण के डोमेन को व्यवस्थित करना और एक असतत सन्निकटन की गणना करना है।

देखने के लिए कुछ चीजें हैं:

  1. बिंदुओं की सीमा से अधिक कवर करना सुनिश्चित करें: आपको उन सभी स्थानों को शामिल करने की आवश्यकता है जहां कर्नेल घनत्व के अनुमान में कोई सराहनीय मूल्य होगा। इसका मतलब है कि आपको कर्नेल बैंडविड्थ (एक गाऊसी कर्नेल के लिए) से तीन से चार गुना तक बिंदुओं का विस्तार करना होगा।

  2. परिणाम रेखापुंज के संकल्प के साथ कुछ अलग होगा। रिज़ॉल्यूशन को बैंडविड्थ का एक छोटा सा अंश होना चाहिए। क्योंकि गणना का समय रेखापुंज में कोशिकाओं की संख्या के लिए आनुपातिक होता है, यह लगभग एक अतिरिक्त समय नहीं लेता है, ताकि एक से अधिक मोटे संकल्पों का उपयोग करते हुए गणनाओं की एक श्रृंखला का प्रदर्शन किया जा सके: जाँच करें कि मोटे लोगों के लिए परिणाम परिणाम के लिए परिवर्तित हो रहे हैं बेहतरीन संकल्प। यदि वे नहीं हैं, तो एक महीन संकल्प की आवश्यकता हो सकती है।

यहाँ 256 बिंदुओं के डेटासेट के लिए एक चित्रण है:

आकृति 1

अंक को दो कर्नेल घनत्व अनुमानों पर सुपरिंपल किए गए काले बिंदुओं के रूप में दिखाया गया है। छह बड़े लाल बिंदु "जांच" हैं जिस पर एल्गोरिदम का मूल्यांकन किया जाता है। यह 1000 के एक संकल्प पर चार बैंडविथ (1.8 (लंबवत) और 3 (क्षैतिज रूप से), 1/2, 1, और 5 इकाइयों के बीच एक डिफ़ॉल्ट) के लिए किया गया है। निम्न स्कैल्पलॉट मैट्रिक्स यह दर्शाता है कि परिणाम इन छह जांच बिंदुओं के लिए बैंडविड्थ पर कितनी दृढ़ता से निर्भर करते हैं, जो कि घनत्व की एक विस्तृत श्रृंखला को कवर करते हैं:

चित्र 2

भिन्नता दो कारणों से होती है। स्पष्ट रूप से घनत्व का अनुमान भिन्न होता है, एक प्रकार की भिन्नता का परिचय देता है। इससे भी महत्वपूर्ण बात, घनत्व के अनुमानों में अंतर किसी भी एकल ("जांच") बिंदु पर बड़े अंतर पैदा कर सकता है । बाद की विविधता अंकों के समूहों के मध्यम-घनत्व "फ्रिंजेस" के आसपास सबसे बड़ी है - बिल्कुल उन स्थानों पर जहां इस गणना का सबसे अधिक उपयोग होने की संभावना है।

यह इन गणनाओं के परिणामों का उपयोग करने और उनकी व्याख्या करने में पर्याप्त सावधानी की आवश्यकता को दर्शाता है, क्योंकि वे अपेक्षाकृत मनमाने निर्णय (उपयोग करने के लिए बैंडविड्थ) के प्रति इतने संवेदनशील हो सकते हैं।


आर कोड

एल्गोरिथ्म, पहले समारोह के आधा दर्जन लाइनों में निहित है f। इसके उपयोग की व्याख्या करने के लिए, शेष कोड पूर्ववर्ती आंकड़े उत्पन्न करता है।

library(MASS)     # kde2d
library(spatstat) # im class
f <- function(xy, n, x, y, ...) {
  #
  # Estimate the total where the density does not exceed that at (x,y).
  #
  # `xy` is a 2 by ... array of points.
  # `n`  specifies the numbers of rows and columns to use.
  # `x` and `y` are coordinates of "probe" points.
  # `...` is passed on to `kde2d`.
  #
  # Returns a list:
  #   image:    a raster of the kernel density
  #   integral: the estimates at the probe points.
  #   density:  the estimated densities at the probe points.
  #
  xy.kde <- kde2d(xy[1,], xy[2,], n=n, ...)
  xy.im <- im(t(xy.kde$z), xcol=xy.kde$x, yrow=xy.kde$y) # Allows interpolation $
  z <- interp.im(xy.im, x, y)                            # Densities at the probe points
  c.0 <- sum(xy.kde$z)                                   # Normalization factor $
  i <- sapply(z, function(a) sum(xy.kde$z[xy.kde$z < a])) / c.0
  return(list(image=xy.im, integral=i, density=z))
}
#
# Generate data.
#
n <- 256
set.seed(17)
xy <- matrix(c(rnorm(k <- ceiling(2*n * 0.8), mean=c(6,3), sd=c(3/2, 1)), 
               rnorm(2*n-k, mean=c(2,6), sd=1/2)), nrow=2)
#
# Example of using `f`.
#
y.probe <- 1:6
x.probe <- rep(6, length(y.probe))
lims <- c(min(xy[1,])-15, max(xy[1,])+15, min(xy[2,])-15, max(xy[2,]+15))
ex <- f(xy, 200, x.probe, y.probe, lim=lims)
ex$density; ex$integral
#
# Compare the effects of raster resolution and bandwidth.
#
res <- c(8, 40, 200, 1000)
system.time(
  est.0 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, lims=lims)$integral))
est.0
system.time(
  est.1 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1, lims=lims)$integral))
est.1
system.time(
  est.2 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=1/2, lims=lims)$integral))
est.2
system.time(
  est.3 <- sapply(res, 
           function(i) f(xy, i, x.probe, y.probe, h=5, lims=lims)$integral))
est.3
results <- data.frame(Default=est.0[,4], Hp5=est.2[,4], 
                      H1=est.1[,4], H5=est.3[,4])
#
# Compare the integrals at the highest resolution.
#
par(mfrow=c(1,1))
panel <- function(x, y, ...) {
  points(x, y)
  abline(c(0,1), col="Red")
}
pairs(results, lower.panel=panel)
#
# Display two of the density estimates, the data, and the probe points.
#
par(mfrow=c(1,2))
xy.im <- f(xy, 200, x.probe, y.probe, h=0.5)$image
plot(xy.im, main="Bandwidth=1/2", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

xy.im <- f(xy, 200, x.probe, y.probe, h=5)$image
plot(xy.im, main="Bandwidth=5", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)

आश्चर्यजनक उत्तर, हालांकि मुझे यकीन नहीं है कि मैं Defaultऔर Hp5बैंडविदथ का अर्थ समझता हूं (मुझे लगता है H1और H5मतलब है h=1और h=5) Hp5मूल्य है h=1/2? यदि है तो क्या है Default?
गैब्रियल

1
आपकी समझ सही है। ("p5" का अर्थ है ".5") डिफ़ॉल्ट का kde2dउपयोग करके स्वचालित रूप से गणना की जाती है bandwidth.nrd। नमूना डेटा के लिए यह क्षैतिज दिशा में और ऊर्ध्वाधर दिशा में बराबर है, परीक्षण में और के मूल्यों के बीच लगभग आधा है । ध्यान दें कि ये डिफ़ॉल्ट बैंडविंड्स काफी हद तक कुल घनत्व के एक प्रशंसनीय अनुपात को खुद बिंदुओं की सीमा से परे रखने के लिए पर्याप्त हैं, यही कारण है कि उस सीमा को विस्तारित करने की आवश्यकता है चाहे आप किस एकीकरण एल्गोरिथ्म का उपयोग कर सकते हैं। 31.8515
व्हिबर

तो क्या मैं सही तरीके से समझ रहा हूं अगर मैं कहता हूं कि जैसे-जैसे मैं बैंडविड्थ बढ़ाता हूं, वैसे-वैसे परिणाम kdeभी बढ़ते हैं (और इसलिए मुझे एकीकरण का विस्तार करने की आवश्यकता है)? यह देखते हुए कि मैं <10%अभिन्न के परिणामी मूल्य में त्रुटि के साथ रह सकता हूं , स्कॉट के शासन का उपयोग करने के बारे में आप क्या सोचते हैं?
गैब्रियल

मुझे लगता है कि क्योंकि ये नियम पूरी तरह से अलग-अलग उद्देश्यों के लिए विकसित किए गए थे, इसलिए आपको संदेह होना चाहिए कि वे आपके उद्देश्यों के लिए अच्छा प्रदर्शन नहीं कर सकते हैं, खासकर यदि यह आँकड़े.स्टैकएक्सचेंज . com / questions / 63263 पर किए गए सुझाव को लागू करने के लिए है । यह चिंता करना समय से पहले है कि किसके अंगूठे का नियम आप केडीई के लिए उपयोग कर सकते हैं; इस स्तर पर आपको गंभीरता से चिंतित होना चाहिए कि क्या संपूर्ण दृष्टिकोण भी मज़बूती से काम करेगा।
whuber

1
ऊपर स्क्रैच। मेरे पास यह जानने का एक तरीका है कि क्या कार्यान्वयन काम कर रहा है और यहां तक ​​कि यह भी निर्धारित है कि यह कितनी अच्छी तरह काम कर रहा है। यह थोड़ा जटिल और समय लेने वाला है लेकिन मैं इसे करने में सक्षम होना चाहिए।
गैब्रियल

1

यदि आपके पास टिप्पणियों की एक अच्छी संख्या है, तो आपको किसी भी एकीकरण को करने की आवश्यकता नहीं हो सकती है। मान लें कि आपका नया बिंदु । मान लें कि आपके पास एक घनत्व अनुमानक है ; योगों की संख्या जिसके लिए और नमूना आकार से विभाजित करें। यह आपको आवश्यक संभावना के लिए एक अनुमान देता है। x ( एक्स )< ( एक्स 0)x0f^xf^(x)<f^(x0)

यह मानता है कि कम घनत्व वाले क्षेत्रों में एक सभ्य अनुमान देने के लिए "बहुत छोटा" नहीं है और आपका नमूना आकार काफी बड़ा (और फैल-आउट पर्याप्त) है। 20000 मामले काफी बड़े प्रतीत होते हैं, हालांकि बीवरिएट ।xf^(x0)x


इस सिफारिश के कुछ मात्रात्मक विश्लेषण, या कम से कम एक वास्तविक आवेदन का एक उदाहरण, स्वागत योग्य होगा। मुझे संदेह है कि आपके प्रस्ताव की सटीकता कर्नेल के आकार पर बहुत अधिक निर्भर है। यह मुझे अपने गुणों के पर्याप्त अध्ययन के बिना इस तरह की गणना पर भरोसा करने के लिए अनिच्छुक बना देगा।
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.