Outlier checks identify observations that sit far away from the usual values.

Program

Play the script to change the distance limit and see how many values are flagged.

limit
outlier_flag.R
Replay: real traced execution (multi-file project)
limit <- 10
value <- c(42, 44, 43, 58)
center <- median(value)
distance <- abs(value - center)
flagged <- distance > limit
count <- sum(flagged)
label <- paste("outliers", count, sep = ":")
cat(label, "\n", sep = "")
limit <- 5
value <- c(42, 44, 43, 58)
center <- median(value)
distance <- abs(value - center)
flagged <- distance > limit
count <- sum(flagged)
label <- paste("outliers", count, sep = ":")
cat(label, "\n", sep = "")
limit <- 20
value <- c(42, 44, 43, 58)
center <- median(value)
distance <- abs(value - center)
flagged <- distance > limit
count <- sum(flagged)
label <- paste("outliers", count, sep = ":")
cat(label, "\n", sep = "")
  1. limit ← 10

    1limit <- 102value <- c(42, 44, 43, 58)
    values this step10limit
  2. value ← 42, 44, 43, 58

    1limit <- 102value <- c(42, 44, 43, 58)3center <- median(value)
    values this step42, 44, 43, 58value
  3. center ← 43.5

    2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)
    values this step43.5center42, 44, 43, 58value
  4. distance ← 1.5, 0.5, 0.5, 14.5

    3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limit
    values this step1.5, 0.5, 0.5, 14.5distance43.5center
  5. flagged ← FALSE, FALSE, FALSE, TRUE

    4distance <- abs(value - center)5flagged <- distance > limit6count <- sum(flagged)
    values this stepFALSE, FALSE, FALSE, TRUEflagged1.5, 0.5, 0.5, 14.5distance10limit
  6. count ← 1

    5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")
    values this step1count1 flagged valueflagged
  7. label ← outliers:1

    6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    values this stepoutliers:1label1count
  8. cat(label, " ", sep = "")

    7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    outputoutliers:1
    values this stepoutliers:1label
  1. limit ← 5

    1limit <- 52value <- c(42, 44, 43, 58)
    values this step5limit
  2. value ← 42, 44, 43, 58

    1limit <- 52value <- c(42, 44, 43, 58)3center <- median(value)
    values this step42, 44, 43, 58value
  3. center ← 43.5

    2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)
    values this step43.5center42, 44, 43, 58value
  4. distance ← 1.5, 0.5, 0.5, 14.5

    3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limit
    values this step1.5, 0.5, 0.5, 14.5distance43.5center
  5. flagged ← FALSE, FALSE, FALSE, TRUE

    4distance <- abs(value - center)5flagged <- distance > limit6count <- sum(flagged)
    values this stepFALSE, FALSE, FALSE, TRUEflagged1.5, 0.5, 0.5, 14.5distance5limit
  6. count ← 1

    5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")
    values this step1count1 flagged valueflagged
  7. label ← outliers:1

    6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    values this stepoutliers:1label1count
  8. cat(label, " ", sep = "")

    7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    outputoutliers:1
    values this stepoutliers:1label
  1. limit ← 20

    1limit <- 202value <- c(42, 44, 43, 58)
    values this step20limit
  2. value ← 42, 44, 43, 58

    1limit <- 202value <- c(42, 44, 43, 58)3center <- median(value)
    values this step42, 44, 43, 58value
  3. center ← 43.5

    2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)
    values this step43.5center42, 44, 43, 58value
  4. distance ← 1.5, 0.5, 0.5, 14.5

    3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limit
    values this step1.5, 0.5, 0.5, 14.5distance43.5center
  5. flagged ← FALSE, FALSE, FALSE, FALSE

    4distance <- abs(value - center)5flagged <- distance > limit6count <- sum(flagged)
    values this stepFALSE, FALSE, FALSE, FALSEflagged1.5, 0.5, 0.5, 14.5distance20limit
  6. count ← 0

    5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")
    values this step0countno flagged valuesflagged
  7. label ← outliers:0

    6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    values this stepoutliers:0label0count
  8. cat(label, " ", sep = "")

    7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")
    outputoutliers:0
    values this stepoutliers:0label
center `median(value)` gives a robust center for the values.
distance `abs(value - center)` measures how far each value is from the center.
flag `distance > limit` marks unusually distant observations.