Regression Workflows
Residual Flags
Check Fit Errors
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.
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 = "")
tolerance ← 3
1tolerance <- 32actual <- c(52, 64, 70, 81)values this step3toleranceactual ← 52, 64, 70, 81
1tolerance <- 32actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)values this step52, 64, 70, 81actualpredicted ← 52, 61, 70, 79
2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predictedvalues this step52, 61, 70, 79predictedresidual ← 0, 3, 0, 2
3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerancevalues this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predictedflagged ← FALSE, FALSE, FALSE, FALSE
4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)values this stepFALSE, FALSE, FALSE, FALSEflagged0, 3, 0, 2residual3tolerancecount ← 0
5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")values this step0countno flagged rowsflaggedlabel ← flags:0
6count <- sum(flagged)7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")values this stepflags:0label0countcat(label, " ", sep = "")
7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")outputflags:0values this stepflags:0label
tolerance ← 2
1tolerance <- 22actual <- c(52, 64, 70, 81)values this step2toleranceactual ← 52, 64, 70, 81
1tolerance <- 22actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)values this step52, 64, 70, 81actualpredicted ← 52, 61, 70, 79
2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predictedvalues this step52, 61, 70, 79predictedresidual ← 0, 3, 0, 2
3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerancevalues this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predictedflagged ← FALSE, TRUE, FALSE, FALSE
4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)values this stepFALSE, TRUE, FALSE, FALSEflagged0, 3, 0, 2residual2tolerancecount ← 1
5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")values this step1count1 flagged rowflaggedlabel ← flags:1
6count <- sum(flagged)7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")values this stepflags:1label1countcat(label, " ", sep = "")
7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")outputflags:1values this stepflags:1label
tolerance ← 5
1tolerance <- 52actual <- c(52, 64, 70, 81)values this step5toleranceactual ← 52, 64, 70, 81
1tolerance <- 52actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)values this step52, 64, 70, 81actualpredicted ← 52, 61, 70, 79
2actual <- c(52, 64, 70, 81)3predicted <- c(52, 61, 70, 79)4residual <- actual - predictedvalues this step52, 61, 70, 79predictedresidual ← 0, 3, 0, 2
3predicted <- c(52, 61, 70, 79)4residual <- actual - predicted5flagged <- abs(residual) > tolerancevalues this step0, 3, 0, 2residual52, 64, 70, 81actual52, 61, 70, 79predictedflagged ← FALSE, FALSE, FALSE, FALSE
4residual <- actual - predicted5flagged <- abs(residual) > tolerance6count <- sum(flagged)values this stepFALSE, FALSE, FALSE, FALSEflagged0, 3, 0, 2residual5tolerancecount ← 0
5flagged <- abs(residual) > tolerance6count <- sum(flagged)7label <- paste("flags", count, sep = ":")values this step0countno flagged rowsflaggedlabel ← flags:0
6count <- sum(flagged)7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")values this stepflags:0label0countcat(label, " ", sep = "")
7label <- paste("flags", count, sep = ":")8cat(label, "\n", sep = "")outputflags:0values 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.