tidymodels-ames-02

ds1
tidymodels
prediction
yacsda
statlearning
num
Published

May 17, 2023

Aufgabe

Berechnen Sie ein lineares Modell mit tidymodels und zwar anhand des ames Datensatzes.

Modellgleichung: Sale_Price ~ Gr_Liv_Area, data = ames.

Berechnen Sie ein multiplikatives (exponenzielles) Modell.

Gesucht ist R-Quadrat als Maß für die Modellgüte im TEST-Sample.

Hinweise:

  • Fixieren Sie die Zufallszahlen auf den Startwert 42.











Lösung

library(tidymodels)
data(ames)

Multiplikatives Modell:

ames <- 
  ames %>% 
  mutate(Sale_Price = log10(Sale_Price)) %>% 
  select(Sale_Price, Gr_Liv_Area)

Nicht vergessen: AV-Transformation in beiden Samples!

Datensatz aufteilen:

set.seed(42)
ames_split <- initial_split(ames, prop = 0.80, strata = Sale_Price)
ames_train <- training(ames_split)
ames_test  <-  testing(ames_split)

Modell definieren:

m1 <-
  linear_reg() # engine ist "lm" im Default

Modell fitten:

fit1 <-
  m1 %>% 
  fit(Sale_Price ~ Gr_Liv_Area, data = ames)
fit1 %>% pluck("fit") 

Modellgüte im Train-Sample:

fit1_performance <-
  fit1 %>% 
  extract_fit_engine()  # identisch zu pluck("fit")

Modellgüte im Train-Sample:

fit1_performance %>% summary()

R-Quadrat via easystats:

library(easystats)
fit1_performance %>% r2()  # rmse()
tidy(fit1_performance)  # ähnlich zu parameters()

Vorhersagen im Test-Sample:

preds <- predict(fit1, new_data = ames_test)  # liefert TABELLE (tibble) zurück
head(preds)

preds ist ein Tibble, also müssen wir noch die Spalte .pred. herausziehen, z.B. mit pluck(preds, ".pred"):

preds_vec <- preds$.pred
ames_test2 <-
  ames_test %>% 
  mutate(preds = pluck(preds, ".pred"),  # pluck aus der Tabelle rausziehen
         .pred = preds_vec)  # oder  mit dem Dollar-Operator

head(ames_test2)

Oder mit unnest:

ames_test2 <-
  ames_test %>% 
  mutate(preds = preds) %>% 
  unnest(preds) # Listenspalte "entschachteln"

head(ames_test2)

Oder wir binden einfach die Spalte an den Tibble:

ames_test2 <-
  ames_test %>% 
  bind_cols(preds = preds)  # nimmt Tabelle und bindet die Spalten dieser Tabelle an eine Tabelle

head(ames_test2)

Modellgüte im Test-Sample:

rsq(ames_test2,
    truth = Sale_Price,
    estimate = .pred)
sol <- 0.51679

Zur Interpretation von Log10-Werten

5e5
5*10^5 - 500000

Categories:

  • ds1
  • tidymodels
  • prediction
  • yacsda
  • statlearning
  • num