একটি আদর্শ, শক্তিশালী, সু-বোঝা, তাত্ত্বিকভাবে সু-প্রতিষ্ঠিত এবং ঘন ঘন প্রয়োগ করা "সমতা" এর পরিমাপ হ'ল রিপলে কে ফাংশন এবং এর নিকটাত্মীয় এল ফাংশন। যদিও এগুলি সাধারণত দ্বি-মাত্রিক স্থানিক বিন্দু কনফিগারেশনগুলি মূল্যায়নের জন্য ব্যবহৃত হয়, তবুও তাদেরকে একটি মাত্রায় (যা সাধারণত রেফারেন্সগুলিতে দেওয়া হয় না) অভিযোজিত করার জন্য প্রয়োজনীয় বিশ্লেষণটি সহজ।
তত্ত্ব
কে ফাংশনটি একটি সাধারণ পয়েন্টের দূরত্ব এর মধ্যে পয়েন্টগুলির গড় অনুপাতটি অনুমান করে । ব্যবধানে [ 0 , 1 ] এ অভিন্ন বিতরণের জন্য , সত্য অনুপাতটি গণনা করা যায় এবং (নমুনা আকারে asyptotically) সমান 1 - ( 1 - d ) 2 । এল ফাংশনের উপযুক্ত এক-মাত্রিক সংস্করণ অভিন্নতা থেকে বিচ্যুতিগুলি দেখানোর জন্য কে থেকে এই মানটি বিয়োগ করে । অতএব আমরা কোনও একক ব্যাচের উপাত্তকে ইউনিট সীমার জন্য সাধারণকরণ এবং শূন্যের কাছাকাছি বিচ্যুতিগুলির জন্য এর এল ফাংশনটি পরীক্ষা করার বিষয়ে বিবেচনা করতে পারি।d[0,1]1−(1−d)2
কাজের উদাহরণ
উদাহরণ হিসেবে বলা যায় , আমি কৃত্রিম আছে আকার স্বাধীন নমুনার 64 (থেকে একটি অভিন্ন বিতরণ থেকে এবং খাটো দূরত্বের জন্য তাদের (স্বাভাবিক) এল ফাংশন অঙ্কিত 0 থেকে 1 / 3 ), যার ফলে এল ফাংশনের স্যাম্পলিং বন্টন অনুমান করার জন্য একটা খাম তৈরি করা। (এই খামের মধ্যে ভালভাবে প্লট করা পয়েন্টগুলি অভিন্নতার থেকে উল্লেখযোগ্যভাবে আলাদা করা যায় না)) এরজন্য আমি একটি ইউ-আকারের বিতরণ, চারটি সুস্পষ্ট উপাদানযুক্ত মিশ্রণ বিতরণ এবং একটি আদর্শ সাধারণ বিতরণ থেকে একই আকারের নমুনার জন্য এল ফাংশন প্লট করেছি। এই ফাংশনগুলির হিস্টোগ্রামগুলি (এবং তাদের পিতামাত বিতরণগুলির) রেফারেন্সের জন্য এল ফাংশনের সাথে মেলে লাইন চিহ্ন ব্যবহার করে দেখানো হয়েছে।9996401/3
ইউ-আকারের বিতরণের তীক্ষ্ণ পৃথক স্পাইকগুলি (ড্যাশযুক্ত লাল রেখা, বামতম হিস্টোগ্রাম) খুব কাছাকাছি ব্যবধানযুক্ত মানগুলির ক্লাস্টার তৈরি করে। এটি এ L ফাংশনে খুব বড় opeাল দ্বারা প্রতিফলিত হয় । এর পরে এল ফাংশন হ্রাস পায়, শেষ পর্যন্ত মধ্যবর্তী দূরত্বের ফাঁকগুলি প্রতিফলিত করতে নেতিবাচক হয়ে ওঠে।0
সাধারণ বিতরণ থেকে নমুনা (সলিড ব্লু লাইন, ডান দিকের হিস্টোগ্রাম) অভিন্ন বিতরণ করার কাছাকাছি। তদনুসারে, এর এল ফাংশনটি থেকে দ্রুত প্রস্থান করে না । যাইহোক, ০.১০ বা তার বেশি দূরত্বে , এটি ক্লাস্টারের সামান্য প্রবণতার সংকেত দেওয়ার জন্য খামের উপরে যথেষ্ট পরিমাণে উঠে গেছে। মধ্যবর্তী দূরত্ব জুড়ে অবিচ্ছিন্ন বৃদ্ধি ইঙ্গিত দেয় যে গুচ্ছ ছড়িয়ে ছিটিয়ে থাকা এবং বিস্তৃত (কিছু বিচ্ছিন্ন শিখরে সীমাবদ্ধ নয়)।00.10
মিশ্রণ বিতরণ (মিডল হিস্টোগ্রাম) থেকে নমুনার জন্য প্রাথমিক বৃহত opeালটি ছোট দূরত্বগুলিতে ( এরও কম) ক্লাস্টারিং প্রকাশ করে । নেতিবাচক স্তরে নেমে এটি মধ্যবর্তী দূরত্বে পৃথকীকরণের ইঙ্গিত দেয়। এটি ইউ-আকারের বিতরণের এল ফাংশনের সাথে তুলনা করে প্রকাশ করছে: 0 তে slালু , যে পরিমাণগুলি দ্বারা এই বক্ররেখা 0-এর উপরে উঠে যায় এবং যে হারে তারা শেষ পর্যন্ত 0 এ নেমে আসে সেগুলি উপস্থিত ক্লাস্টারিংয়ের প্রকৃতি সম্পর্কে তথ্য সরবরাহ করে তথ্যটি. এই বৈশিষ্ট্যগুলির যে কোনও একটি নির্দিষ্ট অ্যাপ্লিকেশন অনুসারে "সমতা" একক পরিমাপ হিসাবে চয়ন করা যেতে পারে।0.15000
এই উদাহরণগুলি দেখায় যে কীভাবে অভিন্নতা ("সমতা") থেকে ডেটার প্রস্থানগুলি মূল্যায়ন করতে একটি এল-ফাংশন পরীক্ষা করা যেতে পারে এবং কীভাবে প্রস্থানগুলির স্কেল এবং প্রকৃতি সম্পর্কে পরিমাণগত তথ্য এটি থেকে বের করা যায়।
( অভিন্নতা থেকে বড় আকারের প্রস্থানগুলি মূল্যায়ন করার জন্য, সম্পূর্ণরূপে এর সম্পূর্ণ স্বাভাবিক দূরত্বের প্রসারিত পর্যন্ত পুরো এল ফাংশনটি প্লট করা যেতে পারে Ord সাধারণত, যদিও, ছোট দূরত্বে ডেটার আচরণের মূল্যায়ন বেশি গুরুত্বপূর্ণ))1
সফটওয়্যার
R
এই চিত্রটি তৈরির কোডটি নিম্নলিখিত। এটি কে এবং এল গণনা করার জন্য ফাংশনগুলি সংজ্ঞায়িত করে শুরু করে It এটি একটি মিশ্রণ বিতরণ থেকে অনুকরণ করার সক্ষমতা তৈরি করে। তারপরে এটি সিমুলেটেড ডেটা উত্পন্ন করে প্লটগুলি তৈরি করে।
Ripley.K <- function(x, scale) {
# Arguments:
# x is an array of data.
# scale (not actually used) is an option to rescale the data.
#
# Return value:
# A function that calculates Ripley's K for any value between 0 and 1 (or `scale`).
#
x.pairs <- outer(x, x, function(a,b) abs(a-b)) # All pairwise distances
x.pairs <- x.pairs[lower.tri(x.pairs)] # Distances between distinct pairs
if(missing(scale)) scale <- diff(range(x.pairs))# Rescale distances to [0,1]
x.pairs <- x.pairs / scale
#
# The built-in `ecdf` function returns the proportion of values in `x.pairs` that
# are less than or equal to its argument.
#
return (ecdf(x.pairs))
}
#
# The one-dimensional L function.
# It merely subtracts 1 - (1-y)^2 from `Ripley.K(x)(y)`.
# Its argument `x` is an array of data values.
#
Ripley.L <- function(x) {function(y) Ripley.K(x)(y) - 1 + (1-y)^2}
#-------------------------------------------------------------------------------#
set.seed(17)
#
# Create mixtures of random variables.
#
rmixture <- function(n, p=1, f=list(runif), factor=10) {
q <- ceiling(factor * abs(p) * n / sum(abs(p)))
x <- as.vector(unlist(mapply(function(y,f) f(y), q, f)))
sample(x, n)
}
dmixture <- function(x, p=1, f=list(dunif)) {
z <- matrix(unlist(sapply(f, function(g) g(x))), ncol=length(f))
z %*% (abs(p) / sum(abs(p)))
}
p <- rep(1, 4)
fg <- lapply(p, function(q) {
v <- runif(1,0,30)
list(function(n) rnorm(n,v), function(x) dnorm(x,v), v)
})
f <- lapply(fg, function(u) u[[1]]) # For random sampling
g <- lapply(fg, function(u) u[[2]]) # The distribution functions
v <- sapply(fg, function(u) u[[3]]) # The parameters (for reference)
#-------------------------------------------------------------------------------#
#
# Study the L function.
#
n <- 64 # Sample size
alpha <- beta <- 0.2 # Beta distribution parameters
layout(matrix(c(rep(1,3), 3, 4, 2), 2, 3, byrow=TRUE), heights=c(0.6, 0.4))
#
# Display the L functions over an envelope for the uniform distribution.
#
plot(c(0,1/3), c(-1/8,1/6), type="n",
xlab="Normalized Distance", ylab="Total Proportion",
main="Ripley L Functions")
invisible(replicate(999, {
plot(Ripley.L(x.unif <- runif(n)), col="#00000010", add=TRUE)
}))
abline(h=0, lwd=2, col="White")
#
# Each of these lines generates a random set of `n` data according to a specified
# distribution, calls `Ripley.L`, and plots its values.
#
plot(Ripley.L(x.norm <- rnorm(n)), col="Blue", lwd=2, add=TRUE)
plot(Ripley.L(x.beta <- rbeta(n, alpha, beta)), col="Red", lwd=2, lty=2, add=TRUE)
plot(Ripley.L(x.mixture <- rmixture(n, p, f)), col="Green", lwd=2, lty=3, add=TRUE)
#
# Display the histograms.
#
n.breaks <- 24
h <- hist(x.norm, main="Normal Sample", breaks=n.breaks, xlab="Value")
curve(dnorm(x)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, col="Blue")
h <- hist(x.beta, main=paste0("Beta(", alpha, ",", beta, ") Sample"),
breaks=n.breaks, xlab="Value")
curve(dbeta(x, alpha, beta)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, lty=2, col="Red")
h <- hist(x.mixture, main="Mixture Sample", breaks=n.breaks, xlab="Value")
curve(dmixture(x, p, g)*n*mean(diff(h$breaks)), add=TRUE, lwd=2, lty=3, col="Green")