library(tidymodels)
data(ames)
tidymodels-ames-03
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.
Rücktransformieren Sie die Log-Werte in “Roh-Dollar”.
Geben Sie den mittleren Vorhersagewert an als Lösung.
Hinweise:
- Fixieren Sie die Zufallszahlen auf den Startwert 42.
Lösung
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)
<- initial_split(ames, prop = 0.80, strata = Sale_Price)
ames_split <- training(ames_split)
ames_train <- testing(ames_split) ames_test
Modell definieren:
<-
m1 linear_reg() # engine ist "lm" im Default
Modell fitten:
<-
fit1 %>%
m1 fit(Sale_Price ~ Gr_Liv_Area, data = ames)
%>% pluck("fit") fit1
Modellgüte im Train-Sample:
<-
fit1_performance %>%
fit1 extract_fit_engine() # identisch zu pluck("fit")
Modellgüte im Train-Sample:
%>% summary() fit1_performance
R-Quadrat via easystats:
library(easystats)
%>% r2() # rmse() fit1_performance
tidy(fit1_performance) # ähnlich zu parameters()
Vorhersagen im Test-Sample:
<- predict(fit1, new_data = ames_test) # liefert TABELLE (tibble) zurück
preds head(preds)
preds
ist ein Tibble, also müssen wir noch die Spalte .pred.
herausziehen, z.B. mit pluck(preds, ".pred")
:
<- preds$.pred preds_vec
<-
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)
<- 0.51679 sol
Zur Interpretation von Log10-Werten
5e5
5*10^5 - 500000
Rücktransformation (ohne Bias-Korrektur):
<-
ames_test2 %>%
ames_test2 mutate(pred_raw = 10^(.pred))
Mittelwert der Vorhersagen:
<- mean(ames_test2$pred_raw)
sol sol
Categories:
- ds1
- tidymodels
- prediction
- yacsda
- statlearning
- num