İlk yaklaşım
Bu yaklaşımı Mathematica'da deneyebilirsiniz.
Bazı iki değişkenli veriler oluşturalım:
data = Table[RandomVariate[BinormalDistribution[{50, 50}, {5, 10}, .8]], {1000}];
O zaman bu paketi yüklememiz gerekiyor:
Needs["MultivariateStatistics`"]
Ve şimdi:
ellPar=EllipsoidQuantile[data, {0.9}]
% 90 güven elipsini tanımlayan bir çıktı verir. Bu çıktıdan elde ettiğiniz değerler aşağıdaki formattadır:
{Ellipsoid[{x1, x2}, {r1, r2}, {{d1, d2}, {d3, d4}}]}
x1 ve x2 ortadaki elipsin, r1 ve r2'nin yarı eksen yarıçaplarını ve d1, d2, d3 ve d4'ün hizalama yönünü belirttiği noktayı belirtir.
Bunu da çizebilirsiniz:
Show[{ListPlot[data, PlotRange -> {{0, 100}, {0, 100}}, AspectRatio -> 1], Graphics[EllipsoidQuantile[data, 0.9]]}]
Elipsin genel parametrik formu:
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]}
Ve bu şekilde çizebilirsiniz:
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}}]
Saf geometrik bilgilere dayanarak bir kontrol yapabilirsiniz: elipsin merkezi (ellPar [[1,1]]) ile veri noktanız arasındaki Öklid mesafesi elips merkezi ile kenarlığı arasındaki mesafeden büyükse elips (açıkçası, noktanızın bulunduğu yönde), bu veri noktası elipsin dışındadır.
İkinci yaklaşım
Bu yaklaşım, düzgün çekirdek dağılımına dayanmaktadır.
Bunlar, verilerinize benzer şekilde dağıtılan bazı verilerdir:
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];
Bu veri değerleri üzerinde düzgün bir çekirdek dağılımı elde ediyoruz:
skd = SmoothKernelDistribution[data];
Her veri noktası için sayısal bir sonuç elde ederiz:
eval = Table[{data[[i]], PDF[skd, data[[i]]]}, {i, Length[data]}];
Bir eşiği düzeltiriz ve bu eşikten daha yüksek olan tüm verileri seçeriz:
threshold = 1.2;
dataIn = Select[eval, #1[[2]] > threshold &][[All, 1]];
Burada bölgenin dışında kalan verileri alıyoruz:
dataOut = Complement[data, dataIn];
Ve şimdi tüm verileri çizebiliriz:
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]]
Yeşil renkli noktalar eşiğin üstündeki noktalardır ve kırmızı renkli noktalar eşiğin altındaki noktalardır.