দুটি সাধারণ বিতরণের ওভারল্যাপিং অঞ্চলের শতাংশ


46

আমি ভাবছিলাম দেওয়া দুই স্বাভাবিক ডিস্ট্রিবিউশন এবংσ 2 , μ 2σ1, μ1σ2, μ2

  • আমি দুটি বিতরণের ওভারল্যাপিং অঞ্চলের শতাংশকে কীভাবে গণনা করতে পারি?
  • আমি মনে করি এই সমস্যার নির্দিষ্ট নাম রয়েছে, আপনি কি এই সমস্যাটি বর্ণনা করে কোনও নির্দিষ্ট নাম সম্পর্কে অবগত আছেন?
  • আপনি কি এর কোনও প্রয়োগ সম্পর্কে সচেতন (যেমন, জাভা কোড)?

2
ওভারল্যাপিং অঞ্চলটির অর্থ কী? আপনি কি সেই অঞ্চলটি বোঝাচ্ছেন যা উভয় ঘনত্বের বক্ররেখার নীচে?
নিক সাব্বে

আমি দুটি ক্ষেত্রের ছেদটি বোঝাচ্ছি
আলী সালেহি

4
সংক্ষেপে, দুটি পিডিএফ এবং এবং হিসাবে লিখতে , আপনি কি সত্যিই ute গণনা করতে চান ? আপনি আমাদের যে প্রেক্ষাপটে উত্থাপন করেন এবং কীভাবে এটি ব্যাখ্যা করা হবে সে সম্পর্কে আমাদের আলোকিত করতে পারেন? fgmin(f(x),g(x))dx
হোবার

উত্তর:


41

একে প্রায়শই "ওভারল্যাপিং সহগ" (ওভিএল )ও বলা হয়। এর জন্য গুগলিং আপনাকে প্রচুর হিট দেবে। দ্বি-স্বাভাবিক ক্ষেত্রে আপনি এখানে নমোগ্রাম খুঁজে পেতে পারেন । একটি দরকারী কাগজ হতে পারে:

  • হেনরি এফ ইনমান; এডউইন এল ব্র্যাডলি জুনিয়র (1989)। সম্ভাব্যতা বিতরণ এবং দুটি সাধারণ ঘনত্বের ওভারল্যাপের পয়েন্ট অনুমানের মধ্যে চুক্তির একটি পরিমাপ হিসাবে ওভারল্যাপিং সহগ। পরিসংখ্যানগুলিতে যোগাযোগ - তত্ত্ব এবং পদ্ধতি, 18 (10), 3851-3874। ( লিঙ্ক )

সম্পাদন করা

এখন আপনি আমাকে আরও আগ্রহী করে তোলেন, তাই আমি এগিয়ে গিয়ে এটির গণনা করার জন্য আর কোড তৈরি করেছি (এটি একটি সাধারণ সংহতকরণ)। ওভারল্যাপিং অঞ্চলের শেড সহ দুটি বিতরণের প্লট আমি ফেলেছিলাম:

min.f1f2 <- function(x, mu1, mu2, sd1, sd2) {
    f1 <- dnorm(x, mean=mu1, sd=sd1)
    f2 <- dnorm(x, mean=mu2, sd=sd2)
    pmin(f1, f2)
}

mu1 <- 2;    sd1 <- 2
mu2 <- 1;    sd2 <- 1

xs <- seq(min(mu1 - 3*sd1, mu2 - 3*sd2), max(mu1 + 3*sd1, mu2 + 3*sd2), .01)
f1 <- dnorm(xs, mean=mu1, sd=sd1)
f2 <- dnorm(xs, mean=mu2, sd=sd2)

plot(xs, f1, type="l", ylim=c(0, max(f1,f2)), ylab="density")
lines(xs, f2, lty="dotted")
ys <- min.f1f2(xs, mu1=mu1, mu2=mu2, sd1=sd1, sd2=sd2)
xs <- c(xs, xs[1])
ys <- c(ys, ys[1])
polygon(xs, ys, col="gray")

### only works for sd1 = sd2
SMD <- (mu1-mu2)/sd1
2 * pnorm(-abs(SMD)/2)

### this works in general
integrate(min.f1f2, -Inf, Inf, mu1=mu1, mu2=mu2, sd1=sd1, sd2=sd2)

এই উদাহরণস্বরূপ, ফলাফলটি: 0.6099324নিখুঁত ত্রুটি সহ < 1e-04। নীচে চিত্র।

উদাহরণ


