Performs a median absolute deviation (MAD) test for outliers.

outlier_mad(
  x,
  mask = !is.na(x),
  threshold = c(1.5, 3),
  k = 1/qnorm(0.75),
  return.score = FALSE
)

Arguments

x

A vector of data.

mask

A logical vector that defines which values in x will used when computing statistics. Useful when a subset of quality-assured data is available. Default mask is non-NA Values.

threshold

A length-two vector identifying thresholds for "mild" and "extreme" outliers.

k

A scale factor, defined as the reciprocal of the 75th percentile of the underlying distribution of the data. Default assumes a normal distribution.

return.score

if TRUE, return the numeric outlier score. If FALSE, return an ordered factor classifying the observations as one of "not outlier" (1), "mild outlier" (2), or "extreme outlier" (3).

Details

the values of threshold identify the thresholds used to identify mild and extreme outliers, as a multiple of k * median(x). Default values are 1.5 for "mild" outliers and 3.0 for "extreme" outliers.

Examples

x = seq(0, 34, by = 0.25)*pi noise = rnorm(length(x), mean = 1, sd = 3) y = sin(x) + noise mask = noise < 1 outlier_mad(y)
#> [1] not outlier not outlier not outlier not outlier #> [5] not outlier not outlier not outlier not outlier #> [9] not outlier not outlier not outlier not outlier #> [13] mild outlier not outlier mild outlier not outlier #> [17] not outlier not outlier mild outlier not outlier #> [21] not outlier not outlier not outlier not outlier #> [25] not outlier not outlier not outlier not outlier #> [29] not outlier not outlier not outlier not outlier #> [33] mild outlier not outlier not outlier not outlier #> [37] not outlier not outlier mild outlier not outlier #> [41] not outlier not outlier not outlier not outlier #> [45] not outlier not outlier not outlier not outlier #> [49] not outlier not outlier mild outlier not outlier #> [53] mild outlier not outlier not outlier not outlier #> [57] not outlier not outlier not outlier not outlier #> [61] not outlier not outlier mild outlier mild outlier #> [65] not outlier not outlier not outlier not outlier #> [69] not outlier not outlier not outlier not outlier #> [73] not outlier not outlier not outlier not outlier #> [77] not outlier mild outlier not outlier not outlier #> [81] not outlier not outlier not outlier not outlier #> [85] not outlier not outlier not outlier not outlier #> [89] not outlier not outlier not outlier not outlier #> [93] mild outlier mild outlier extreme outlier not outlier #> [97] not outlier not outlier not outlier not outlier #> [101] not outlier not outlier not outlier not outlier #> [105] mild outlier not outlier not outlier not outlier #> [109] not outlier not outlier not outlier not outlier #> [113] not outlier mild outlier mild outlier not outlier #> [117] not outlier not outlier mild outlier mild outlier #> [121] mild outlier not outlier not outlier not outlier #> [125] not outlier mild outlier mild outlier not outlier #> [129] not outlier not outlier not outlier not outlier #> [133] not outlier not outlier not outlier not outlier #> [137] not outlier #> Levels: not outlier < not evaluated < mild outlier < extreme outlier
outlier_mad(y, mask)
#> [1] not outlier not outlier not outlier not outlier not outlier #> [6] not outlier not outlier not outlier not outlier not outlier #> [11] not outlier not outlier not outlier not outlier not outlier #> [16] not outlier not outlier not outlier mild outlier not outlier #> [21] not outlier not outlier not outlier not outlier not outlier #> [26] not outlier not outlier not outlier not outlier not outlier #> [31] not outlier not outlier mild outlier not outlier not outlier #> [36] not outlier not outlier not outlier not outlier not outlier #> [41] not outlier not outlier not outlier mild outlier mild outlier #> [46] not outlier not outlier not outlier not outlier not outlier #> [51] mild outlier not outlier mild outlier not outlier not outlier #> [56] not outlier not outlier not outlier not outlier not outlier #> [61] not outlier not outlier not outlier mild outlier not outlier #> [66] not outlier not outlier not outlier not outlier not outlier #> [71] not outlier not outlier not outlier not outlier not outlier #> [76] not outlier not outlier not outlier not outlier not outlier #> [81] not outlier not outlier not outlier mild outlier not outlier #> [86] not outlier not outlier not outlier not outlier not outlier #> [91] not outlier not outlier mild outlier not outlier mild outlier #> [96] not outlier not outlier not outlier not outlier not outlier #> [101] mild outlier not outlier not outlier not outlier mild outlier #> [106] not outlier not outlier not outlier not outlier not outlier #> [111] not outlier not outlier not outlier mild outlier mild outlier #> [116] not outlier not outlier not outlier mild outlier not outlier #> [121] not outlier not outlier not outlier not outlier not outlier #> [126] mild outlier mild outlier mild outlier not outlier not outlier #> [131] not outlier not outlier not outlier not outlier not outlier #> [136] not outlier not outlier #> Levels: not outlier < not evaluated < mild outlier < extreme outlier
outlier_mad(y, mask, threshold = c(1, 2))
#> [1] not outlier not outlier not outlier not outlier #> [5] not outlier not outlier not outlier not outlier #> [9] not outlier not outlier not outlier not outlier #> [13] not outlier not outlier mild outlier not outlier #> [17] not outlier mild outlier mild outlier not outlier #> [21] not outlier not outlier not outlier not outlier #> [25] not outlier not outlier mild outlier not outlier #> [29] mild outlier not outlier not outlier not outlier #> [33] mild outlier mild outlier not outlier mild outlier #> [37] mild outlier not outlier not outlier not outlier #> [41] not outlier not outlier not outlier mild outlier #> [45] mild outlier not outlier mild outlier not outlier #> [49] mild outlier not outlier mild outlier mild outlier #> [53] extreme outlier not outlier not outlier not outlier #> [57] mild outlier mild outlier not outlier not outlier #> [61] not outlier not outlier mild outlier mild outlier #> [65] not outlier mild outlier not outlier not outlier #> [69] not outlier mild outlier not outlier not outlier #> [73] not outlier not outlier not outlier not outlier #> [77] not outlier not outlier not outlier not outlier #> [81] not outlier not outlier mild outlier mild outlier #> [85] not outlier not outlier not outlier not outlier #> [89] not outlier not outlier not outlier mild outlier #> [93] extreme outlier mild outlier extreme outlier mild outlier #> [97] mild outlier not outlier not outlier not outlier #> [101] mild outlier not outlier mild outlier not outlier #> [105] extreme outlier mild outlier not outlier mild outlier #> [109] not outlier not outlier not outlier not outlier #> [113] not outlier extreme outlier mild outlier not outlier #> [117] mild outlier not outlier extreme outlier not outlier #> [121] not outlier not outlier not outlier not outlier #> [125] mild outlier mild outlier mild outlier mild outlier #> [129] not outlier not outlier not outlier not outlier #> [133] not outlier mild outlier not outlier not outlier #> [137] not outlier #> Levels: not outlier < not evaluated < mild outlier < extreme outlier
outlier_mad(y, return.score = TRUE)
#> [1] 0.2314645995 0.0947637520 0.0575175871 0.3936732779 0.3437682166 #> [6] 1.2149814820 0.6866105086 0.0000000000 0.1246276845 0.3864825994 #> [11] 0.4025282126 1.3911868849 1.7529099288 0.3094079663 2.0827285520 #> [16] 0.2108717697 1.1618287799 0.6714202344 1.6931557832 0.4505832465 #> [21] 0.1180864315 0.0443212058 0.8648311495 0.3141102559 0.1528699894 #> [26] 0.7839393063 0.8051535504 0.3201000048 0.8029773475 1.1759172665 #> [31] 0.0878984723 0.4710661970 2.7806518401 0.6608986202 0.1556800565 #> [36] 0.5702826755 0.6813890272 0.2431872659 1.7294174842 0.3279179559 #> [41] 1.4671608948 0.3498908317 0.1667633276 1.3211952787 1.1805302560 #> [46] 0.8147497259 0.9839440873 1.3309971414 0.5831505341 0.5031116163 #> [51] 1.5996728757 1.1392271350 2.8207153623 0.9673685108 1.0572106328 #> [56] 0.0006708833 0.5512673226 1.1402939407 0.4128855942 0.1345149042 #> [61] 0.2957279815 0.3096446972 1.9801519979 1.7018327735 0.0683346591 #> [66] 1.0777717800 0.1981310935 0.1061336908 1.0735084581 0.9842693813 #> [71] 1.1782488014 0.1478167117 0.1772672737 0.5017020594 0.0545828393 #> [76] 0.6802038036 0.1146646284 1.7497434042 0.9648601769 0.0848125295 #> [81] 0.4482414094 0.1439251397 1.0020045793 1.2687825093 0.1261121325 #> [86] 0.0686522896 0.9676177862 1.0519995771 0.5380279298 1.4933837972 #> [91] 0.1409397998 0.9958591954 2.7976948576 2.0949622780 3.6953285030 #> [96] 0.5764077169 0.7127748261 0.3093789099 0.5604815252 0.8429077587 #> [101] 1.2301863459 0.4026535622 0.8739886391 0.3616689886 2.7763162945 #> [106] 0.7366915941 0.3450800114 1.0031191835 0.6744897502 0.1429663404 #> [111] 0.8799776280 0.4453750586 0.3865158865 1.8382674920 1.6244542236 #> [116] 0.0714781615 0.9388848755 0.2682875378 1.7604787345 1.8751365841 #> [121] 1.5410352634 0.0085166706 1.2518105131 0.1107623124 0.6664259062 #> [126] 1.7302114207 1.5312826878 1.3036292068 0.7789469349 1.2213621428 #> [131] 0.0762356537 0.9644159393 0.9322482612 0.8466970146 0.6334063805 #> [136] 0.6353761459 0.2632245201