Aan de slagGa gratis aan de slag

Inputtransformaties: de "hockeystick"

In deze oefening bouwen we een model om de prijs te voorspellen op basis van een maat voor de grootte van het huis (oppervlakte). De houseprice-gegevensset is voor je geladen en bevat de kolommen:

  • price: huizenprijs in eenheden van $1000
  • size: oppervlakte

Een spreidingsdiagram van de data laat zien dat de relatie behoorlijk niet-lineair is: een soort "hockeystick" waarbij de prijs vrij vlak blijft voor kleinere huizen, maar sterk stijgt naarmate het huis groter wordt. Kwadratische en kubische termen zijn vaak goede functionele vormen om hockeystick-achtige relaties uit te drukken. Let op: er hoeft geen "fysieke" reden te zijn dat price gerelateerd is aan het kwadraat van size; een kwadratische term is simpelweg een gesloten-vormbenadering van de waargenomen relatie.

scatterplot

Je past een model aan om prijs te voorspellen als functie van het kwadraat van de grootte, en bekijkt de fit op de trainingsdata.

Omdat ^ ook een symbool is om interacties uit te drukken, gebruik je de functie I() (docs) om de uitdrukking x^2 “as is” te behandelen: dus als het kwadraat van x in plaats van de interactie van x met zichzelf.

exampleFormula = y ~ I(x^2)

Deze oefening maakt deel uit van de cursus

Supervised Learning in R: Regressie

Cursus bekijken

Oefeninstructies

  • Schrijf een formule, fmla_sqr, om prijs uit te drukken als functie van het kwadraat van grootte. Print deze.
  • Pas een model model_sqr aan op de data met fmla_sqr.
  • Ter vergelijking: pas een lineair model model_lin aan op de data met de formule price ~ size.
  • Vul de lege plekken in om
    • voorspellingen te maken op de trainingsdata met beide modellen
    • de voorspellingen naar één kolom pred te pivotten met pivot_longer().
    • de voorspellingen van beide modellen grafisch met de data te vergelijken. Welke past beter?

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# houseprice is available
summary(houseprice)

# Create the formula for price as a function of squared size
(fmla_sqr <- ___)

# Fit a model of price as a function of squared size (use fmla_sqr)
model_sqr <- ___

# Fit a model of price as a linear function of size
model_lin <- ___

# Make predictions and compare
houseprice %>% 
    mutate(pred_lin = ___(___),       # predictions from linear model
           pred_sqr = ___(___)) %>%   # predictions from quadratic model
    pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>% # pivot the predictions
    ggplot(aes(x = size)) + 
       geom_point(aes(y = ___)) +                   # actual prices
       geom_line(aes(y = ___, color = modeltype)) + # the predictions
       scale_color_brewer(palette = "Dark2")
Code bewerken en uitvoeren