Code covered by the BSD License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

### Highlights from deleteoutliers

4.73333
4.7 | 15 ratings Rate this file 105 Downloads (last 30 days) File Size: 2.54 KB File ID: #3961 Version: 1.1

# deleteoutliers

### Brett Shoelson (view profile)

15 Sep 2003 (Updated )

For input vector A, returns a vector B with outliers removed.

File Information
Description

[B, IDX, OUTLIERS] = DELETEOUTLIERS(A, ALPHA, REP)

For input vector A, returns a vector B with outliers (at the significance level alpha) removed. Also, optional output argument idx returns the indices in A of outlier values. Optional output argument outliers returns the outlying values in A.

ALPHA is the significance level for determination of outliers. If not provided, alpha defaults to 0.05.

REP is an optional argument that forces the replacement of removed elements with NaNs to preserve the length of a. (Thanks for the suggestion, Urs.)

This is an iterative implementation of the Grubbs Test that tests one value at a time. In any given iteration, the tested value is either the highest value, or the lowest, and is the value that is furthest from the sample mean. Infinite elements are discarded if rep is 0, or replaced with NaNs if rep is 1 (thanks again, Urs).

Appropriate application of the test requires that data can be reasonably approximated by a normal distribution. For reference, see:
1) "Procedures for Detecting Outlying Observations in Samples," by F.E. Grubbs; Technometrics, 11-1:1--21; Feb., 1969, and
2) _Outliers in Statistical Data_, by V. Barnett and T. Lewis; Wiley Series in Probability and Mathematical Statistics;
John Wiley & Sons; Chichester, 1994.

A good online discussion of the test is also given in NIST's Engineering Statistics Handbook:
http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h.htm

ex:
[B,idx,outliers] = deleteoutliers([1.1 1.3 0.9 1.2 -6.4 1.2 0.94 4.2 1.3 1.0 6.8 1.3 1.2], 0.05)
returns:
B = 1.1000 1.3000 0.9000 1.2000 1.2000 0.9400 1.3000 1.0000 1.3000 1.2000
idx = 5 8 11
outliers = -6.4000 4.2000 6.8000

ex:
B = deleteoutliers([1.1 1.3 0.9 1.2 -6.4 1.2 0.94 4.2 1.3 1.0 6.8 1.3 1.2 Inf 1.2 -Inf 1.1], 0.05, 1)
returns:
B = 1.1000 1.3000 0.9000 1.2000 NaN 1.2000 0.9400 NaN 1.3000 1.0000 NaN 1.3000 1.2000 NaN 1.2000 NaN 1.1000

Written by Brett Shoelson, Ph.D.
brett.shoelson@mathworks.com
9/10/03
Modified 9/23/03 to address suggestions by Urs Schwartz.
Modified 10/08/03 to avoid errors caused by duplicate "maxvals."
(Thanks to Valeri Makarov for modification suggestion.)

Acknowledgements

This file inspired Delete Outliers2.

Required Products Statistics and Machine Learning Toolbox
MATLAB release MATLAB 6.5 (R13)
Tags for This File   Please login to tag files.
Comments and Ratings (22)
27 Apr 2016 Salim Arslan

### Salim Arslan (view profile)

01 Apr 2016 Antonio Cabrera García-Doncel

### Antonio Cabrera García-Doncel (view profile)

Great work

28 Mar 2016 Tanmay Rajpathak

### Tanmay Rajpathak (view profile)

11 Mar 2016 Brett Shoelson

### Brett Shoelson (view profile)

@Anna: sorry I missed this for a year! :) REP should be true or false. Default is false. I could have described that more clearly.
Brett

Comment only
24 Mar 2015 Anna Karlsson

### Anna Karlsson (view profile)

Great

Comment only
24 Mar 2015 Anna Karlsson

### Anna Karlsson (view profile)

This maybe is clear to everyone else, but what should you have for input on REP if you want to use it?

Comment only
23 Jun 2014 Muhammad khan

### Muhammad khan (view profile)

Nice work....

Comment only
06 May 2014 Brett Shoelson

### Brett Shoelson (view profile)

@Hussein,
This is designed to work on a vector of inputs. If you can cast your 3D points as a vector in some meaningful fashion--as distances from a central point, perhaps?--then it would work.
Brett

Comment only
06 May 2014 Hussein

### Hussein (view profile)

Can this work on 3d points?

Comment only
07 Feb 2014 Nathan Orloff

### Nathan Orloff (view profile)

02 Oct 2012 Brett Baker

### Brett Baker (view profile)

Thanks Brett! Works great. Love the improvements made to it as well. You saved me a chunk of time! I appreciate the sharing!
-Brett

27 Jan 2012 Reza Farrahi Moghaddam

### Reza Farrahi Moghaddam (view profile)

13 Jun 2011 Mehdi Moghaddam

### Mehdi Moghaddam (view profile)

unfortunately doesnt work for my data which has a trend in it and I dont want to remove it from my data

Comment only
01 Oct 2009 Marcin

### Marcin (view profile)

Very good. I compared your results with the one from:
on my data and got the same results. Good work!

19 Jan 2009 Hanna Modin

### Hanna Modin (view profile)

Thank you for a nice implementation of Grubbs test! If I might suggest an improvement that would be to make the test work with other than vectors, e.g. to remove outliers from each row in a matrix separately

16 May 2007 dali kaafar
09 Oct 2005 s b

very useful!!!!

16 Sep 2005 James J. Cai
07 Dec 2004 Vadim Moldavsky

Great

25 Oct 2004 Torsten Staab

Nice job!

25 Nov 2003 Effendi Widjaja
22 Sep 2003 Urs Schwarz (us)

very nice, brett. a few remarks re OUTPUT: there should be an option to replace outlieres with nans (to keep i/o vecs the same length); re INPUT: the option <ul> shows up in the help but doesn't seem to have a meaning (yet?); re PROCESSING: 1) nans are cut away (why? we don't know what a nan is in any context), 2) +-infs, on the other hand, are not (?).