पहले दृष्टिकोण
आप इस दृष्टिकोण को मैथेमेटिका में आज़मा सकते हैं।
आइए कुछ बीवरिएट डेटा उत्पन्न करें:
data = Table[RandomVariate[BinormalDistribution[{50, 50}, {5, 10}, .8]], {1000}];
फिर हमें इस पैकेज को लोड करने की आवश्यकता है:
Needs["MultivariateStatistics`"]
और अब:
ellPar=EllipsoidQuantile[data, {0.9}]
एक आउटपुट देता है जो 90% आत्मविश्वास को ग्रहण करता है। इस आउटपुट से आपको मिलने वाले मूल्य निम्न प्रारूप में हैं:
{Ellipsoid[{x1, x2}, {r1, r2}, {{d1, d2}, {d3, d4}}]}
एक्स 1 और एक्स 2 उस बिंदु को निर्दिष्ट करते हैं जिस पर केंद्रित, आर 1 और आर 2 में दीर्घवृत्त अर्ध-अक्ष राडाइ निर्दिष्ट करते हैं, और डी 1, डी 2, डी 3 और डी 4 संरेखण दिशा निर्दिष्ट करते हैं।
आप यह भी प्लॉट कर सकते हैं:
Show[{ListPlot[data, PlotRange -> {{0, 100}, {0, 100}}, AspectRatio -> 1], Graphics[EllipsoidQuantile[data, 0.9]]}]
दीर्घवृत्त का सामान्य पैरामीट्रिक रूप है:
ell[t_, xc_, yc_, a_, b_, angle_] := {xc + a Cos[t] Cos[angle] - b Sin[t] Sin[angle],
yc + a Cos[t] Sin[angle] + b Sin[t] Cos[angle]}
और आप इसे इस तरह से प्लॉट कर सकते हैं:
ParametricPlot[
ell[t, ellPar[[1, 1, 1]], ellPar[[1, 1, 2]], ellPar[[1, 2, 1]], ellPar[[1, 2, 2]],
ArcTan[ellPar[[1, 3, 1, 2]]/ellPar[[1, 3, 1, 1]]]], {t, 0, 2 \[Pi]},
PlotRange -> {{0, 100}, {0, 100}}]
आप शुद्ध ज्यामितीय सूचना के आधार पर एक जांच कर सकते हैं: यदि यूलिपिड के केंद्र (ellPar [[1,1]]) के बीच यूक्लिडियन दूरी और आपके डेटा बिंदु दीर्घवृत्त के केंद्र और सीमा के बीच की दूरी से बड़ा है दीर्घवृत्त (जाहिर है, उसी दिशा में जिसमें आपका बिंदु स्थित है), तो वह डेटा बिंदु दीर्घवृत्त के बाहर है।
दूसरा तरीका
यह दृष्टिकोण चिकनी कर्नेल वितरण पर आधारित है।
ये कुछ डेटा आपके डेटा के समान तरीके से वितरित किए जाते हैं:
data1 = RandomVariate[BinormalDistribution[{.3, .7}, {.2, .3}, .8], 500];
data2 = RandomVariate[BinormalDistribution[{.6, .3}, {.4, .15}, .8], 500];
data = Partition[Flatten[Join[{data1, data2}]], 2];
हम इन डेटा मूल्यों पर एक चिकनी कर्नेल वितरण प्राप्त करते हैं:
skd = SmoothKernelDistribution[data];
हम प्रत्येक डेटा बिंदु के लिए एक संख्यात्मक परिणाम प्राप्त करते हैं:
eval = Table[{data[[i]], PDF[skd, data[[i]]]}, {i, Length[data]}];
हम एक सीमा तय करते हैं और हम उन सभी डेटा का चयन करते हैं जो इस सीमा से अधिक हैं:
threshold = 1.2;
dataIn = Select[eval, #1[[2]] > threshold &][[All, 1]];
यहां हमें वह डेटा मिलता है जो इस क्षेत्र के बाहर है:
dataOut = Complement[data, dataIn];
और अब हम सभी डेटा को प्लॉट कर सकते हैं:
Show[ContourPlot[Evaluate@PDF[skd, {x, y}], {x, 0, 1}, {y, 0, 1}, PlotRange -> {{0, 1}, {0, 1}}, PlotPoints -> 50],
ListPlot[dataIn, PlotStyle -> Darker[Green]],
ListPlot[dataOut, PlotStyle -> Red]]
हरे रंग के बिंदु वे दहलीज के ऊपर होते हैं और लाल रंग के बिंदु दहलीज के नीचे होते हैं।