Diagnostics and Quality Checks
Outlier Flag
Check Distance From Center
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.
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 = "")
limit ← 10
1limit <- 102value <- c(42, 44, 43, 58)values this step10limitvalue ← 42, 44, 43, 58
1limit <- 102value <- c(42, 44, 43, 58)3center <- median(value)values this step42, 44, 43, 58valuecenter ← 43.5
2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)values this step43.5center42, 44, 43, 58valuedistance ← 1.5, 0.5, 0.5, 14.5
3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limitvalues this step1.5, 0.5, 0.5, 14.5distance43.5centerflagged ← 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.5distance10limitcount ← 1
5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")values this step1count1 flagged valueflaggedlabel ← outliers:1
6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")values this stepoutliers:1label1countcat(label, " ", sep = "")
7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")outputoutliers:1values this stepoutliers:1label
limit ← 5
1limit <- 52value <- c(42, 44, 43, 58)values this step5limitvalue ← 42, 44, 43, 58
1limit <- 52value <- c(42, 44, 43, 58)3center <- median(value)values this step42, 44, 43, 58valuecenter ← 43.5
2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)values this step43.5center42, 44, 43, 58valuedistance ← 1.5, 0.5, 0.5, 14.5
3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limitvalues this step1.5, 0.5, 0.5, 14.5distance43.5centerflagged ← 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.5distance5limitcount ← 1
5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")values this step1count1 flagged valueflaggedlabel ← outliers:1
6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")values this stepoutliers:1label1countcat(label, " ", sep = "")
7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")outputoutliers:1values this stepoutliers:1label
limit ← 20
1limit <- 202value <- c(42, 44, 43, 58)values this step20limitvalue ← 42, 44, 43, 58
1limit <- 202value <- c(42, 44, 43, 58)3center <- median(value)values this step42, 44, 43, 58valuecenter ← 43.5
2value <- c(42, 44, 43, 58)3center <- median(value)4distance <- abs(value - center)values this step43.5center42, 44, 43, 58valuedistance ← 1.5, 0.5, 0.5, 14.5
3center <- median(value)4distance <- abs(value - center)5flagged <- distance > limitvalues this step1.5, 0.5, 0.5, 14.5distance43.5centerflagged ← 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.5distance20limitcount ← 0
5flagged <- distance > limit6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")values this step0countno flagged valuesflaggedlabel ← outliers:0
6count <- sum(flagged)7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")values this stepoutliers:0label0countcat(label, " ", sep = "")
7label <- paste("outliers", count, sep = ":")8cat(label, "\n", sep = "")outputoutliers:0values 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.