Residual checks identify observations where the model missed by more than the allowed tolerance.

Program

Play the script to change the tolerance and count flagged residuals.

tolerance
residual_flags.R
Replay: real traced execution (multi-file project)
tolerance <- 3
actual <- c(52, 64, 70, 81)
predicted <- c(52, 61, 70, 79)
residual <- actual - predicted
flagged <- abs(residual) > tolerance
count <- sum(flagged)
label <- paste("flags", count, sep = ":")
cat(label, "\n", sep = "")
tolerance <- 2
actual <- c(52, 64, 70, 81)
predicted <- c(52, 61, 70, 79)
residual <- actual - predicted
flagged <- abs(residual) > tolerance
count <- sum(flagged)
label <- paste("flags", count, sep = ":")
cat(label, "\n", sep = "")
tolerance <- 5
actual <- c(52, 64, 70, 81)
predicted <- c(52, 61, 70, 79)
residual <- actual - predicted
flagged <- abs(residual) > tolerance
count <- sum(flagged)
label <- paste("flags", count, sep = ":")
cat(label, "\n", sep = "")
  1. tolerance ← 3

    1tolerance <- 32actual <- c(52, 64, 70, 81)
    values this step3tolerance
  2. actual ← 52, 64, 70, 81

    1tolerance <- 32actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)
    values this step52, 64, 70, 81actual
  3. predicted ← 52, 61, 70, 79

    2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted
    values this step52, 61, 70, 79predicted
  4. residual ← 0, 3, 0, 2

    3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerance
    values this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predicted
  5. flagged ← FALSE, FALSE, FALSE, FALSE

    4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)
    values this stepFALSE, FALSE, FALSE, FALSEflagged0, 3, 0, 2residual3tolerance
  6. count ← 0

    5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")
    values this step0countno flagged rowsflagged
  7. label ← flags:0

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

    7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")
    outputflags:0
    values this stepflags:0label
  1. tolerance ← 2

    1tolerance <- 22actual <- c(52, 64, 70, 81)
    values this step2tolerance
  2. actual ← 52, 64, 70, 81

    1tolerance <- 22actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)
    values this step52, 64, 70, 81actual
  3. predicted ← 52, 61, 70, 79

    2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted
    values this step52, 61, 70, 79predicted
  4. residual ← 0, 3, 0, 2

    3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerance
    values this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predicted
  5. flagged ← FALSE, TRUE, FALSE, FALSE

    4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)
    values this stepFALSE, TRUE, FALSE, FALSEflagged0, 3, 0, 2residual2tolerance
  6. count ← 1

    5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")
    values this step1count1 flagged rowflagged
  7. label ← flags:1

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

    7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")
    outputflags:1
    values this stepflags:1label
  1. tolerance ← 5

    1tolerance <- 52actual <- c(52, 64, 70, 81)
    values this step5tolerance
  2. actual ← 52, 64, 70, 81

    1tolerance <- 52actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)
    values this step52, 64, 70, 81actual
  3. predicted ← 52, 61, 70, 79

    2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted
    values this step52, 61, 70, 79predicted
  4. residual ← 0, 3, 0, 2

    3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerance
    values this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predicted
  5. flagged ← FALSE, FALSE, FALSE, FALSE

    4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)
    values this stepFALSE, FALSE, FALSE, FALSEflagged0, 3, 0, 2residual5tolerance
  6. count ← 0

    5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")
    values this step0countno flagged rowsflagged
  7. label ← flags:0

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

    7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")
    outputflags:0
    values this stepflags:0label
residual A residual is the actual value minus the predicted value.
absolute error `abs(residual)` measures miss size without direction.
flag Rows beyond the tolerance deserve another look.