Inputtransformeringar: "hockeyklubban"
I den här övningen bygger vi en modell för att förutsäga pris utifrån ett mått på husets storlek (yta). Datamängden houseprice, som redan är inläst, innehåller följande kolumner:
price: huspris i enheter om 1 000 dollarsize: yta
Ett spridningsdiagram visar att datan är tydligt icke-linjär: en sorts "hockeyklubba" där priset är relativt stabilt för mindre hus men stiger brant när huset blir större. Kvadratiska och kubiska funktioner är ofta lämpliga funktionsformer för att beskriva hockeyklubbeliknande samband. Observera att det inte behöver finnas något "fysikaliskt" skäl till att price är relaterat till kvadraten av size – en kvadratisk funktion är helt enkelt en sluten approximation av det observerade sambandet.

Du ska anpassa en modell för att förutsäga pris som en funktion av kvadraten av ytan och sedan granska hur väl den passar träningsdatan.
Eftersom ^ även används för att uttrycka interaktioner, använd funktionen I() (docs) för att tolka uttrycket x^2 "som det är": det vill säga som kvadraten av x, snarare än interaktionen av x med sig självt.
exampleFormula = y ~ I(x^2)
Den här övningen är en del av kursen
Övervakad inlärning i R: Regression
Övningsinstruktioner
- Skriv en formel,
fmla_sqr, som uttrycker pris som en funktion av kvadraten av ytan. Skriv ut den. - Anpassa en modell
model_sqrtill datan med hjälp avfmla_sqr. - Anpassa för jämförelse en linjär modell
model_lintill datan med formelnprice ~ size. - Fyll i luckorna för att
- göra förutsägelser från träningsdatan med de två modellerna
- slå ihop förutsägelserna till en enda kolumn
predmed hjälp avpivot_longer() - jämföra de två modellernas förutsägelser med datan grafiskt. Vilken passar bäst?
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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")