Rows: 53940 Columns: 11
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): cut, color, clarity
dbl (8): rownames, carat, depth, table, price, x, y, z
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Aber zuerst zentrieren wir den metrischen Prädiktor carat, um den Achsenabschnitt besser interpretieren zu können.
Dann berechnen wir ein (nicht-bayesianisches, sondern frequentistisches) Regressionsmodell:
lm1 <-lm(price ~ carat_z, data = diamonds)parameters(lm1)
Parameter | Coefficient | SE | 95% CI | t(53938) | p
--------------------------------------------------------------------------
(Intercept) | 3932.80 | 6.67 | [3919.73, 3945.87] | 589.83 | < .001
carat z | 7756.43 | 14.07 | [7728.86, 7784.00] | 551.41 | < .001
Zur Verdeutlichung ein Diagramm zum Modell:
estimate_relation(lm1) |>plot()
Aufgaben:
Was kostet in Diamant mittlerer Größe laut Modell lm1? Runden Sie auf eine Dezimale. Geben Sie nur eine Zahl ein.
Geben Sie eine Regressionsformel an, die lm1 ergänzt, so dass die Schliffart (cut) des Diamanten kontrolliert (adjustiert) wird. Anders gesagt: Das Modell soll die mittleren Preise für jede der fünf Schliffarten angeben. Geben Sie nur die Regressionsformel an. Lassen Sie zwischen Termen jeweils ein Leerzeichen Abstand.
Hinweis: Es gibt (laut Datensatz) folgende Schliffarten (und zwar in der folgenden Reihenfolge):
diamonds %>%distinct(cut)
# A tibble: 5 × 1
cut
<chr>
1 Ideal
2 Premium
3 Good
4 Very Good
5 Fair
Lösung
Unser Modell lm1 schätzt den Preis eines Diamanten mittlerer Größe auf etwa 3932.5 (was immer auch die Einheiten sind, Dollar vermutlich). Da der Prädiktor carat_z zentriert ist, entspricht ein Wert von 0 dem Mittelwert der ursprünglichen Verteilung, carat. Der Y-Wert, wenn X=0, wird vom Intercept angegeben.
parameters(lm1)
Parameter | Coefficient | SE | 95% CI | t(53938) | p
--------------------------------------------------------------------------
(Intercept) | 3932.80 | 6.67 | [3919.73, 3945.87] | 589.83 | < .001
carat z | 7756.43 | 14.07 | [7728.86, 7784.00] | 551.41 | < .001
Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
using a Wald t-distribution approximation.
Oder so:
coef(lm1)
(Intercept) carat_z
3932.800 7756.426
Alternativ können wir uns mit predict für jeden beliebigen Wert des Prädiktors die Vorhersage des Modells ausgeben lassen.
Wir definieren eine (hier sehr kurze) Tabelle mit Prädiktorwerten, für die wir die Vorhersage laut lm1 wissen möchten:
neue_daten <-tibble(carat_z =0)
Dann weisen wir unseren Lieblingsroboter an, auf Basis von lm1 eine Vorhersage (prediction) für neue_daten zu erstellen.
predict(lm1, newdata = neue_daten)
1
3932.8
price ~ carat_z + cut
Dieses zweite Modell könnten wir so berechnen:
lm2 <-lm(price ~ carat_z + cut, data = diamonds)parameters(lm2)
Man könnte hier noch einen Interaktionseffekt ergänzen, wenn man Grund zur Annahme hat, dass es einen gibt.
Categories:
regression
‘2023’
string
Source Code
---extype: stringexsolution: ~exname: adjustieren2aexpoints: 1categories:- regression- '2023'- stringdate: '2023-11-08'slug: adjustieren2atitle: adjustieren2a---```{r libs, include = FALSE}library(tidyverse)``````{r global-knitr-options, include=FALSE}knitr::opts_chunk$set(fig.pos = 'H', fig.asp = 0.618, fig.width = 4, fig.cap = "", fig.path = "", echo = TRUE, cache = TRUE)```# AufgabeBetrachten Sie folgendes Modell, das den Zusammenhang des Preises (`price`) und dem Gewicht (`carat`) von Diamanten untersucht (Datensatz `diamonds`).```{r}library(tidyverse)library(easystats)diamonds <-read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv")```Aber zuerst zentrieren wir den metrischen Prädiktor `carat`, um den Achsenabschnitt besser interpretieren zu können. ```{r}diamonds <- diamonds %>%mutate(carat_z = carat -mean(carat, na.rm =TRUE))```Dann berechnen wir ein (nicht-bayesianisches, sondern frequentistisches) Regressionsmodell:```{r message=FALSE}lm1 <- lm(price ~ carat_z, data = diamonds)parameters(lm1)```Zur Verdeutlichung ein Diagramm zum Modell:```{r}estimate_relation(lm1) |>plot()```*Aufgaben:*a) Was kostet in Diamant mittlerer Größe laut Modell `lm1`? Runden Sie auf eine Dezimale. Geben Sie nur eine Zahl ein.b) Geben Sie eine Regressionsformel an, die `lm1` ergänzt, so dass die Schliffart (`cut`) des Diamanten kontrolliert (adjustiert) wird. Anders gesagt: Das Modell soll die mittleren Preise für jede der fünf Schliffarten angeben. Geben Sie nur die Regressionsformel an. Lassen Sie zwischen Termen jeweils ein Leerzeichen Abstand.*Hinweis*: Es gibt (laut Datensatz) folgende Schliffarten (und zwar in der folgenden Reihenfolge):```{r}diamonds %>%distinct(cut)```</br></br></br></br></br></br></br></br></br></br># Lösung```{r echo = FALSE}regression_formel <- "price ~ carat_z + cut"```a) Unser Modell `lm1` schätzt den Preis eines Diamanten mittlerer Größe auf etwa `3932.5` (was immer auch die Einheiten sind, Dollar vermutlich).Da der Prädiktor `carat_z` zentriert ist, entspricht ein Wert von `0` dem Mittelwert der ursprünglichen Verteilung, `carat`. Der Y-Wert, wenn X=0, wird vom Intercept angegeben.```{r}parameters(lm1)```Oder so:```{r}coef(lm1)```*Alternativ* können wir uns mit `predict` für jeden beliebigen Wert des Prädiktors die Vorhersage des Modells ausgeben lassen.Wir definieren eine (hier sehr kurze) Tabelle mit Prädiktorwerten, für die wir die Vorhersage laut `lm1` wissen möchten:```{r}neue_daten <-tibble(carat_z =0)```Dann weisen wir unseren Lieblingsroboter an, auf Basis von `lm1` eine Vorhersage (prediction) für `neue_daten` zu erstellen. ```{r}predict(lm1, newdata = neue_daten)```b) `price ~ carat_z + cut`Dieses zweite Modell könnten wir so berechnen:```{r message=FALSE}lm2 <- lm(price ~ carat_z + cut, data = diamonds)parameters(lm2)```Man *könnte* hier noch einen Interaktionseffekt ergänzen, wenn man Grund zur Annahme hat,dass es einen gibt.---Categories: - regression- '2023'- string