Formula Interfaces
Model Formula
Choosing a Predictor
lm uses a formula to describe the response and predictor variables for a linear model.
Program
Play the script to choose which predictor appears on the right side of the model formula.
model_formula.R
Replay: real traced execution (multi-file project)
training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))
predictor_index <- 1
predictor <- c("hours", "effort")[predictor_index]
model_formula <- as.formula(paste("score ~", predictor))
fit <- lm(model_formula, data = training)
slope <- round(coef(fit)[[predictor]], 1)
cat(slope, "\n", sep = "")
training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))
predictor_index <- 2
predictor <- c("hours", "effort")[predictor_index]
model_formula <- as.formula(paste("score ~", predictor))
fit <- lm(model_formula, data = training)
slope <- round(coef(fit)[[predictor]], 1)
cat(slope, "\n", sep = "")
training ← 4 rows x 3 cols
1training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))2predictor_index <- 1values this step4 rows x 3 colstrainingpredictor_index ← 1
1training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))2predictor_index <- 13predictor <- c("hours", "effort")[predictor_index]values this step1predictor_indexpredictor ← hours
2predictor_index <- 13predictor <- c("hours", "effort")[predictor_index]4model_formula <- as.formula(paste("score ~", predictor))values this stephourspredictor1predictor_indexmodel_formula ← score ~ hours
3predictor <- c("hours", "effort")[predictor_index]4model_formula <- as.formula(paste("score ~", predictor))5fit <- lm(model_formula, data = training)values this stepscore ~ hoursmodel_formulahourspredictorfit ← lm(score ~ hours)
4model_formula <- as.formula(paste("score ~", predictor))5fit <- lm(model_formula, data = training)6slope <- round(coef(fit)[[predictor]], 1)values this steplm(score ~ hours)fitscore ~ hoursmodel_formulaslope ← 7
5fit <- lm(model_formula, data = training)6slope <- round(coef(fit)[[predictor]], 1)7cat(slope, "\n", sep = "")values this step7slopelm(score ~ hours)fitcat(slope, " ", sep = "")
6slope <- round(coef(fit)[[predictor]], 1)7cat(slope, "\n", sep = "")output7values this step7slope
training ← 4 rows x 3 cols
1training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))2predictor_index <- 2values this step4 rows x 3 colstrainingpredictor_index ← 2
1training <- data.frame(hours = c(1, 2, 3, 4), effort = c(1, 1, 2, 3), score = c(55, 60, 70, 75))2predictor_index <- 23predictor <- c("hours", "effort")[predictor_index]values this step2predictor_indexpredictor ← effort
2predictor_index <- 23predictor <- c("hours", "effort")[predictor_index]4model_formula <- as.formula(paste("score ~", predictor))values this stepeffortpredictor2predictor_indexmodel_formula ← score ~ effort
3predictor <- c("hours", "effort")[predictor_index]4model_formula <- as.formula(paste("score ~", predictor))5fit <- lm(model_formula, data = training)values this stepscore ~ effortmodel_formulaeffortpredictorfit ← lm(score ~ effort)
4model_formula <- as.formula(paste("score ~", predictor))5fit <- lm(model_formula, data = training)6slope <- round(coef(fit)[[predictor]], 1)values this steplm(score ~ effort)fitscore ~ effortmodel_formulaslope ← 9.1
5fit <- lm(model_formula, data = training)6slope <- round(coef(fit)[[predictor]], 1)7cat(slope, "\n", sep = "")values this step9.1slopelm(score ~ effort)fitcat(slope, " ", sep = "")
6slope <- round(coef(fit)[[predictor]], 1)7cat(slope, "\n", sep = "")output9.1values this step9.1slope
lm
`lm(formula, data)` fits a linear model using names from `data`.
as.formula
`as.formula` turns text into a formula object.
coef
`coef(fit)` returns named model coefficients.