একটি সহজ উপায় হ'ল ইন্টিগ্রেশনের ডোমেনটিকে রাস্টারাইজ করা এবং ইন্টিগ্রালের সাথে একটি পৃথক স্বীকৃতি গণনা করা।
এখানে নজর রাখার জন্য কয়েকটি জিনিস রয়েছে:
পয়েন্টগুলির সীমাটির চেয়ে বেশি কভার করার বিষয়টি নিশ্চিত করুন: আপনার সমস্ত অবস্থান অন্তর্ভুক্ত করতে হবে যেখানে কার্নেলের ঘনত্বের প্রাক্কলনের কোনও প্রশংসনীয় মান থাকবে। এর অর্থ আপনাকে পয়েন্টের ব্যাপ্তিটি কার্নেল ব্যান্ডউইদথ (গাউসিয়ান কার্নেলের জন্য) দ্বারা তিন থেকে চারগুণ বৃদ্ধি করতে হবে।
রাস্টার রেজোলিউশনের সাথে ফলাফলটি কিছুটা পৃথক হবে। রেজুলেশনটি ব্যান্ডউইথের একটি ছোট ভগ্নাংশ হওয়া দরকার। যেহেতু গণনার সময়টি রাস্টারগুলির কোষের সংখ্যার সাথে সমানুপাতিক, তাই উদ্দেশ্যযুক্তের তুলনায় মোটা রেজোলিউশন ব্যবহার করে কয়েকটি গণনা করতে প্রায় অতিরিক্ত অতিরিক্ত সময় লাগে না: পরীক্ষা করুন যে মোটা লোকদের ফলাফল ফলাফলের জন্য রূপান্তরিত হচ্ছে check সেরা রেজোলিউশন। যদি তা না হয় তবে একটি সূক্ষ্ম সমাধানের প্রয়োজন হতে পারে।
এখানে 256 পয়েন্টের একটি ডেটাসেটের জন্য একটি চিত্রণ দেওয়া হয়েছে:
পয়েন্টগুলি দুটি কর্নেল ঘনত্বের প্রাক্কলন অনুসারে কালো বিন্দু হিসাবে সুপারিশ করা হয়েছে। ছয়টি বড় লাল পয়েন্ট হ'ল "প্রোব" যেখানে আলগোরিদিমকে মূল্যায়ন করা হয়। এটি চারটি ব্যান্ডউইথের জন্য করা হয়েছে (1.8 (উল্লম্বভাবে) এবং 3 (অনুভূমিকভাবে), 1/2, 1 এবং 5 ইউনিটের মধ্যে একটি ডিফল্ট) 1000 দ্বারা 1000 কক্ষের রেজোলিউশনে। নিম্নলিখিত ছড়িয়ে ছিটিয়ে থাকা ম্যাট্রিক্স দেখায় যে এই ছয়টি প্রোব পয়েন্টগুলির জন্য ফলাফলগুলি কতটা দৃ strongly়তার সাথে নির্ভর করে, যা বিস্তৃত ঘনত্বকে কভার করে:
তারতম্য দুটি কারণে ঘটে। স্পষ্টতই ঘনত্বের অনুমানগুলি আলাদা হয়, একধরণের বৈচিত্রের প্রবর্তন করে। আরও গুরুত্বপূর্ণ, ঘনত্ব অনুমানের পার্থক্য যে কোনও একক ("প্রোব") পয়েন্টে বড় পার্থক্য তৈরি করতে পারে । পয়েন্টগুলির ক্লাস্টারগুলির মাঝারি ঘনত্ব "সীমান্ত" এর কাছাকাছি বৈচিত্রটি সর্বাধিক - ঠিক সেই জায়গাগুলিতে যেখানে এই গণনাটি সর্বাধিক ব্যবহৃত হতে পারে।
এটি এই গণনার ফলাফলগুলি ব্যাখ্যায় এবং ব্যাখ্যায় যথেষ্ট সাবধানতার প্রয়োজনীয়তা প্রকাশ করে, কারণ তারা তুলনামূলকভাবে স্বেচ্ছাসেবী সিদ্ধান্ত (ব্যবহারের ব্যান্ডউইথ) এর প্রতি এত সংবেদনশীল হতে পারে।
আর কোড
প্রথম কার্যকারিতাটির অর্ধ ডজন লাইনে অ্যালগরিদম থাকে 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)