library(tidyverse)
diamonds <- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv")adjustieren2
Exercise
Betrachten Sie folgendes Modell, das den Zusammenhang des Preises (price) und dem Gewicht (carat) von Diamanten untersucht (Datensatz diamonds).
Aber zuerst zentrieren wir den metrischen Prädiktor carat, um den Achsenabschnitt besser interpretieren zu können.
diamonds <-
diamonds %>%
mutate(carat_z = carat - mean(carat, na.rm = TRUE))Dann berechnen wir ein (bayesianisches) Regressionsmodell, wobei wir auf die Standardwerte der Prior zurückgreifen.
library(rstanarm)
library(easystats)
lm1 <- stan_glm(price ~ carat_z, data = diamonds,
chains = 1, # nur ein Mal Stichproben ziehen, spart Zeit (auf Kosten der Genauigkeit)
refresh = 0)
parameters(lm1)| Parameter | Median | CI | CI_low | CI_high | pd | Rhat | ESS | Prior_Distribution | Prior_Location | Prior_Scale |
|---|---|---|---|---|---|---|---|---|---|---|
| (Intercept) | 3932.771 | 0.95 | 3918.390 | 3946.382 | 1 | 1.004343 | 298.9047 | normal | 3932.8 | 9973.599 |
| carat_z | 7756.901 | 0.95 | 7730.718 | 7784.369 | 1 | 1.001497 | 1004.2651 | normal | 0.0 | 21040.850 |
Zur Verdeutlichung ein Diagramm zum Modell:
diamonds %>%
ggplot() +
aes(x = carat_z, y = price) +
geom_point() +
geom_smooth(method = "lm")
Answerlist
- 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
lm1ergä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)| cut |
|---|
| Ideal |
| Premium |
| Good |
| Very Good |
| Fair |
Solution
Unser Modell
lm1schätzt den Preis eines Diamanten mittlerer Größe auf etwa3932.5(was immer auch die Einheiten sind, Dollar vermutlich).price ~ carat_z + cut
Dieses zweite Modell könnten wir so berechnen:
lm2 <- stan_glm(price ~ carat_z + cut, data = diamonds,
chains = 1,
refresh = 0)
parameters(lm2)| Parameter | Median | CI | CI_low | CI_high | pd | Rhat | ESS | Prior_Distribution | Prior_Location | Prior_Scale |
|---|---|---|---|---|---|---|---|---|---|---|
| (Intercept) | 2404.880 | 0.95 | 2331.523 | 2475.833 | 1 | 0.9990517 | 439.7179 | normal | 3932.8 | 9973.599 |
| carat_z | 7870.615 | 0.95 | 7843.919 | 7897.895 | 1 | 0.9992243 | 1313.5603 | normal | 0.0 | 21040.850 |
| cutGood | 1121.159 | 0.95 | 1034.281 | 1206.799 | 1 | 0.9990210 | 467.0165 | normal | 0.0 | 34685.376 |
| cutIdeal | 1802.064 | 0.95 | 1726.486 | 1876.251 | 1 | 0.9992748 | 455.6933 | normal | 0.0 | 20362.277 |
| cutPremium | 1440.067 | 0.95 | 1362.045 | 1520.907 | 1 | 0.9991880 | 443.2387 | normal | 0.0 | 22862.493 |
| cutVery Good | 1512.021 | 0.95 | 1431.233 | 1589.127 | 1 | 0.9993142 | 443.3639 | normal | 0.0 | 23922.148 |
Ein “normales” (frequentistisches) lm käme zu ähnlichen Ergebnissen:
lm(price ~ carat_z + cut, data = diamonds)
Call:
lm(formula = price ~ carat_z + cut, data = diamonds)
Coefficients:
(Intercept) carat_z cutGood cutIdeal cutPremium
2405 7871 1120 1801 1439
cutVery Good
1510
Man könnte hier noch einen Interaktionseffekt ergänzen, wenn man Grund zur Annahme hat, dass es einen gibt.
Categories:
- regression
- lm
- qm2
- bayes
- adjust