Wie kann man in MATLAB effizient Korrelationen finden und Punkte außerhalb des 3-Sigma-Bereichs verwerfen?
-
19-09-2019 - |
Frage
Ich habe eine Datendatei m.txt
das sieht ungefähr so aus (mit viel mehr Punkten):
286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880
Einige der Werte (wie 338.227797
) Sind sehr verschieden von den Werten, die ich im Allgemeinen erwarte (kleinere Zahlen).
Ich denke also, dass ich alle Punkte entfernen werde, die außerhalb der liegen
3-sigma range
.Wie kann ich das in MATLAB machen?Das größere Problem besteht außerdem darin, dass diese Datei eine separate Datei hat
t.txt
damit verbunden, der die entsprechenden Zeitwerte für diese Zahlen speichert.Daher muss ich die entsprechenden Zeitwerte aus dem entfernent.txt
Datei auch.
Ich lerne immer noch MATLAB und weiß, dass es dafür eine gute Möglichkeit gäbe (besser als die Speicherung von Indizes der Elemente, aus denen entfernt wurde). m.txt
und dann diese Elemente aus dem entfernen t.txt
Datei)
Lösung
@Amro liegt nah dran, aber FIND ist nicht erforderlich (suchen Sie nach logischen Subskriptionen) und Sie müssen den Mittelwert für einen echten +/-3-Sigma-Bereich einbeziehen.Ich würde mit Folgendem vorgehen:
%# load files
m = load('m.txt');
t = load('t.txt');
%# find values within range
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;
%# keep values within range
m = m(I);
t = t(I);
Andere Tipps
%# load files
m = load('m.txt');
t = load('t.txt');
%# find outliers indices
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );
%# remove them from both data and time values
m(idx) = [];
t(idx) = [];