library(tidyverse)
<- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv") diamonds
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)
<- stan_glm(price ~ carat_z, data = diamonds,
lm1 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
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)
cut |
---|
Ideal |
Premium |
Good |
Very Good |
Fair |
Solution
Unser Modell
lm1
schä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:
<- stan_glm(price ~ carat_z + cut, data = diamonds,
lm2 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