10
(+1) গুগলিং কমপক্ষে তিনটি স্বতন্ত্র সংজ্ঞা (মাতুশিতা, মরিসিতা এবং ওয়েটজম্যান) নিয়ে আসে। আপনার বাস্তবায়ন ওয়েটজম্যানের।
হোয়বার

1
0.60993 24 0.60993 43398 78944 33895 ... এর একটি অনুমান।
whuber

10

এটি ভট্টাচার্য সহগ দ্বারা দেওয়া হয়েছে । অন্যান্য বিতরণের জন্য, সাধারণ সংস্করণটিও দেখুন, দুটি বিতরণের মধ্যে হেল্পিংজারের দূরত্ব।

এটি গণনা করার জন্য আমি কোনও গ্রন্থাগার সম্পর্কে জানি না, তবে মহালানোবিস দূরত্ব এবং ভেরিয়েন্স ম্যাট্রিক্স নির্ধারণের ক্ষেত্রে সুস্পষ্ট সূত্রপাতের পরে বাস্তবায়ন কোনও সমস্যা হওয়া উচিত নয়।


3
ভট্টাচার্য সহগ ওভারল্যাপের একটি পরিমাপ তবে এটি একই নয়, তাই না?
স্টাফেন লরেন্ট

7

আমি জানি না এটি করার কোনও সুস্পষ্ট মানক উপায় আছে কিনা তবে:

প্রথমত, আপনি দুটি ঘনত্বের মধ্যে ছেদ পয়েন্টগুলি খুঁজে পান। উভয় ঘনত্বের সমান করে এটি সহজেই অর্জন করা যায়, যা সাধারণ বন্টনের জন্য এক্স এর জন্য একটি চতুর্ভুজ সমীকরণ হতে পারে।

কিছু ঘনিষ্ঠ হবে:

(xμ2)22σ22(xμ1)22σ12=logσ1σ2

এটি বেসিক ক্যালকুলাস দিয়ে সমাধান করা যেতে পারে।

সুতরাং আপনি শূন্য হয়, এক বা দুটি ছেদ পয়েন্ট। এখন এই ছেদ পয়েন্টগুলি প্রকৃত রেখাটিকে 1, 2 বা তিন ভাগে ভাগ করে, যেখানে দুটি ঘনত্বের মধ্যে কোনওটিই সর্বনিম্ন। যদি গাণিতিক কিছু মনে না আসে, কেবল কোন অংশটির মধ্যে কোনও বিন্দুটি চেষ্টা করুন এটি কোনটি সর্বনিম্ন।

