Adding outlier to a matrix

Hi , I have a matrix of intensities (n*p). I want to add an outlier to it. Do you have any idea about how to simulate an outlier? I was thinking to take the mean of matrix and then multiply it to some very high value?
Do you have any idea ?

 Accepted Answer

I suggest:
M = rand(4,5); % Create data
Msts = [mean(M(:)) std(M(:))];
Outlier = Msts(1)+5*Msts(2);
Define the outlier by a multiple of the standard deviation from the mean. An value of 5*std is quite far out.

8 Comments

It does add a value. If I have a matrix of lets say 30 samples (number of sample* number of points) I want to add a row (an outlier sample) which has the dimension of 1%number of points
This works:
OutRow = Msts(1)+rand(1,30).*5*Msts(2);
I chose 5*std, increase the ‘5’ to get values even further out.
Niki
Niki on 22 May 2014
Edited: Niki on 22 May 2014
This generates a random noise. I am not interested in noise Please find attached a example data If you plot it, you can see how they look like >>plot(X')
I thought you wanted a random vector of outliers.
This will give you a row of constants:
OutRow = Msts(1)+ones(1,30).*5*Msts(2);
Here’s a version using your ‘X’ array from your ‘example.m’ file:
load('example.mat')
OutsX = mean(X(:)) + ones(1,size(X,2)).*5*std(X(:));
figure(1)
mesh([X; OutsX])
Thanks BUT it is not what I am looking for. creating a constant vector is not very hard.
I definitely want a random vector not a constant as your latter post. I want to have more or less the same shape as the example I gave you and generated based on that data. If we have a constant value in a data set, it is very easy to detect it and discard it. It should be an outlier which you cannot detect it easily by naked eye :-)
See if this does what you want:
load('example.mat')
OutsXR = mean(X,2) + 5*std(X,[],2);
figure(1)
plot([X OutsXR])
Not that one but this one helps
OutsXR = mean(X,1) + 5*std(X,[],1);
however, I accept your answer Thanks
My pleasure, and thanks!

Sign in to comment.

More Answers (1)

Roger Wohlwend
Roger Wohlwend on 22 May 2014
Actually you answered your question yourself. Instead of the mean I would use the maximum value of the matrix. Multiply that number by a certain value. That's all. It is quite easy.

1 Comment

In fact, I want to know whether it is scientifically correct or not? It is not a number. As I explained it is a matrix of n*p so I wont have a value as outlier but a row which corresponds as an outlier
On the other hand, do you know any way to show it as a outlier ?

Sign in to comment.

Tags

Asked:

on 22 May 2014

Commented:

on 22 May 2014

Community Treasure Hunt

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

Start Hunting!