adjustieren2_var1

lm
regression
bayes
adjust
string
Published

November 8, 2023

Aufgabe

Betrachten Sie folgendes Modell, das den Zusammenhang des Preises (price) und dem Gewicht (carat) von Diamanten untersucht (Datensatz diamonds).

library(tidyverse)
library(easystats)
library(rstanarm)
diamonds <- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv")
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.

diamonds2 <-
  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)
lm1 <- stan_glm(price ~ carat_z, data = diamonds2,
                refresh = 0)
parameters(lm1)
Parameter   |  Median |             95% CI |   pd |  Rhat |     ESS |                       Prior
-------------------------------------------------------------------------------------------------
(Intercept) | 3932.64 | [3919.83, 3945.55] | 100% | 1.004 | 1178.00 | Normal (3932.80 +- 9973.60)
carat_z     | 7755.90 | [7727.59, 7783.52] | 100% | 1.000 | 4716.00 |   Normal (0.00 +- 21040.85)

Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
  using a MCMC distribution approximation.

Zur Verdeutlichung ein Diagramm zum Modell:

diamonds2 %>% 
  ggplot() +
  aes(x = carat_z, y = price) +
  geom_point() + 
  geom_smooth(method = "lm")
`geom_smooth()` using formula = 'y ~ x'

Oder so:

estimate_relation(lm1) |> plot()

Aufgabe:

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.

Hinweis:

  • Geben Sie nur die Regressionsformel an.
  • Lassen Sie zwischen Termen der Regressionsformel jeweils ein Leerzeichen Abstand.
  • Beziehen Sie sich auf das Modell bzw. die Angaben oben.
  • 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

Die richtige Antwort lautet: price ~ carat_z + cut

Das Modell könnten wir so berechnen:

lm2 <- stan_glm(price ~ carat_z + cut, data = diamonds2,
                refresh = 0)  # verhindert einen Haufen unnötigen Output
parameters(lm2)
Parameter    |  Median |             95% CI |   pd |  Rhat |     ESS |                       Prior
--------------------------------------------------------------------------------------------------
(Intercept)  | 2401.60 | [2326.67, 2475.70] | 100% | 1.000 | 1022.00 | Normal (3932.80 +- 9973.60)
carat_z      | 7871.06 | [7844.55, 7898.35] | 100% | 0.999 | 3734.00 |   Normal (0.00 +- 21040.85)
cutGood      | 1124.68 | [1040.23, 1213.25] | 100% | 1.000 | 1224.00 |   Normal (0.00 +- 34685.38)
cutIdeal     | 1804.40 | [1726.43, 1883.62] | 100% | 1.000 | 1083.00 |   Normal (0.00 +- 20362.28)
cutPremium   | 1443.13 | [1365.40, 1520.66] | 100% | 1.000 | 1099.00 |   Normal (0.00 +- 22862.49)
cutVery Good | 1513.52 | [1435.77, 1594.26] | 100% | 1.000 | 1092.00 |   Normal (0.00 +- 23922.15)

Uncertainty intervals (equal-tailed) and p-values (two-tailed) computed
  using a MCMC distribution approximation.

Oder auch so, mit der klassischen Regression:

lm(price ~ carat_z + cut, data = diamonds2) gi```

Das führt zu ähnlichen Ergebnissen.

Man könnte hier noch einen Interaktionseffekt ergänzen.


Categories:

  • lm
  • regression
  • bayes
  • adjust
  • string