অভিজ্ঞতা অভিজ্ঞতা ঘনত্বের মধ্যে ওভারল্যাপ কীভাবে গণনা করবেন?


14

আমি দুটি নমুনার মধ্যে মিলের পরিমাপ হিসাবে আর-তে দুটি কার্নেল ঘনত্বের অনুমানের মধ্যে ওভারল্যাপের ক্ষেত্রটি গণনা করার জন্য একটি পদ্ধতি খুঁজছি। স্পষ্ট করার জন্য, নিম্নলিখিত উদাহরণে, আমাকে বেগুনি ওভারল্যাপিং অঞ্চলের ক্ষেত্রফলের পরিমাণটি নির্ধারণ করতে হবে:

library(ggplot2)
set.seed(1234)
d <- data.frame(variable=c(rep("a", 50), rep("b", 30)), value=c(rnorm(50), runif(30, 0, 3)))
ggplot(d, aes(value, fill=variable)) + geom_density(alpha=.4, color=NA)

এখানে চিত্র বর্ণনা লিখুন

একটি অনুরূপ প্রশ্ন এখানে আলোচনা করা হয়েছিল , পার্থক্য হ'ল পূর্বনির্ধারিত সাধারণ বিতরণের পরিবর্তে স্বেচ্ছাচারিত অভিজ্ঞতা সংক্রান্ত ডেটাগুলির জন্য আমার এটি করা দরকার। overlapপ্যাকেজ এই প্রশ্ন ঠিকানাগুলি, কিন্তু দৃশ্যত শুধুমাত্র টাইমস্ট্যাম্প ডেটা, যা আমার জন্য কাজ করে না জন্য। ব্রা-কার্টিস সূচক (যেমন veganপ্যাকেজের vegdist(method="bray")কার্যক্রমে প্রয়োগ করা হয়েছে ) প্রাসঙ্গিক বলে মনে হয় তবে কিছুটা আলাদা ডেটার জন্য আবারও।

আমি এটি বাস্তবায়নের জন্য নিযুক্ত তাত্ত্বিক পদ্ধতির এবং আর ফাংশন উভয়ইতে আগ্রহী।


2
"বেগুনি অঞ্চলকে মাপদণ্ড করা" অনুমানের একটি সমস্যা, অনুমানের পরীক্ষায় নয়, সুতরাং আপনি "একটি আদর্শ মানযোগ্য পরিসংখ্যান পরীক্ষার সাহায্যে এটি সম্পাদন" করার আশা করতে পারবেন না । আপনি নিজেকে বিরোধিতা করুন। আপনি প্রকৃতপক্ষে কী চান তা দয়া করে পরিষ্কার করুন । আপনার সমস্ত কিছু যদি দুটি কে-ডি-ই-র ওভারল্যাপের ক্ষেত্রের অনুমান হয় তবে এটি একটি সাধারণ গণনা।
গ্লেন_বি -রিনস্টেট মনিকা

@ গ্লেেন_ বি মন্তব্যটির জন্য ধন্যবাদ, আমার অ-পরিসংখ্যানবাদী চিন্তাভাবনা পরিষ্কার করতে সাহায্য করেছে। আমি বিশ্বাস করি যে কে-ডি-ই এর মধ্যে ওভারল্যাপের ক্ষেত্রটি আমি যা খুঁজছিলাম তা হ'ল - আমি এটি সম্পাদন করার জন্য প্রশ্নটি সম্পাদনা করেছি।
এমএমকে

2
(0,1)

একই প্রশ্ন কয়েক মাস পরে হাজির হয়েছিল তবে ছেদ পয়েন্টগুলি উল্লেখ করেছে তবে কিছু বৈধ নোট ছিল যা বিবেচনায় নেওয়া যেতে পারে। উল্লেখ করা প্রশ্নে প্রায় দুটি অভিজ্ঞতামূলক বিতরণ। আমি লিঙ্কটি যুক্ত করছি কারণ এই পোস্টটি কেবল কার্নেল ঘনত্ব অনুমানের মাধ্যমে এবং সাধারণ বিতরণের জন্য উত্তর দেয়। আমার মনে হয় নীচের লিঙ্কটি পরীক্ষামূলক জোড় বিতরণের জন্য প্রশ্নটিতে প্রসারিত। stats.stackexchange.com/questions/122857/… - বার্নাব্য 7 ঘন্টা আগে
বারনাবি

