Delete outliers in each column of a matrix

2 vues (au cours des 30 derniers jours)
Ana Gabriela Guedes le 19 Juil 2021
Hi!
I have a matrix in which each line relates to a trial and each column is a specific moment I am analysing. I want to get the zscore for each column and, when it is > 3, I want to delete all the trial.
So, if I have a zscore > 3 in the position (120,3) of the matriz, I would delete all the 120th line ( all the values in (120,1); (120,2);(120,3) and (120,4)) .
I tried to use the following code but for some reason it is giving me the error: A null assignment can have only one non-colon index.
Error in NameOfTheScript > removeOutliers (line 72)
inicialVec(i,1) = [ ];
The code I'm trying to use is the following one (I'm using it in a function because I need to apply it a few times to different matrixes:
% %The inicial matrix I'm using its appended to this question
function finalMatrix = removeOutliers(inicialMatrix)
z = abs(zscore(inicialMatrix, 0, 1));
column1 = inicialMatrix(:,1);
column2 = inicialMatrix(:,2);
column3 = inicialMatrix(:,3);
column4 = inicialMatrix(:,4);
z1 = abs(zscore(column1, 0, 1));
z2 = abs(zscore(column2, 0, 1));
z3 = abs(zscore(column3, 0, 1));
z4 = abs(zscore(column4, 0, 1));
for i = 1:size(inicialMatrix,1)
if (z1(i) > 3 || z2(i) > 3 || z3(i) > 3 || z4(i) > 3)
inicialMatrix(i,1) = [];
inicialMatrix(i,2) = [];
inicialMatrix(i,3) = [];
inicialMatrix(i,4) = [];
end
end
finalMatrix = inicialMatrix;
end
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Réponses (2)

Mohammad Sami le 19 Juil 2021
You can simplify your code like this.
% generate test data
initmatrix = rand(100,100);
initmatrix(12,99) = 1000;
initmatrix(100,20) = 1000;
% actual code
z = abs(zscore(initmatrix,0,1));
r = any(z>3,2);
find(r)
ans = 2×1
12 100
z(r,:) = [] % delete rows which contain z>3 in any of the column
z = 98×100
0.4486 1.6351 0.8696 1.5466 1.2569 0.3750 0.6603 1.4480 0.5331 1.6135 0.4029 0.1502 1.3191 1.5485 1.3806 1.9509 0.7581 1.2962 0.2115 0.0948 1.1977 0.7170 0.7267 1.8464 1.4979 1.1862 0.0955 1.3534 0.7246 0.0227 1.3435 0.5270 0.7838 0.4420 0.8637 1.6983 0.7365 1.5835 1.7832 1.1995 0.8098 0.3783 0.6114 0.7289 1.3684 0.5199 0.1479 1.6011 1.1674 0.1008 1.6536 0.9117 0.2892 0.0628 0.8930 1.5835 1.6276 0.3462 1.2780 1.6239 1.3840 0.9861 0.6293 0.7125 1.1208 0.6858 1.0796 1.0425 0.3800 0.6624 0.4181 0.0222 1.6590 1.2461 1.1508 0.5898 0.3082 0.1390 0.0944 0.1030 0.2596 0.9520 1.4091 1.0283 0.3187 1.2428 0.7697 1.1105 0.5035 0.3883 0.9446 1.2221 0.5471 0.7634 0.1452 0.4226 0.8562 0.3720 1.6256 1.3693 1.1051 0.5899 1.6194 1.4136 0.8398 1.0892 1.6172 1.2361 1.5738 0.1038 0.8252 0.3551 0.0096 0.1220 1.2095 0.6092 1.1176 0.3401 1.5413 0.0468 0.7778 0.7851 1.0830 0.8929 0.8980 1.7098 0.5250 0.3496 0.6848 1.0156 0.3100 1.0994 0.5688 0.6123 1.0206 1.4735 1.1513 0.8435 1.4876 0.0977 0.3021 0.2839 1.1523 0.7655 1.6208 0.3270 1.0914 1.4994 0.0605 0.8266 0.5422 1.3897 1.1328 1.2168 0.6141 1.4902 0.3619 1.1045 0.1055 0.2017 1.1860 0.6501 0.6592 0.8164 1.7778 1.3261 0.4172 0.0283 1.2942 0.1023 0.5454 1.0562 1.1242 0.2077 1.1497 0.4685 0.3934 1.3274 1.7776 0.5990 1.3802 1.3604 0.9775 0.4382 0.9015 1.4396 1.3423 1.1144 1.0314 0.8868 1.6298 0.9499 1.0735 1.0541 1.1243 1.4728 0.3105 1.4822 0.7873 0.1030 1.8047 1.8457 1.2293 1.3497 1.0004 0.8491 1.3042 0.4379 0.1624 0.9576 1.1294 0.9827 0.5206 0.5442 0.9353 1.1303 0.2730 0.6589 1.8006 0.9030 0.8461 0.9939 1.3696 1.0230 0.6484 1.0853 0.3890 1.3706 1.5768 0.0992 0.0129 0.6445 0.9603 1.2165 1.6887 1.2893 1.9955 0.8172 0.2980 0.2460 0.4145 1.2895 0.1903 0.7916 0.2410 0.7043 1.6700 0.5196 1.3627 0.5251 0.8479 0.1703 0.0975 0.0517 1.1446 0.7058 1.0924 1.4912 0.2258 0.0979 1.6034 0.4135 1.3310 1.0421 0.4732 1.1292 1.1430 0.5628 0.3155 0.7439 1.5187 0.7845 0.5416 0.9036 1.0819 0.8406 0.7669 0.8888 0.3895 0.7547 1.3280 1.4624 0.0907 0.2329 1.3002 0.7398 1.5080 1.6224 0.4189 0.0986 1.8357 1.2939 0.4354 1.3778 1.3226 0.4811 0.3108 0.8923 1.1767 0.1574
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Image Analyst le 19 Juil 2021
Why don't you just use the build-in isoutlier() function?
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Catégories

En savoir plus sur NaNs dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by