mtcars-abhaengig

probability
dependent
mtcars
Published

October 24, 2022

Exercise

Ob wohl die PS-Zahl (Ereignis \(A\)) und der Spritverbrauch (Ereignis \(B\)) voneinander abhängig sind? Was meinen Sie? Was ist Ihre Einschätzung dazu? Vermutlich haben Sie ein (wenn vielleicht auch implizites) Vorab-Wissen zu dieser Frage. Lassen wir dieses Vorab-Wissen aber einmal außen vor und schauen uns rein Daten dazu an. Vereinfachen wir die Frage etwas, indem wir fragen, ob die Ereignisse “hoher Spritverbrauch” (A) und “hohe PS-Zahl” voneinander abhängig sind.

Um es konkret zu machen, nutzen wir den Datensatz mtcars:

library(tidyverse)
data(mtcars)
glimpse(mtcars)
Rows: 32
Columns: 11
$ mpg  <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8,…
$ cyl  <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8,…
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 16…
$ hp   <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180…
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92,…
$ wt   <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.…
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18…
$ vs   <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,…
$ am   <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,…
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3,…
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2,…

Weitere Infos zum Datensatz bekommen Sie mit help(mtcars) in R.

Definieren wir uns das Ereignis “hohe PS-Zahl” (und nennen wir es hp_high, klingt cooler). Sagen wir, wenn die PS-Zahl größer ist als der Median, dann trifft hp_high zu, ansonsten nicht:

mtcars %>% 
  summarise(median(hp))
  median(hp)
1        123

Mit dieser “Wenn-Dann-Abfrage” können wir die Variable hp_high mit den Stufen TRUE und FALSE definieren:

mtcars <-
  mtcars %>% 
  mutate(hp_high = case_when(
    hp > 123 ~ TRUE,
    hp <= 123 ~ FALSE
  ))

Genauso gehen wir mit dem Spritverbrauch vor (mpg_high):

mtcars <- 
  mtcars %>% 
  mutate(mpg_high = case_when(
    mpg > median(mpg) ~ TRUE,
    mpg <= median(mpg) ~ FALSE
  ))
  1. Schauen Sie im Datensatz nach, ob unser Vorgehen (Erstellung von hp_high und mpg_high) überhaupt funktioniert hat. Probieren geht über Studieren.

  2. Visualisieren Sie in geeigneter Form den Zusammenhang.

  3. Berechnen Sie \(Pr(\text{mpg high}|\text{hphigh})\) und \(Pr(\text{mpg high}|\neg \text{hp high})\) !











Solution

  1. Schauen wir mal in den Datensatz:
mtcars %>% 
  select(hp, hp_high, mpg, mpg_high) %>% 
  slice_head(n = 5)
                   hp hp_high  mpg mpg_high
Mazda RX4         110   FALSE 21.0     TRUE
Mazda RX4 Wag     110   FALSE 21.0     TRUE
Datsun 710         93   FALSE 22.8     TRUE
Hornet 4 Drive    110   FALSE 21.4     TRUE
Hornet Sportabout 175    TRUE 18.7    FALSE
mtcars %>% 
  #select(hp_high, mpg_high) %>% 
  ggplot() +
  aes(x = hp_high, fill = mpg_high) +
  geom_bar(position = "fill")

Hey, sowas von abhängig voneinander, die zwei Variablen, mpg_high und hp_high!

Der rechte Balken zeigt \(Pr(\text{mpghigh}|\text{hp high})\) und \(Pr(\neg \text{mpg high}|\text{hp high})\).Der linke Balken zeigt \(Pr(\text{mpg high}|\neg \text{hp high})\) und \(Pr(\neg \text{mpg high}|\neg \text{hp high})\).

  1. Berechnen wir die relevanten Anteile:
mtcars %>% 
  #select(hp_high, mpg_high) %>% 
  count(hp_high, mpg_high) %>%  # Anzahl pro Zelle der Kontingenztabelle
  group_by(hp_high) %>%  # die Anteile pro "Balken" s. Diagramm
  mutate(prop = n / sum(n))
# A tibble: 4 × 4
# Groups:   hp_high [2]
  hp_high mpg_high     n   prop
  <lgl>   <lgl>    <int>  <dbl>
1 FALSE   FALSE        3 0.176 
2 FALSE   TRUE        14 0.824 
3 TRUE    FALSE       14 0.933 
4 TRUE    TRUE         1 0.0667

Am besten, Sie führen den letzten Code Schritt für Schritt aus und schauen sich jeweils das Ergebnis an, das hilft beim Verstehen.

Alternativ kann man sich die Häufigkeiten auch schön bequem ausgeben lassen:

library(mosaic)
tally(mpg_high ~ hp_high, 
      data = mtcars, 
      format = "proportion")
        hp_high
mpg_high       TRUE      FALSE
   TRUE  0.06666667 0.82352941
   FALSE 0.93333333 0.17647059

Categories:

  • probability
  • dependent