উত্তর:


9

দুটি কার্নেল ঘনত্ব অনুমানের ওভারল্যাপের ক্ষেত্রটি নির্ভুলতার কোনও পছন্দসই ডিগ্রির সাথে প্রায় অনুমান করা যেতে পারে।

min(K1(x),K2(x))

যদি দুটি ভিন্ন গ্রিডে থাকে এবং একই গ্রিডে সহজেই পুনরায় গণনা করা না যায় তবে ইন্টারপোলেশন ব্যবহার করা যেতে পারে।

২) আপনি ছেদটির বিন্দু (বা পয়েন্ট) খুঁজে পেতে এবং প্রতিটি ব্যবধানে দুটি কে-পি-র নীচে একত্রিত করতে যেখানে প্রতিটি কম রয়েছে। উপরের আপনার ডায়াগ্রামে আপনি চৌরাস্তার বাম দিকে নীল বক্ররেখা এবং গোলাপী একটিকে ডানদিকে ডানদিকে একীভূত করবেন যা আপনার পছন্দ / উপলভ্য আছে তার অর্থ দিয়ে। প্রতিটি কার্নেল উপাদান অধীন অঞ্চল বিবেচনা করে এটি মূলত করা যেতে পারে1hK(xxih)

যাইহোক , উপরের whuber এর মন্তব্যগুলি পরিষ্কারভাবে মনে রাখা উচিত - এটি করণীয় খুব প্রয়োজন অর্থপূর্ণ জিনিস নয়।


পদ্ধতি এক এবং পদ্ধতি 2 এর সাথে যুক্ত ত্রুটিটি আপনি কীভাবে গণনা করবেন?
অলিপাওয়ার

সাধারণ পরিস্থিতিতে, কার্নেল ঘনত্বের অনুমানের ত্রুটির সাথে তুলনা করে উভয়ই সংক্ষিপ্ত হবে, তাই আমি খুব বেশি চিন্তা করব না। ট্র্যাপিজয়েডাল পদ্ধতি এবং অবশ্যই অন্যান্য সংখ্যাগত সংহতকরণে ত্রুটির সীমা গণনা করা যেতে পারে - এই ধরনের গণনাগুলি বেশ মানসম্পন্ন - তবে কে-পি-ই-র বৃহত্তর অনিশ্চয়তার কারণে এটি অর্থহীন উদ্বেগজনক। পদ্ধতি 2 গণনার গোলাকার ত্রুটির সঞ্চারের জন্য সঠিক হবে।
গ্লেন_বি -রিনস্টেট মনিকা

1
এই পদ্ধতিগুলির পরামর্শগুলি আপনার বিবেচনার জন্য ধন্যবাদ জানায় makes আমি আর-তে এটি বাস্তবায়নে কাজ করব, তবে একজন নবজাতক হিসাবে আমি কীভাবে এটি পরিষ্কারভাবে কোডিং করতে পারি সে সম্পর্কে পরামর্শগুলিতে আগ্রহী।
এমএমকে

10

সম্পূর্ণতার স্বার্থে, আমি এখানে আর-তে এটি কীভাবে শেষ করেছি:

# simulate two samples
a <- rnorm(100)
b <- rnorm(100, 2)

# define limits of a common grid, adding a buffer so that tails aren't cut off
lower <- min(c(a, b)) - 1 
upper <- max(c(a, b)) + 1

# generate kernel densities
da <- density(a, from=lower, to=upper)
db <- density(b, from=lower, to=upper)
d <- data.frame(x=da$x, a=da$y, b=db$y)

# calculate intersection densities
d$w <- pmin(d$a, d$b)