আপনার আগ্রহের মান এখন প্রতিটি অংশে সর্বনিম্ন ঘনত্বের বক্ররেখার ক্ষেত্রগুলির যোগফল। এই অঞ্চলটি এখন संचयी বিতরণ ফাংশন থেকে পাওয়া যাবে (কেবলমাত্র 'অংশ' এর উভয় প্রান্তে মান বিয়োগ করুন।


4
(+1) আসলে, যখন , সমীকরণটি সূত্রের সাথে সমাধান করা যায়: ক্যালকুলাসের প্রয়োজন নেই। যদি আমরা জন্য (ডাব্লুএলজি) ব্যবস্থা , তবে দুটি ঘনত্বের মধ্যে দ্বিতীয় ঘনত্ব সবচেয়ে কম এবং অন্যথায় প্রথম ঘনত্ব সবচেয়ে কম। এটি সাধারণ সিডিএফের চারটি মূল্যায়নের গণনা হ্রাস করে। সহ পরিস্থিতি আরও সহজ, একটি রৈখিক সমীকরণের সমাধান প্রয়োজন এবং একটি সিডিএফের মাত্র দুটি মূল্যায়ন প্রয়োজন। σ1σ2μ1μ2σ1=σ2
হোবার

2
@ কী আপনি এইটিকে পুরো উত্তরে রূপান্তর করতে পারেন? অথবা নিক তার সম্পাদনা করতে পারে।
আলেকসান্দ্র ডাবিনস্কি

@whuber আপনি কি বলতে চান নি বদলে ? σ1σ2μ1μ2
স্টাফেন লরেন্ট

@ স্টাফেন আমি মনে করি আপনি সঠিক বলেছেন যে এসডিগুলি অর্ডার নির্ধারণ করে: ছোট এসডি সহ ঘনত্বের পরিণামে ধনাত্মক এবং নেতিবাচক উভয় দিকেই ছোট লেজ থাকে এবং তাই অন্য কোথাও শূন্য এবং ছোট মানগুলির মধ্যে বৃহত্তর মান থাকবে।
whuber

@ হ্যাঁ হ্যাঁ, এবং প্রকৃতপক্ষে এটি দেখতে সহজ যে এসডিগুলির ক্রম নিক দ্বারা প্রাপ্ত পলিনামের ২ য় ক্রম সহগের সাইনটি নির্ধারণ করে।
স্টাফেন লরেন্ট

1

উত্তরসূরীদের জন্য, ওল্ফগ্যাংয়ের সমাধানটি আমার পক্ষে কার্যকর হয়নি — আমি ফাংশনটিতে বাগগুলিতে ছুটে এসেছি integrate। তাই আমি নীচের ছোট্ট ফাংশনটি বিকাশের জন্য নিক স্টৌবের উত্তরের সাথে এটি সংযুক্ত করেছি। সংখ্যাগত ইন্টিগ্রেশন ব্যবহারের চেয়ে দ্রুত এবং কম বগি হওয়া উচিত:

get_overlap_coef <- function(mu1, mu2, sd1, sd2){
  xs  <- seq(min(mu1 - 4*sd1, mu2 - 4*sd2), 
             max(mu1 + 4*sd1, mu2 + 4*sd2), 
             length.out = 500)
  f1  <- dnorm(xs, mean=mu1, sd=sd1)
  f2  <- dnorm(xs, mean=mu2, sd=sd2)
  int <- xs[which.max(pmin(f1, f2))]
  l   <- pnorm(int, mu1, sd1, lower.tail = mu1>mu2)
  r   <- pnorm(int, mu2, sd2, lower.tail = mu1<mu2)
  l+r
}

এটা কি ফিরে আসা উচিত নয় (l+r)/2?
আরএসএইচপি

0

এখানে জাভা সংস্করণ, অ্যাপাচি কমন্স গণিতের গ্রন্থাগার :

import org.apache.commons.math3.distribution.NormalDistribution;

public static double overlapArea(double mean1, double sd1, double mean2, double sd2) {

    NormalDistribution normalDistribution1 = new NormalDistribution(mean1, sd1);
    NormalDistribution normalDistribution2 = new NormalDistribution(mean2, sd2);

    double min = Math.min(mean1 - 6 * sd1, mean2 - 6 * sd2);
    double max = Math.max(mean1 + 6 * sd1, mean2 + 6 * sd2);
    double range = max - min;

    int resolution = (int) (range/Math.min(sd1, sd2));

    double partwidth = range / resolution;

    double intersectionArea = 0;

    int begin = (int)((Math.max(mean1 - 6 * sd1, mean2 - 6 * sd2)-min)/partwidth);
    int end = (int)((Math.min(mean1 + 6 * sd1, mean2 + 6 * sd2)-min)/partwidth);

    /// Divide the range into N partitions
    for (int ii = begin; ii < end; ii++) {

        double partMin = partwidth * ii;
        double partMax = partwidth * (ii + 1);

        double areaOfDist1 = normalDistribution1.probability(partMin, partMax);
        double areaOfDist2 = normalDistribution2.probability(partMin, partMax);

        intersectionArea += Math.min(areaOfDist1, areaOfDist2);
    }

    return intersectionArea;

}

0

আমি মনে করি ম্যাটল্যাব-এ এর মতো কিছু সমাধান হতে পারে:

[overlap] = calc_overlap_twonormal(2,2,0,1,-20,20,0.01)

% numerical integral of the overlapping area of two normal distributions:
% s1,s2...sigma of the normal distributions 1 and 2
% mu1,mu2...center of the normal distributions 1 and 2
% xstart,xend,xinterval...defines start, end and interval width
% example: [overlap] = calc_overlap_twonormal(2,2,0,1,-10,10,0.01)

function [overlap2] = calc_overlap_twonormal(s1,s2,mu1,mu2,xstart,xend,xinterval)

clf
x_range=xstart:xinterval:xend;
plot(x_range,[normpdf(x_range,mu1,s1)' normpdf(x_range,mu2,s2)']);
hold on
area(x_range,min([normpdf(x_range,mu1,s1)' normpdf(x_range,mu2,s2)']'));
overlap=cumtrapz(x_range,min([normpdf(x_range,mu1,s1)' normpdf(x_range,mu2,s2)']'));
overlap2 = overlap(end);

[overlap] = calc_overlap_twonormal(2,2,0,1,-10,10,0.01) 

কমপক্ষে আমি এই পিডিএফ এ চিত্র 1 এর নীচে দেওয়া 0.8026 মানটি পুনরুত্পাদন করতে পারি ।

সুনির্দিষ্ট হওয়ার জন্য আপনাকে কেবল সূচনা ও শেষ এবং অন্তর মানগুলি অভিযোজিত করতে হবে কারণ এটি কেবল একটি সংখ্যাসূচক সমাধান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.