# integrate areas under curves
library(sfsmisc)
total <- integrate.xy(d$x, d$a) + integrate.xy(d$x, d$b)
intersection <- integrate.xy(d$x, d$w)

# compute overlap coefficient
overlap <- 2 * intersection / total

যেমনটি উল্লেখ করা হয়েছে, কেডিপি জেনারেশনের সাথে এবং সংহতকরণের সাথে অন্তর্নিহিত অনিশ্চয়তা এবং স্বক্ষমতা রয়েছে।


2
সিআরএএন-তে এখন একটি প্যাকেজ রয়েছে overlappingযা 2 (বা ততোধিক) অভিজ্ঞতা অভিজ্ঞতাগুলির ওভারল্যাপের ক্ষেত্রফলটি অনুমান করে। ডকুমেন্টেশন এখানে দেখুন: rdocamentation.org/packages/overlapping/versions/1.5.0/topics/…
স্টেফান আভে

এক্স,এক্স,এক্স,

@ মিম্ক আপনি 2 ডি ঘনত্বের জন্য এটি করতে পারেন?
ওভারফ্লো পুলিশ

4

প্রথমত, আমি ভুল হতে পারি তবে আমি মনে করি যে কার্নেল ঘনত্বের প্রাক্কলন (কেডিএ) ছেদ করে এমন একাধিক পয়েন্ট রয়েছে এমন ক্ষেত্রে আপনার সমাধানটি কার্যকর হবে না। দ্বিতীয়ত, overlapপ্যাকেজটি টাইমস্ট্যাম্প ডেটা ব্যবহারের জন্য তৈরি করা হয়েছিল, আপনি এখনও দুটি কে-ডি-ই-র ওভারল্যাপের ক্ষেত্রফল নির্ধারণ করতে এটি ব্যবহার করতে পারেন। আপনাকে কেবল আপনার ডেটা পুনরুদ্ধার করতে হবে যাতে এটি 0 থেকে 2π অবধি থাকে π
উদাহরণ স্বরূপ :

# simulate two sample    
 a <- rnorm(100)
 b <- rnorm(100, 2)

# To use overplapTrue(){overlap} the scale must be in radian (i.e. 0 to 2pi)
# To keep the *relative* value of a and b the same, combine a and b in the
# same dataframe before rescaling. You'll need to load the ‘scales‘ library.
# But first add a "Source" column to be able to distinguish between a and b
# after they are combined.
 a = data.frame( value = a, Source = "a" )
 b = data.frame( value = b, Source = "b" )
 d = rbind(a, b)
 library(scales) 
 d$value <- rescale( d$value, to = c(0,2*pi) )

# Now you can created the rescaled a and b vectors
 a <- d[d$Source == "a", 1]
 b <- d[d$Source == "b", 1]

# You can then calculate the area of overlap as you did previously.
# It should give almost exactly the same answers.
# Or you can use either the overlapTrue() and overlapEst() function 
# provided with the overlap packages. 
# Note that with these function the KDE are fitted using von Mises kernel.
 library(overlap)
  # Using overlapTrue():
   # define limits of a common grid, adding a buffer so that tails aren't cut off
     lower <- min(d$value)-1 
     upper <- max(d$value)+1
   # generate kernel densities
     da <- density(a, from=lower, to=upper, adjust = 1)
     db <- density(b, from=lower, to=upper, adjust = 1)
   # Compute overlap coefficient
     overlapTrue(da$y,db$y)


  # Using overlapEst():            
    overlapEst(a, b, kmax = 3, adjust=c(0.8, 1, 4), n.grid = 500)

# You can also plot the two KDEs and the region of overlap using overlapPlot()
# but sadly I haven't found a way of changing the x scale so that the scale 
# range correspond to the initial x value and not the rescaled value.
# You can only change the maximum value of the scale using the xscale argument 
# (i.e. it always range from 0 to n, where n is set with xscale = n).
# So if some of your data take negative value, you're probably better off with
# a different plotting method. You can change the x label with the xlab
# argument.  
  overlapPlot(a, b, xscale = 10, xlab= "x metrics", rug=T)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.