---
format:
  revealjs:
    slide-number: true
    theme: [default, ../theme/presentation_theme.scss, ../theme/presentation_components.scss]
    embed-resources: true
    preview-links: false
    output-file: "presentation"
    output-ext: "html"
    highlight-style: github-light
    include-in-header: "../theme/fonts-include.html"
filters:
  - ../theme/rn-shorthand.lua
  - ../_extensions/EmilHvitfeldt/roughnotation/rough.lua
---

```{r}
#| label: setup
#| include: false
options(htmltools.dir.version = FALSE)
knitr::opts_chunk$set(
  fig.width = 7,
  fig.height = 5,
  fig.align = "center",
  out.width = "100%"
)

library(here)

here::i_am("Presentation/presentation.qmd")

library(tidyverse)
library(palmerpenguins)
library(cowplot)
library(ggview)

path_materials <-
  "Presentation/Materials"

source(
  here::here(
    "R/set_r_theme.R"
  )
)

source(here::here("R", "Functions", "include_local_figure.R"))
source(here::here("R", "Functions", "generate_corr_data.R"))
source(here::here("R", "Functions", "make_kal_plot.R"))
source(here::here("R", "Functions", "theme_gallery.R"))
source(here::here("R", "Functions", "save_gallery_plot.R"))
source(here::here("R", "Functions", "combine_gallery_pair.R"))

```

```{r}
#| label: dynamic-link-generation
#| include: false
project_name <-
  basename(here::here())

display_name <-
  "Biostatistika"

github_url <-
  stringr::str_glue(
    "https://github.com/CUNI-NATUR-Biostatistics/{project_name}"
  )

slides_url <-
  stringr::str_glue(
    "https://CUNI-NATUR-Biostatistics.github.io/{project_name}/"
  )
```



## Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost? {.course-title .course-title-illustrated .bg-indigo}

::: {.course-title-illustration}
```{r}
#| label: zobrazit-titulni-ilustraci
#| echo: false
#| fig-alt: "Humorná ilustrace tří tučňáků: jeden stojí na váze a natahuje ploutev, druhý ji měří pravítkem a třetí zapisuje obě měření stejného jedince. Ilustrace vytvořená pomocí AI."
#| out-width: "100%"

include_local_figure("tucnaci_titulni_ilustrace.png")
```
:::

::: {.course-title-mark}
![Logo kurzu Biostatistika](../theme/course-logo-reversed.svg) BIOSTATISTIKA
:::

::: {.course-title-number}
L02
:::

::: {.course-title-formal}
Vztahy dvou proměnných a vizualizace
:::

::: {.course-title-link}
[cuni-natur-biostatistics.github.io/materialy.html](https://cuni-natur-biostatistics.github.io/materialy.html)
:::

::: {.course-title-caption}
Ilustrace vytvořená pomocí AI.
:::

::: {.notes}
Titulní ilustrace navazuje na obrázek druhů tučňáků a na měření ploutve a hmotnosti ve skriptech a prezentaci. Obě měření patří stejnému jedinci; nejde o graf naměřených dat ani o důkaz příčiny. Původ a zadání ilustrace jsou zaznamenány v `Workflow/records/2026-10-05-title-illustration.md`.
:::


## Pomůže nám druhá proměnná?

::: {.box-question}
[Naše biologická otázka]{.panel-title}
[Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost?]{.text-italic}
:::

:::: {.columns}

::: {.column width="10%"}
:::

::: {.column width="80%"}
```{r}
#| label: zobrazit-druhy-tucnaku
#| echo: false
#| fig-alt: "Kreslená ilustrace tří druhů tučňáků z dat Palmer Penguins: Chinstrap, Gentoo a Adelie."
include_local_figure("lter_penguins.png")
```
:::

::: {.column width="10%"}
:::
::::

::: {.footer}
Ilustrace: [Allison Horst](https://allisonhorst.com/)
:::

{{< include ../pollslive/generated/active.qmd >}}

## Výsledky učení

Po absolvování této přednášky budete schopni:

::: {.incremental}
- přečíst [bodový graf]{.text-hgl-graphite} dvou numerických proměnných: směr, tvar a rozptýlení bodů
- vysvětlit, proč jsou biologická data [rozptýlená]{.text-hgl-orange} i při zřetelném vztahu a co k popisu přidá [korelace]{.text-hgl-indigo_velvet}
- zvolit vhodný první graf podle typu dvojice proměnných
- rozlišit popis asociace od tvrzení o její příčině
:::

::: {.notes}
Tento slide ponechávám jako explicitní kontrakt se studenty. Při mluveném úvodu zdůrazním, že cílem není jen spočítat korelaci, ale naučit se nejdřív číst graf a formulovat opatrný závěr.
:::

# Dvě měření, jeden bod

## Od jedné proměnné ke dvěma

:::: {.columns .align-top}

::: {.column width="47%"}
::: {.panel-note}
[V minulé lekci jsme četli jednu proměnnou]{.panel-title}

Z tabulky, histogramu nebo číselného souhrnu jsme zjišťovali, jak vypadají hodnoty jedné proměnné.
:::
:::

::: {.column width="49%"}
::: {.panel-question .fragment}
[Dvojice musí zůstat spolu]{.panel-title}

Dva oddělené histogramy neukážou, které dvě hodnoty patří stejnému tučňákovi.
:::
:::

::::

::: {.notes}
Přemosťuji opakování k existující diskusi. Zdůrazním, že dva oddělené jednorozměrné grafy nestačí: potřebujeme zachovat dvojici měření každého jednotlivého tučňáka.
:::

## Dvě hodnoty patří jednomu tučňákovi

```{r}
#| label: zobrazit-parovana-mereni-tucnaka
#| echo: false
#| out-width: "82%"
#| fig-alt: "Terénní pracovnice současně měří délku ploutve tučňáka a jeho tělesnou hmotnost na váze; obě hodnoty patří stejnému jedinci."
#| fig-cap: "Ilustrační obraz vytvořen AI."
include_local_figure("penguin_paired_measurements.png")
```

::: {.takeaway-strip .text-center}
Dvojice měření musí zůstat spojena se stejným pozorováním.
:::

## Diskuze se sousedem {.text-center}

::: {.box-question}
[Naše biologická otázka]{.panel-title}
[Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost?]{.text-italic}
:::

<br>

::: {.blockquote .text-bold .text-italic .text-size-large}
Jak by podle vás mohl vypadat graf pro zodpovězení této otázky?
:::

<br>

*30 s přemýšlení — pak sdílejte svůj odhad se sousedem.*

::: {.notes}
Nechám studenty nejdřív opravdu odhadnout tvar grafu. Cíl není správná terminologie, ale představa: osa pro délku ploutve, osa pro hmotnost, každý tučňák jeden bod. Po dvojicích nechám zaznít dvě až tři odpovědi a teprve potom přejdu k jednoduchým datům.
:::

## Tabulka tučňáků

```{r}
#| label: pripravit-data
#| include: false
#| message: false
#| warning: false
data_puvodni <-
  readr::read_csv(here::here("data", "palmer_penguins.csv"), show_col_types = FALSE)
data_tucnaci <-
  data_puvodni |>
  tidyr::drop_na(flipper_length_mm, body_mass_g) |>
  dplyr::transmute(
    druh_tucnaka = factor(species, levels = c("Adelie", "Chinstrap", "Gentoo")),
    ostrov = factor(island, levels = c("Biscoe", "Dream", "Torgersen")),
    delka_ploutve_mm = flipper_length_mm,
    hmotnost_g = body_mass_g
  )
```

<br>

:::: {.columns .align-top}
::: {.column width="55%"}
```{r}
#| label: nahled-na-tabulku-tucnaku
#| echo: false
#| message: false
#| warning: false
data_puvodni |>
  dplyr::slice_head(n = 3) |>
  dplyr::select(species, flipper_length_mm, body_mass_g) |>
  knitr::kable(col.names = c("Druh", "Délka ploutve (mm)", "Hmotnost (g)"))
```
:::
::: {.column width="41%"}
::: {.box-question}
[Jeden řádek = jeden tučňák]{.panel-title}

Které dvě hodnoty z jednoho řádku vytvoří jeden bod grafu?
:::
:::
::::

::: {.footer}
Data: palmerpenguins 0.1.1, CC0. Celkem `r nrow(data_puvodni)` řádků.
:::

## Úplné dvojice v R

:::: {.columns .align-top}
::: {.column width="58%"}
```{r}
#| label: nacist-a-sparovat-tucnaky-v-r
#| echo: true
#| eval: false
data_puvodni <-
  read.csv(
    file = "data/palmer_penguins.csv",
    na.strings = ""
  )
vec_uplne <-
  complete.cases(
    data_puvodni$flipper_length_mm,
    data_puvodni$body_mass_g
  )
data_pary <- data_puvodni[vec_uplne, ]
data_tucnaci <-
  data.frame(
    druh_tucnaka = data_pary$species,
    ostrov = data_pary$island,
    delka_ploutve_mm = data_pary$flipper_length_mm,
    hmotnost_g = data_pary$body_mass_g
  )
```
:::
::: {.column width="38%"}
<br>

`r nrow(data_puvodni)` řádků

`r nrow(data_puvodni) - nrow(data_tucnaci)` řádky bez obou měření

**`r nrow(data_tucnaci)` úplných dvojic**

::: {.takeaway-strip .strip-compact .fragment}
Neúplný řádek vynecháme celý, aby se dvojice měření nerozpojila.
:::
:::
::::

::: {.footer}
[CSV Palmer Penguins](../data/palmer_penguins.csv): uložte do složky `data` ve svém projektu v R.
:::

::: {.notes}
complete.cases zachová pouze řádky se známou délkou i hmotností. Složka data a soubor CSV jsou součástí materiálů; před praktickým kopírováním kódu ověřím umístění souboru. Druh a ostrov ponecháváme jako skupiny, ne jako číselné osy.
:::

## Dva tučňáci

```{r}
#| label: pripravit-ctyri-pozorovane-tucnaky
#| include: false
#| message: false
#| warning: false
data_maly_priklad_vztahu <-
  data_tucnaci |>
  dplyr::filter(druh_tucnaka == "Adelie") |>
  dplyr::slice(c(1, 2, 9, 14)) |>
  dplyr::select(delka_ploutve_mm, hmotnost_g)
```


:::: {.columns .align-top}

::: {.column width="52%"}

```{r}
#| label: kod-dva-body-v-r
#| echo: true
#| eval: false
vec_delka_ploutve_mm <-
  c(181, 186)

vec_hmotnost_g <-
  c(3750, 3800)

plot(
  x = vec_delka_ploutve_mm,
  y = vec_hmotnost_g,
  xlab = "Délka ploutve (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16
)
```

:::

::: {.column width="48%"}


```{r}
#| label: vytvorit-scatter-dva-body
#| include: false
#| message: false
#| warning: false
plot_dva_body <-
  ggplot2::ggplot(
    data = data_maly_priklad_vztahu[1:2, ],
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    size = 3.4,
    alpha = 0.9
  ) +
  ggplot2::geom_text(
    data = data_maly_priklad_vztahu[1:2, ],
    mapping = ggplot2::aes(
      label = paste0("Tučňák ", 1:2)
    ),
    nudge_x = 0,
    nudge_y = -70,
    size = 3,
    colour = biostat_cols["orange"]
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggplot2::coord_cartesian(
    xlim = c(178, 201),
    ylim = c(3600, 4600)
  ) +
  ggview::canvas(
    width = 800,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_dva_body,
  file = here::here(path_materials, "dva_body_bodovy_graf.png")
)
```

```{r}
#| label: zobrazit-dva-body
#| fig-alt: "Bodový graf se dvěma tučňáky označenými Tučňák 1 a Tučňák 2; každý bod spojuje délku ploutve a hmotnost jednoho jedince."
#| echo: false
#| out.width: "92%"
include_local_figure("dva_body_bodovy_graf.png")
```

:::

::::

## Čtyři tučňáci

:::: {.columns .align-top}

::: {.column width="52%"}

```{r}
#| label: kod-ctyri-body-v-r
#| echo: true
#| eval: true
#| fig-show: hide
vec_delka_ploutve_mm <-
  c(181, 186, 190, 198)

vec_hmotnost_g <-
  c(3750, 3800, 4250, 4400)

plot(
  x = vec_delka_ploutve_mm,
  y = vec_hmotnost_g,
  xlab = "Délka ploutve (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16
)
```

```{r}
#| label: overit-ctyri-tucnaky-v-kodu
#| include: false
# The typed teaching vectors must match the observed four-penguin subset.
stopifnot(
  isTRUE(all.equal(vec_delka_ploutve_mm, data_maly_priklad_vztahu$delka_ploutve_mm)),
  isTRUE(all.equal(vec_hmotnost_g, data_maly_priklad_vztahu$hmotnost_g))
)
```

:::

::: {.column width="48%"}

```{r}
#| label: vytvorit-scatter-ctyri-body
#| include: false
#| message: false
#| warning: false
plot_maly_bodovy <-
  ggplot2::ggplot(
    data = data_maly_priklad_vztahu,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    size = 3.4,
    alpha = 0.9
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggplot2::coord_cartesian(
    xlim = c(178, 201),
    ylim = c(3600, 4600)
  ) +
  ggview::canvas(
    width = 800,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_maly_bodovy,
  file = here::here(path_materials, "maly_bodovy_graf.png")
)
```

```{r}
#| label: zobrazit-ctyri-body
#| fig-alt: "Bodový graf čtyř tučňáků druhu Adelie; s delší ploutví roste i hmotnost."
#| echo: false
#| out.width: "92%"
include_local_figure("maly_bodovy_graf.png")
```

:::

::::

## Všichni tučňáci

:::: {.columns .align-top}

::: {.column width="40%"}

<br>

```{r}
#| label: kod-vsech-tucnaku-v-r
#| echo: true
#| eval: false
plot(
  x = data_tucnaci$delka_ploutve_mm,
  y = data_tucnaci$hmotnost_g,
  xlab = "Délka ploutve (mm)",
  ylab = "Tělesná hmotnost (g)",
  pch = 16
)
```

:::

::: {.column width="60%"}

```{r}
#| label: vytvorit-prvni_bodovy_graf
#| include: false
#| message: false
#| warning: false
plot_prvni_bodovy <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.72,
    size = 2
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggview::canvas(
    width = 1600,
    height = 1000,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_prvni_bodovy,
  file = here::here(path_materials, "prvni_bodovy_graf.png")
)
```

```{r}
#| label: zobrazit-vsechny-tucnaky
#| fig-alt: "Bodový graf všech tučňáků s úplnými měřeními: oblak bodů roste zleva dole doprava nahoru, ale je široký."
#| echo: false
include_local_figure("prvni_bodovy_graf.png")
```

:::

::::

## Co v tomto grafu vidíte?

:::: {.columns .align-top}

::: {.column width="50%"}
```{r}
#| ref.label: "zobrazit-vsechny-tucnaky"
#| fig-alt: "Bodový graf všech tučňáků s úplnými měřeními: oblak bodů roste zleva dole doprava nahoru, ale je široký."
#| echo: false
```
:::

::: {.column width="50%"}

<br>

:::{.box-result .incremental}

- [Směr]{.text-hgl-indigo_velvet}: rostoucí

<br>

- [Rozptýlení]{.text-hgl-orange}: oblak zůstává široký

<br>

- [Závěr]{.text-bold}: vzor vidíme, příčinu z grafu neurčíme

:::
:::

::::

::: {.notes}
Tady zpomalím čtení grafu. Nejdřív se ptám: vypadají body náhodně, nebo mají směr? Potom: jak těsný je vztah? Důležité je, aby studenti neodcházeli jen s větou "je tam pozitivní korelace", ale s vizuální představou oblaku bodů.

Mluvené rozvinutí: body nejsou rozházené náhodně, hlavní směr oblaku je rostoucí, ale vztah není dokonale těsný. Při podobné délce ploutve pořád vidíme různou hmotnost. To je první kontakt s variabilitou ve vztahu dvou proměnných.
:::

## Stejná data, jiné osy

```{r}
#| label: vytvorit-scatter-zakladni
#| include: false
#| message: false
#| warning: false
plot_osy_dummy <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.7,
    size = 1.8
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  )

plot_standard_osy <-
  plot_osy_dummy +
  ggplot2::labs(subtitle = "Délka ploutve na ose x")

plot_prohozene_osy <-
  plot_osy_dummy +
  ggplot2::aes(
    x = hmotnost_g,
    y = delka_ploutve_mm
  ) +
  ggplot2::labs(
    x = "Tělesná hmotnost (g)",
    y = "Délka ploutve (mm)",
    subtitle = "Hmotnost na ose x"
  )

plot_jine_osy <-
  cowplot::plot_grid(
    plot_standard_osy,
    plot_prohozene_osy,
    ncol = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 700,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_jine_osy,
  file = here::here(path_materials, "stejna_data_jine_osy.png")
)
```


```{r}
#| label: zobrazit-jine-osy
#| echo: false
#| fig-alt: "Dva bodové grafy stejných tučňáků: vlevo je délka ploutve na vodorovné ose a hmotnost na svislé, vpravo jsou osy prohozené. V obou grafech oblak bodů roste."
include_local_figure("stejna_data_jine_osy.png")
```

::: {.box-question}
Změnil se vztah mezi délkou ploutve a hmotností, když jsme osy prohodili?
:::

::: {.takeaway-strip .strip-compact .fragment}
Oblak se jen zrcadlově převrátí podle úhlopříčky. Směr ani těsnost vztahu se nezmění; tytéž dvojice měření zůstávají spojené.
:::

## Rozptýlení čteme ve dvou směrech

```{r}
#| label: pripravit-data-rozptyl
#| include: false
#| message: false
#| warning: false
highlight_delka <- 190L
highlight_hmotnost <- 4000L
strip_delka_lwr <- highlight_delka - 2
strip_delka_upr <- highlight_delka + 2
strip_hmotnost_lwr <- highlight_hmotnost - 200L
strip_hmotnost_upr <- highlight_hmotnost + 200L

data_rozptyl <-
  data_tucnaci |>
  dplyr::mutate(
    in_strip_delka = delka_ploutve_mm >= strip_delka_lwr &
      delka_ploutve_mm <= strip_delka_upr,
    in_strip_hmotnost = hmotnost_g >= strip_hmotnost_lwr &
      hmotnost_g <= strip_hmotnost_upr
  )
```

```{r}
#| label: vytvorit-rozptyl
#| include: false
#| message: false
#| warning: false
plot_rozptyl_delka <-
  plot_osy_dummy +
  ggplot2::geom_vline(
    xintercept = highlight_delka,
    colour = biostat_cols["orange"],
    linetype = "dashed"
  ) +
  ggplot2::annotate(
    "rect",
    xmin = strip_delka_lwr,
    xmax = strip_delka_upr,
    ymin = -Inf,
    ymax = Inf,
    fill = biostat_cols["orange"],
    alpha = 0.15
  ) +
  ggplot2::geom_point(
    data = dplyr::filter(data_rozptyl, in_strip_delka),
    colour = biostat_cols["orange"],
    alpha = 0.9,
    size = 2.4
  )

plot_rozptyl_hmotnost <-
  plot_osy_dummy +
  ggplot2::geom_hline(
    yintercept = highlight_hmotnost,
    colour = biostat_cols["orange"],
    linetype = "dashed"
  ) +
  ggplot2::annotate(
    "rect",
    xmin = -Inf,
    xmax = Inf,
    ymin = strip_hmotnost_lwr,
    ymax = strip_hmotnost_upr,
    fill = biostat_cols["orange"],
    alpha = 0.15
  ) +
  ggplot2::geom_point(
    data = dplyr::filter(data_rozptyl, in_strip_hmotnost),
    colour = biostat_cols["orange"],
    alpha = 0.9,
    size = 2.4
  )

plot_rozptyl_highlight <-
  cowplot::plot_grid(
    plot_rozptyl_delka,
    plot_rozptyl_hmotnost,
    ncol = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 600,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_rozptyl_highlight,
  file = here::here(path_materials, "plot_rozptyl_highlight.png")
)
```


```{r}
#| label: zobrazit-rozptyl-delka-vedle
#| echo: false
#| fig-alt: "Dva stejné bodové grafy tučňáků. Vlevo je oranžově zvýrazněný svislý pás tučňáků s podobnou délkou ploutve, jejichž hmotnosti se liší o stovky gramů. Vpravo je vodorovný pás tučňáků s podobnou hmotností, jejichž délky ploutve se liší."
include_local_figure("plot_rozptyl_highlight.png")
```

:::: {.columns .text-center}

::: {.column width="50%"}
Podobná délka ploutve, různá [hmotnost]{.text-color-orange}
:::

::: {.column width="50%"}
Podobná hmotnost, různá [délka ploutve]{.text-color-orange}
:::

::::

::: {.takeaway-strip .strip-compact .fragment}
Když čteme bodový graf, díváme se současně na [směr vztahu]{.text-bold} i na to, jak široký oblak zůstává v obou směrech.
:::

::: {.notes}
Tento slide je interpretace evidence, ne nový pojem. Vysvětlím, že rozptýlení v bodovém grafu jde číst dvěma praktickými otázkami: když je délka ploutve podobná, jak moc se liší hmotnost? A když je hmotnost podobná, jak moc se liší délka ploutve? Slovo rozptyl si necháváme pro výběrový rozptyl z minulé lekce.
:::

##

::: {.box-question}
[Co už můžeme tvrdit? Která formulace je v této chvíli nejlepší?]{.panel-lead}
:::

<br>

:::: {.columns .align-top}

::: {.column width="31%"}
::: {.card-question}
[A]{.card-title}

V grafu je vidět vztah, takže jsme prokázali příčinu.
:::
:::

::: {.column width="31%"}
::: {.card-question}
[B]{.card-title}

[V datech je vidět biologicky smysluplný vzor, který chceme popsat přesněji.]{.rn-circle-orange}
:::
:::

::: {.column width="31%"}
::: {.card-question}
[C]{.card-title}

Protože body neleží na jedné přímce, mezi proměnnými žádný vztah není.
:::
:::

::::

<br>

::: {.panel-olive}
Než hlasujeme: přesvědčte souseda, proč jste vybrali svoji možnost.
:::

::: {.notes}
Správná odpověď je B. Důležité je nepředznačit ji dřív, než studenti stihnou volbu obhájit. Pokud nepoužiju hlasování, každý si doplní větu a pak ji porovná se sousedem. Odpověď rozvede následující snímek s biologickou otázkou.
:::

## Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost?

::: {.box-question}
*Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost?*
:::

<br>

:::: {.columns .fragment}

::: {.column width="50%"}
::: {.strip-indigo}
[Signál]{.text-hgl-indigo_velvet}

Delší ploutve **bývají spojeny** s vyšší hmotností.
:::
:::

::: {.column width="50%"}
::: {.strip-orange}
[Rozptýlení]{.text-hgl-orange}

Vztah **není** dokonale těsný.
:::
:::

::::

<br>

::: {.box-warning .fragment}
[POZOR]{.card-title}
Graf popisuje asociaci; její příčinu ani nejistotu z tohoto obrázku neurčíme.
:::

::: {.notes}
Mluvený závěr: na biologickou otázku už umíme odpovědět opatrně. Ano, v datech je biologicky smysluplný rostoucí vzor. Ne, ještě jsme neodhadli efekt a neřekli nic o nejistotě. Tím připravuji půdu pro korelaci jako souhrn a pro modelový krok v následující lekci.
:::

## Stejná data, ale s druhem

```{r}
#| label: pripravit-paletu-druhu
#| include: false
#| message: false
#| warning: false
# Species colours follow the palmerpenguins dataset's own established palette
# (https://allisonhorst.github.io/palmerpenguins/), kept by decision of
# O. Mottl (2026-10-06) as a documented exception to the _brand categorical
# palette. Species are groups here, not semantic data/model/focus roles.
barvy_druhu <-
  c(Adelie = "darkorange", Chinstrap = "mediumpurple", Gentoo = "cyan4")
```


```{r}
#| label: vytvorit-scatter-druhy
#| include: false
#| message: false
#| warning: false
plot_druhy <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g,
      colour = druh_tucnaka
    )
  ) +
  ggplot2::scale_colour_manual(
    values = barvy_druhu,
    name = "Druh"
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggplot2::theme(
    legend.position = "right"
  ) +
  ggplot2::geom_point(
    alpha = 0.72,
    size = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_druhy,
  file = here::here(path_materials, "graf_podle_druhu.png")
)
```


```{r}
#| label: zobrazit-graf-podle-druhu
#| echo: false
#| fig-alt: "Bodový graf délky ploutve a hmotnosti, body obarvené podle druhu: Adelie a Chinstrap tvoří překrývající se shluk vlevo dole, Gentoo samostatný shluk vpravo nahoře."
include_local_figure("graf_podle_druhu.png")
```

## Co se po obarvení změnilo?

<br>

:::: {.columns}

::: {.column width="55%"}

::: {.box-result .incremental}
[Biologická logika platí i po obarvení podle druhu]{.panel-title}

- [Směr]{.text-hgl-indigo_velvet} oblaku zůstává kladný
    - *tučňáci s delší ploutví bývají těžší*
- [Rozptýlení]{.text-hgl-orange} má biologickou strukturu
    - část variability pochází z míchání více druhů
:::

:::

::: {.column width="45%"}

```{r}
#| ref.label: "zobrazit-graf-podle-druhu"
#| fig-alt: "Bodový graf délky ploutve a hmotnosti, body obarvené podle druhu: Adelie a Chinstrap tvoří překrývající se shluk vlevo dole, Gentoo samostatný shluk vpravo nahoře."
#| echo: false
```

:::

::::

## Jedno číslo pro společný pohyb

<br>

::: {.box-question .text-bold}
[Co by takové číslo muselo umět?]{.panel-lead}
:::

<br>

::: {.panel-olive}
[Řekněte sousedovi aspoň jednu vlastnost]{.panel-title}

30 s každý — pak porovnejte, co jste vymysleli.
:::

<br>

::: {.takeaway-strip .fragment}
Zachytit [směr]{.text-hgl-indigo_velvet} a [těsnost]{.text-hgl-orange} vztahu a nezáviset na tom, v jakých jednotkách měříme.
:::

::: {.notes}
Toto je aktivní přechod od grafu k číslu. Neptám se ještě na název korelace. Ptám se, jaké vlastnosti by dobrý souhrn musel mít: zachytit směr, reagovat na rozptýlení a nedávat úplně jiné číslo jen proto, že délku přepočítáme z milimetrů na centimetry. Odpověď odkryji až po sdílení ve dvojicích.
:::

# Jak spočítat společný pohyb?

## Průměry v grafu {.text-center}

```{r}
#| label: vytvorit-kovariance
#| include: false
#| message: false
#| warning: false
prumer_delka <-
  mean(data_tucnaci$delka_ploutve_mm)

prumer_hmotnost <-
  mean(data_tucnaci$hmotnost_g)

plot_kovariance_stred_prazdny <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_vline(
    xintercept = prumer_delka,
    linetype = "dashed",
    colour = biostat_cols["grey_olive"],
    linewidth = 0.8
  ) +
  ggplot2::geom_hline(
    yintercept = prumer_hmotnost,
    linetype = "dashed",
    colour = biostat_cols["grey_olive"],
    linewidth = 0.8
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggview::canvas(
    width = 1600,
    height = 800,
    units = "px"
  )

plot_kovariance_stred <-
  plot_kovariance_stred_prazdny +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.62,
    size = 1.8
  )

ggview::save_ggplot(
  plot = plot_kovariance_stred,
  file = here::here(path_materials, "kovariance_stred.png")
)
```

```{r}
#| label: zobrazit-kovarianci-stred
#| fig-alt: "Bodový graf tučňáků se dvěma přerušovanými čarami: svislá v průměrné délce ploutve a vodorovná v průměrné hmotnosti; rozdělují graf na čtyři části."
#| echo: false
include_local_figure("kovariance_stred.png")
```

::: {.takeaway-strip .strip-compact}
Střed grafu určíme dvěma průměry: délka `r round(prumer_delka, 1)` mm, hmotnost `r round(prumer_hmotnost, 0)` g.
:::

::: {.notes}
Tady nechci odvozovat vzorec, jen ukázat geometrický nápad. Průměr délky a průměr hmotnosti rozdělí graf na čtyři části. Poloha bodu vůči středu říká, jestli je jedinec nad nebo pod průměrem v obou proměnných.
:::

## Jeden bod pod lupou {.text-center}

```{r}
#| label: vytvorit-bod-lupou
#| include: false
#| message: false
#| warning: false
idx_bod <-
  which(
    data_tucnaci$delka_ploutve_mm > prumer_delka &
      data_tucnaci$hmotnost_g > prumer_hmotnost
  )[10]

bod_x <- data_tucnaci$delka_ploutve_mm[idx_bod]
bod_y <- data_tucnaci$hmotnost_g[idx_bod]

plot_bod_lupou <-
  plot_kovariance_stred +
  ggplot2::annotate(
    "segment",
    x = prumer_delka,
    xend = bod_x,
    y = bod_y,
    yend = bod_y,
    colour = biostat_cols["orange"],
    linewidth = 1
  ) +
  ggplot2::annotate(
    "segment",
    x = bod_x,
    xend = bod_x,
    y = prumer_hmotnost,
    yend = bod_y,
    colour = biostat_cols["orange"],
    linewidth = 1
  ) +
  ggplot2::annotate(
    "point",
    x = bod_x,
    y = bod_y,
    colour = biostat_cols["orange"],
    size = 4,
    alpha = 1
  )

ggview::save_ggplot(
  plot = plot_bod_lupou,
  file = here::here(path_materials, "bod_lupou.png")
)
```


```{r}
#| label: zobrazit-bod-lupou
#| echo: false
#| fig-alt: "Bodový graf s přerušovanými čarami průměrů. Jeden oranžový bod vpravo nahoře je spojen se středními čarami dvěma úsečkami, které ukazují jeho odchylku od průměrné délky ploutve a od průměrné hmotnosti."
include_local_figure("bod_lupou.png")
```

::: {.box-result}
[Bod nad průměrem v obou proměnných]{.panel-title}

Obě odchylky jsou kladné → jejich **součin** je také **kladný**.

:::

::: {.notes}
Mluveně doplním aritmetiku: tento tučňák má delší ploutev než průměr a vyšší hmotnost než průměr. Obě odchylky jsou kladné, takže jejich součin je kladný. Nemusím na slide dávat celý výpočet; jde o znaménko součinu.
:::


## 

```{r}
#| label: vytvorit-kovariance-kvadraty
#| include: false
#| message: false
#| warning: false
x_min <- min(data_tucnaci$delka_ploutve_mm) - 2
x_max <- max(data_tucnaci$delka_ploutve_mm) + 2
y_min <- min(data_tucnaci$hmotnost_g) - 200
y_max <- max(data_tucnaci$hmotnost_g) + 200

x_one_third <- (x_min + prumer_delka) / 2
x_two_third <- (x_max + prumer_delka) / 2
y_one_third <- (y_min + prumer_hmotnost) / 2
y_two_third <- (y_max + prumer_hmotnost) / 2

plot_kovariance_kvadranty <-
  plot_kovariance_stred_prazdny +
  ggplot2::theme(
    axis.text = ggplot2::element_blank(),
    axis.ticks = ggplot2::element_blank()
  ) +
  # Standard Cartesian numbering: I top right, then counter-clockwise.
  ggplot2::annotate(
    "text",
    x = c(x_two_third, x_one_third, x_one_third, x_two_third),
    y = c(y_two_third, y_two_third, y_one_third, y_one_third),
    label = c("I.", "II.", "III.", "IV."),
    size = 9,
    colour = biostat_cols["graphite"]
  ) +
  ggplot2::coord_cartesian(
    xlim = c(x_min, x_max),
    ylim = c(y_min, y_max),
    expand = FALSE
  )

ggview::save_ggplot(
  plot = plot_kovariance_kvadranty,
  file = here::here(path_materials, "kovariance_kvadranty.png")
)
```

```{r}
#| label: zobrazit-kovarianci-kvadranty
#| echo: false
#| fig-alt: "Prázdný graf rozdělený přerušovanými čarami průměrné délky ploutve a průměrné hmotnosti na čtyři kvadranty: I. vpravo nahoře, II. vlevo nahoře, III. vlevo dole a IV. vpravo dole."
include_local_figure("kovariance_kvadranty.png")
```



::: {.notes}
Bod z předchozího snímku byl v pravém horním kvadrantu. Teď nechám studenty doplnit, která další část grafu bude mít stejnou logiku. Chci, aby si nejdřív představili znaménka, ne aby memorovali vzorec.
:::


## Ve které další části grafu budou součiny také kladné? {.text-center}

```{r}
#| ref.label: "zobrazit-kovarianci-kvadranty"
#| out-height: "300px"
#| fig-alt: "Prázdný graf rozdělený přerušovanými čarami průměrné délky ploutve a průměrné hmotnosti na čtyři kvadranty: I. vpravo nahoře, II. vlevo nahoře, III. vlevo dole a IV. vpravo dole."
#| echo: false
```

:::: {.columns}

::: {.column width="32%"}
::: {.box-question}
[[I. a III. kvadrant]{.rn-circle-orange}]{.panel-lead}

Vpravo nahoře a vlevo dole.
:::
:::

::: {.column width="32%"}
::: {.box-question}
[II. a IV. kvadrant]{.panel-lead}

Vlevo nahoře a vpravo dole.
:::
:::

::: {.column width="32%"}
::: {.box-question}
[Všechny čtyři stejně]{.panel-lead}

Na poloze vůči středu nezáleží.
:::
:::

::::

::: {.panel-olive}
Než hlasujeme: vysvětlete sousedovi znaménka obou odchylek v jedné možnosti.
:::

::: {.notes}
Správně je I. a III. kvadrant. Popisky možností záměrně neprozrazují znaménka; nechám je obhájit znaménka: vpravo nahoře je délka nad průměrem a hmotnost nad průměrem; vlevo dole jsou obě pod průměrem. V obou případech je součin kladný.
:::



## Čtyři tučňáci ručně

:::: {.columns .align-top}

::: {.column width="35%"}
```{r}
#| ref.label: "zobrazit-ctyri-body"
#| fig-alt: "Bodový graf čtyř tučňáků druhu Adelie; s delší ploutví roste i hmotnost."
#| echo: false
```

::: {.strip-olive .strip-compact .fragment}
Průměry:

Délka ploutve: **`r format(mean(data_maly_priklad_vztahu$delka_ploutve_mm), decimal.mark = ",")`** mm

Hmotnost: **`r format(mean(data_maly_priklad_vztahu$hmotnost_g), decimal.mark = ",")`** g
:::
:::

::: {.column width="58%" .fragment}

```{r}
#| label: tabulka-data-kovariance
#| include: true
#| message: false
#| warning: false
data_maly_priklad_vztahu_kovariance <-
  data_maly_priklad_vztahu |>
  dplyr::mutate(
    odchylka_delka = delka_ploutve_mm - mean(data_maly_priklad_vztahu$delka_ploutve_mm),
    odchylka_hmotnost = hmotnost_g - mean(data_maly_priklad_vztahu$hmotnost_g)
  ) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::everything(),
      ~ round(.x, 2)
    )
  )

data_maly_priklad_vztahu_kovariance |>
  rlang::set_names(
    nm = c(
      "Délka",
      "Hmotnost",
      "Délka \nodch.",
      "Hmotnost \nodch."
    )
  ) |>
  tinytable::tt() |>
  tinytable::format_tt(digits = 5, num_fmt = "significant_cell", num_mark_dec = ",")
```



:::

::::

## Kovariance je „průměr součinů odchylek“

```{r}
#| label: pripravit-data-kovariance-maly-priklad
#| include: false
#| message: false
#| warning: false
data_maly_priklad_vztahu_kovariance <-
  data_maly_priklad_vztahu_kovariance |>
  dplyr::mutate(soucin = odchylka_delka * odchylka_hmotnost)
vec_soucin <- sum(data_maly_priklad_vztahu_kovariance$soucin)
vec_pocet_pozorovani_minus_one <- nrow(data_maly_priklad_vztahu) - 1
vec_kovariance <- vec_soucin / vec_pocet_pozorovani_minus_one

```

<br>

::: {.takeaway-strip .strip-compact .fragment}
kovariance = **součet součinů odchylek** / (**počet pozorování** − 1)

Kovariance sčítá součiny odchylek. Rozhoduje [znaménko i velikost]{.text-hgl-indigo_velvet} každého součinu, nikoli samotný počet bodů v kvadrantech.
:::

<br>

:::: {.columns}

::: {.column width="45%" .fragment}

```{r}
#| label: tabulka-data-kovariance-soucin
#| include: true
#| message: false
#| warning: false
data_maly_priklad_vztahu_kovariance |>
  dplyr::select(-c(delka_ploutve_mm, hmotnost_g)) |>
  rlang::set_names(
    nm = c(
      "Délka \nodch.",
      "Hmotnost \nodch.",
      "Součin"
    )
  ) |>
  tinytable::tt() |>
  tinytable::format_tt(digits = 5, num_fmt = "significant_cell", num_mark_dec = ",")
```


:::

::: {.column width="2%"}

:::

::: {.column width="53%" .fragment}

<br>

[součet součinů odchylek = `r format(vec_soucin, decimal.mark = ",")`]{.fragment}

[počet pozorování − 1 = `r vec_pocet_pozorovani_minus_one`]{.fragment}

:::

::::

::: {.fragment}
kovariance = `r format(vec_soucin, decimal.mark = ",")` / `r vec_pocet_pozorovani_minus_one` ≈ **`r formatC(vec_kovariance, format = "f", digits = 2, decimal.mark = ",")` mm·g**
:::

::: {.notes}
Vzorec říkám mluveně: součet součinů odchylek dělený počtem pozorování minus jedna. Na slidu nechávám hlavně tabulku a výsledné číslo. Cíl je pochopit znaménko a logiku, ne mechanicky opisovat kovarianci.
:::

## Odchylky a jejich součiny v R

```{r}
#| label: vypocitat-odchylky-v-r
#| echo: true
#| eval: true
vec_prumer_delky <-
  mean(x = vec_delka_ploutve_mm)
vec_prumer_hmotnosti <-
  mean(x = vec_hmotnost_g)
vec_odchylka_delky <-
  vec_delka_ploutve_mm - vec_prumer_delky
vec_odchylka_hmotnosti <-
  vec_hmotnost_g - vec_prumer_hmotnosti
vec_souciny <-
  vec_odchylka_delky * vec_odchylka_hmotnosti
```

::: {.takeaway-strip}
Každý součin patří jednomu ze stejných čtyř pozorovaných tučňáků.
:::

::: {.notes}
Vektory jsou vytvořené na slidu Čtyři tučňáci. Studenti mohou přehrát stejné příkazy bez skrytého datového objektu. Připomenu soulad pořadí jedinců v obou vektorech.
:::

## Stejný výpočet pomocí `cov()`

<br>

:::: {.columns}

::: {.column width="50%"}

::: {.fragment}
```{r}
#| label: kovariance-maly-priklad-manualne
#| echo: true
#| eval: true
#| output-location: fragment
vec_soucin <-
  sum(vec_souciny)
vec_pocet_minus_jedna <-
  length(x = vec_souciny) - 1
vec_kovariance <-
  vec_soucin / vec_pocet_minus_jedna
vec_kovariance
```
:::

:::


::: {.column width="50%" .fragment}
```{r}
#| label: kovariance-maly-priklad-funkce
#| echo: true
#| eval: true
#| output-location: fragment
vec_kovariance <-
  cov(
    x = vec_delka_ploutve_mm,
    y = vec_hmotnost_g
  )
vec_kovariance
```

:::

::::

::: {.notes}
Tenhle slide je most do R: ruční výpočet a `cov()` dávají totéž. Při živé výuce bych ho ukázal rychle, ne jako samostatnou minilekci o kovarianci. Pokud bude málo času, stačí říct, že funkce automatizuje stejný součet příspěvků, a přejít na problém jednotek.
:::

## Záleží na jednotkách?

```{r}
#| label: pripravit-kovariance-jednotky
#| include: false
#| message: false
#| warning: false
kovariance_mm_g <-
  cov(
    x = data_tucnaci$delka_ploutve_mm,
    y = data_tucnaci$hmotnost_g
  )

kovariance_cm_kg <-
  cov(
    x = data_tucnaci$delka_ploutve_mm / 10,
    y = data_tucnaci$hmotnost_g / 1000
  )

kovariance_mm_g_txt <-
  formatC(
    kovariance_mm_g,
    format = "f",
    digits = 0,
    big.mark = " ",
    decimal.mark = ","
  )

kovariance_cm_kg_txt <-
  formatC(
    kovariance_cm_kg,
    format = "f",
    digits = 3,
    decimal.mark = ","
  )
```

::: {.box-question}
[Co se stane s kovariancí, když délku ploutve přepočteme na centimetry a hmotnost na kilogramy?]{.panel-lead}

Stejní tučňáci: všech `r nrow(data_tucnaci)` úplných dvojic.
:::

<br>

:::: {.columns .fragment}

::: {.column width="50%"}
::: {.strip-olive .strip-compact}
[V milimetrech a gramech]{.text-bold}

Kovariance: `r kovariance_mm_g_txt` (mm·g)
:::
:::

::: {.column width="50%"}
::: {.strip-olive .strip-compact}
[V centimetrech a kilogramech]{.text-bold}

Kovariance: `r kovariance_cm_kg_txt` (cm·kg)
:::
:::

::::

<br>

::: {.takeaway-strip .fragment}
Směr vztahu se nezměnil, ale číslo ano. Proto chceme [bezrozměrný souhrn]{.text-color-indigo_velvet .text-bold}: korelaci.
:::

::: {.notes}
Nejdřív nechám studenty odhadnout, co se s číslem stane, a teprve potom odkryji obě hodnoty. Pointa: i když biologický vztah zůstává stejný, hodnota kovariance se mění s jednotkami. Tím přirozeně vzniká potřeba korelace jako bezrozměrného souhrnu.
:::

# Číslo nezávislé na jednotkách

## Kovariance bez jednotek: Pearsonovo *r*

<br>

:::: {.columns .align-top}

::: {.column width="48%"}
::: {.panel-result}
[Pearsonova korelace]{.panel-title}

*r* = kovariance / (SD délky ploutve × SD hmotnosti)

Jednotky v čitateli i jmenovateli se vykrátí.
:::
:::

::: {.column width="4%"}
:::

::: {.column width="48%"}
::: {.incremental}
- *r* leží vždy mezi −1 a 1
- [znaménko]{.text-hgl-indigo_velvet} ukazuje směr vztahu
- čím blíž ±1, tím [těsněji]{.text-hgl-orange} leží body u přímky
- v R: `cor()`
:::
:::

::::

<br>

::: {.takeaway-strip .fragment}
*r* je [doplněk ke grafu]{.text-color-indigo_velvet .text-bold}, ne jeho náhrada.
:::

::: {.notes}
Směrodatnou odchylku znají studenti z minulé lekce. Vydělením kovariance oběma SD zmizí jednotky, proto stejný vztah v mm a g i v cm a kg dá stejné r. Odvození krok za krokem je ve skriptech.
:::

## Odhadněte korelaci {.text-center}

```{r}
#| label: vytvorit-kalibraci
#| include: false
#| message: false
#| warning: false
set.seed(900723)

n_kal <- 100

# Teaching inputs: target correlations in the shuffled panel order A-D.
r_hodnoty <- c(A = 0.80, B = 0.20, C = 0.95, D = 0.50)

data_kalibrace <-
  purrr::map(
    r_hodnoty,
    \(r_val) generate_corr_data(r = r_val, n = n_kal)
  )

plot_kalibrace_bez_r <-
  cowplot::plot_grid(
    plotlist = purrr::imap(
      data_kalibrace,
      \(data_panel, pismeno) make_kal_plot(data_panel, pismeno, show_r = FALSE)
    ),
    ncol = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 900,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_kalibrace_bez_r,
  file = here::here(path_materials, "kalibrace_korelace_odhad.png")
)
```

```{r}
#| label: zobrazit-kalibraci-bez-r
#| echo: false
#| out-height: "460px"
#| fig-alt: "Čtyři bodové grafy označené A až D s různě těsným rostoucím oblakem bodů, bez uvedené hodnoty korelace."
include_local_figure("kalibrace_korelace_odhad.png")
```

::: {.box-question}
Seřaďte grafy A–D od nejslabšího po nejtěsnější vztah. Jaké *r* odhadujete pro nejtěsnější z nich?
:::

::: {.notes}
Krátké hlasování rukou nebo dvojice: nejdřív pořadí, potom odhad čísla. Hodnoty odkryje následující snímek se stejnými body.
:::

## Stejná data, ale s hodnotou *r* {.text-center}

```{r}
#| label: vytvorit-kalibraci-s-r
#| include: false
#| message: false
#| warning: false
plot_kalibrace <-
  cowplot::plot_grid(
    plotlist = purrr::imap(
      data_kalibrace,
      \(data_panel, pismeno) make_kal_plot(data_panel, pismeno, show_r = TRUE)
    ),
    ncol = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 900,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_kalibrace,
  file = here::here(path_materials, "kalibrace_korelace.png")
)
```

```{r}
#| label: zobrazit-kalibraci
#| echo: false
#| out-height: "460px"
#| fig-alt: "Stejné čtyři bodové grafy A až D, nyní s korelací spočtenou z bodů; čím těsněji body leží podél přímky, tím je r blíže jedné."
include_local_figure("kalibrace_korelace.png")
```

::: {.takeaway-strip .strip-compact .fragment}
Čím těsněji body leží podél přímky, tím blíž je *r* k 1.
:::

::: {.footer}
Zkonstruované výukové příklady; popisky uvádějí korelaci spočtenou ze zobrazených bodů.
:::

## Výš v horách, chladněji?

```{r}
#| label: pripravit-vektory-zaporna-korelace
#| include: false
#| message: false
#| warning: false
x_neg <-
  seq(1, 10, length.out = 12)

y_neg <-
  c(6.0, 5.8, 5.5, 5.2, 4.7, 4.5, 4.2, 3.9, 3.4, 3.2, 2.8, 2.5)
```

```{r}
#| label: vytvorit-zapornou-korelaci
#| include: false
#| message: false
#| warning: false
set.seed(900723)
vec_noise <- rnorm(
  length(x_neg),
  mean = 0, sd = 1
)

data_nadmorska <-
  tibble::tibble(
    nadmorska_vyska_m = round((x_neg + vec_noise) * 90 + 200),
    prumerna_teplota_c = round(y_neg * 2.4 + 5.5, 1)
  )

pearson_nadmorska_txt <-
  formatC(
    cor(
      x = data_nadmorska$nadmorska_vyska_m,
      y = data_nadmorska$prumerna_teplota_c,
      method = "pearson"
    ),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )

plot_zaporna_korelace <-
  ggplot2::ggplot(
    data = data_nadmorska,
    mapping = ggplot2::aes(
      x = nadmorska_vyska_m,
      y = prumerna_teplota_c
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.75,
    size = 2.5
  ) +
  ggplot2::geom_smooth(
    method = "lm",
    formula = y ~ x,
    se = FALSE,
    colour = biostat_cols["indigo_velvet"],
    linewidth = 1.3
  ) +
  ggplot2::labs(
    x = "Nadmořská výška (m)",
    y = "Průměrná teplota (°C)"
  ) +
  ggview::canvas(
    width = 1600,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_zaporna_korelace,
  file = here::here(path_materials, "zaporna_korelace.png")
)
```

```{r}
#| label: zobrazit-zapornou-korelaci
#| echo: false
#| fig-alt: "Bodový graf nadmořské výšky a průměrné teploty s klesající přímkou: s rostoucí výškou teplota klesá."
include_local_figure("zaporna_korelace.png")
```

::: {.strip-orange .strip-compact .fragment}
Záporné *r* = `r pearson_nadmorska_txt`: s vyšší nadmořskou výškou průměrná teplota klesá.
:::


::: {.footer}
Zkonstruovaný výukový příklad nadmořské výšky a teploty; nejde o terénní měření.
:::

## Čtyři tučňáci v kódu

:::: {.columns .align-top}

::: {.column width="52%"}

```{r}
#| label: kod-male-korelace-v-r
#| echo: true
#| eval: true
#| output-location: fragment
vec_delka_ploutve_mm <-
  c(181, 186, 190, 198)

vec_hmotnost_g <-
  c(3750, 3800, 4250, 4400)

cor(
  x = vec_delka_ploutve_mm,
  y = vec_hmotnost_g,
  method = "pearson"
)
```

:::

::: {.column width="48%"}

```{r}
#| label: zobrazit-maly-bodovy-graf-pro-korelaci
#| echo: false
#| out.width: "84%"
#| fig-alt: "Bodový graf čtyř tučňáků druhu Adelie; s delší ploutví roste i hmotnost."
include_local_figure("maly_bodovy_graf.png")
```

:::

::::

::: {.notes}
R vypisuje výsledek s desetinnou tečkou a více číslicemi; v textu zaokrouhlujeme a píšeme desetinnou čárku. Čtyři body leží téměř na přímce, proto je r blízko 1.
:::

## Všichni tučňáci v kódu

```{r}
#| label: pripravit-korelace-tucnaci
#| include: false
#| message: false
#| warning: false
pearson_korelace <-
  cor(
    x = data_tucnaci$delka_ploutve_mm,
    y = data_tucnaci$hmotnost_g,
    method = "pearson"
  )

pearson_korelace_txt <-
  formatC(
    pearson_korelace,
    format = "f",
    digits = 2,
    decimal.mark = ","
  )
```

:::: {.columns .align-top}

::: {.column width="50%"}

```{r}
#| label: kod-korelace-pearson-v-r
#| echo: true
#| eval: true
#| output-location: fragment
cor(
  x = data_tucnaci$delka_ploutve_mm,
  y = data_tucnaci$hmotnost_g,
  method = "pearson"
)
```

:::

::: {.column width="50%"}

```{r}
#| ref.label: "zobrazit-vsechny-tucnaky"
#| fig-alt: "Bodový graf všech tučňáků s úplnými měřeními: oblak bodů roste zleva dole doprava nahoru, ale je široký."
#| echo: false
```

:::

::::

::: {.takeaway-strip .fragment}
*r* ≈ `r pearson_korelace_txt`: [silný rostoucí vztah]{.text-hgl-indigo_velvet} — a přesto při stejné délce ploutve zůstává [rozptýlení hmotnosti]{.text-hgl-orange}.
:::

## Pořadí místo hodnot: Spearmanova korelace

```{r}
#| label: pripravit-spearman-tucnaci
#| include: false
#| message: false
#| warning: false
spearman_korelace <-
  cor(
    x = data_tucnaci$delka_ploutve_mm,
    y = data_tucnaci$hmotnost_g,
    method = "spearman"
  )

spearman_korelace_txt <-
  formatC(
    spearman_korelace,
    format = "f",
    digits = 2,
    decimal.mark = ","
  )
```

:::: {.columns .align-top}

::: {.column width="46%"}
::: {.panel-result}
[Spearmanova korelace]{.panel-title}

Hodnoty nahradí jejich **pořadím** (nejkratší ploutev = 1, druhá nejkratší = 2, …) a korelaci spočítá z pořadí.
:::

::: {.incremental}
- ptá se, zda vztah **stále roste** (nebo stále klesá), i když není přímkou
- jednotlivá vzdálená pozorování ji ovlivní méně
:::
:::

::: {.column width="4%"}
:::

::: {.column width="50%"}
<br>

```{r}
#| label: kod-korelace-spearman-v-r
#| echo: true
#| eval: true
#| output-location: fragment
cor(
  x = data_tucnaci$delka_ploutve_mm,
  y = data_tucnaci$hmotnost_g,
  method = "spearman"
)
```
:::

::::

::: {.takeaway-strip .fragment}
U tučňáků vychází podobně jako Pearson (`r pearson_korelace_txt` a `r spearman_korelace_txt`): oblak roste zhruba po přímce.
:::

::: {.notes}
Odborně se takovému vztahu říká monotónní; slovo stačí zmínit mluveně. Kde se oba koeficienty liší, ukáže následující hlasování.
:::

## Kde se Pearson a Spearman mohou lišit?

Který z těchto tří grafů podle vás povede k největšímu rozdílu mezi oběma koeficienty?

```{r}
#| label: pripravit-tri-kandidaty-pro-korelaci
#| include: false
#| message: false
#| warning: false
set.seed(900723)
vec_kandidat_x <-
  seq_len(60)
data_kandidati <-
  tibble::tibble(
    x = rep(vec_kandidat_x, times = 3),
    y = c(
      vec_kandidat_x + rnorm(n = 60, sd = 3),
      rnorm(n = 60),
      exp(vec_kandidat_x / 10)
    ),
    kandidat = factor(rep(c("A", "B", "C"), each = 60))
  )
plot_kandidati <-
  ggplot2::ggplot(data_kandidati, ggplot2::aes(x = x, y = y)) +
  ggplot2::geom_point(colour = biostat_cols["grey_olive"], size = 2) +
  ggplot2::facet_wrap(ggplot2::vars(kandidat), nrow = 1, scales = "free_y") +
  ggplot2::labs(x = "x", y = "y") +
  theme_biostat()
ggview::save_ggplot(
  plot = plot_kandidati,
  file = here::here(path_materials, "kandidati_korelace.png"),
  width = 1600,
  height = 520,
  units = "px"
)
data_kandidati_souhrn <-
  data_kandidati |>
  dplyr::group_by(kandidat) |>
  dplyr::summarise(
    pearson = cor(x, y, method = "pearson"),
    spearman = cor(x, y, method = "spearman")
  ) |>
  dplyr::ungroup()
vec_rozdil_kandidatu <-
  abs(data_kandidati_souhrn$pearson - data_kandidati_souhrn$spearman)
vec_vitez_kandidatu <-
  which.max(vec_rozdil_kandidatu)
```

```{r}
#| label: zobrazit-tri-kandidaty-pro-korelaci
#| fig-alt: "Tři bodové grafy A, B a C: A rostoucí přímkový oblak, B body bez vztahu, C stále rychleji rostoucí křivka."
#| echo: false
include_local_figure("kandidati_korelace.png")
```

::: {.takeaway-strip .fragment}
Největší rozdíl: **`r data_kandidati_souhrn$kandidat[vec_vitez_kandidatu]`**. Pořadí roste, ale vztah není přímka: Pearson **`r formatC(data_kandidati_souhrn$pearson[vec_vitez_kandidatu], digits = 2, format = "f", decimal.mark = ",")`**, Spearman **`r formatC(data_kandidati_souhrn$spearman[vec_vitez_kandidatu], digits = 2, format = "f", decimal.mark = ",")`**.
:::

::: {.footer}
Zkonstruované výukové příklady; nejde o měření tučňáků.
:::

::: {.notes}
Nechám studenty vybrat A, B nebo C a obhájit volbu sousedovi před odhalením výsledku. Bez hlasování každý napíše písmeno a jednu větu. Názvy a koeficienty nejsou v počátečním stavu; každá varianta má svůj viditelný graf.
:::

## Rostoucí vztah nemusí být přímka

```{r}
#| label: pripravit-vektory-zakriveny
#| include: false
#| message: false
#| warning: false
x_curve_n <- 120

set.seed(900723)
x_curve <-
  sort(runif(x_curve_n, min = 1, max = 10))

# Constructed accelerating growth with proportional noise: the order of the
# values keeps rising, but the pattern is not a straight line.
signal_curve <-
  exp(x_curve / 2)

y_curve <-
  signal_curve * exp(rnorm(x_curve_n, mean = 0, sd = 0.2))

pearson_curve_txt <-
  formatC(
    cor(x_curve, y_curve, method = "pearson"),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )

spearman_curve_txt <-
  formatC(
    cor(x_curve, y_curve, method = "spearman"),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )
```

```{r}
#| label: vytvorit-korelace-zakrivena
#| include: false
#| message: false
#| warning: false
data_curve <-
  tibble::tibble(x = x_curve, y = y_curve)

plot_curve <-
  ggplot2::ggplot(
    data = data_curve,
    mapping = ggplot2::aes(x = x, y = y)
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    size = 2,
    alpha = 0.85
  ) +
  ggplot2::geom_smooth(
    method = "lm",
    formula = y ~ x,
    se = FALSE,
    colour = biostat_cols["indigo_velvet"],
    linewidth = 1.1
  ) +
  ggplot2::labs(
    x = "X",
    y = "Y",
    subtitle = "Stále rostoucí, ale zakřivený vztah"
  ) +
  ggview::canvas(
    width = 1600,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_curve,
  file = here::here(path_materials, "korelace_zakrivena.png")
)
```


```{r}
#| label: zobrazit-korelace-curve
#| echo: false
#| fig-alt: "Bodový graf zrychlujícího růstu: body stále stoupají, ale stále strměji, takže přímka jimi prochází jen přibližně."
include_local_figure("korelace_zakrivena.png")
```

::: {.takeaway-strip .fragment}
Stejný typ vztahu jako v grafu C, tentokrát s rozptýlenými body. Pearson `r pearson_curve_txt`, Spearman `r spearman_curve_txt`: pořadí hodnot roste téměř dokonale, ale body neleží na přímce.
:::

::: {.footer}
Zkonstruovaný výukový příklad; nejde o měření tučňáků.
:::

## Čtyři situace [korelace]{.text-hgl-indigo_velvet}



```{r}
#| label: pripravit-vektory-situace
#| include: false
#| message: false
#| warning: false
# Reuses the penguin, elevation and curve objects from their first-use slides.
x_none <-
  seq(1, 10, length.out = 12)

y_none <-
  c(3.2, 4.8, 2.7, 5.1, 3.9, 4.4, 2.9, 5.0, 3.5, 4.1, 3.8, 4.6)

pearson_none_txt <-
  formatC(
    cor(x_none, y_none, method = "pearson"),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )

spearman_none_txt <-
  formatC(
    cor(x_none, y_none, method = "spearman"),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )

spearman_nadmorska_txt <-
  formatC(
    cor(
      x = data_nadmorska$nadmorska_vyska_m,
      y = data_nadmorska$prumerna_teplota_c,
      method = "spearman"
    ),
    format = "f",
    digits = 2,
    decimal.mark = ","
  )
```

```{r}
#| label: vytvorit-korelace-situace
#| include: false
#| message: false
#| warning: false
# Positive: reuse plot_prvni_bodovy (tučňáci) — add trend line + subtitle
# Negative: reuse plot_zaporna_korelace (elevation) — override subtitle
# Curve: reuse plot_curve — override subtitle
# None: new synthetic data (no real-world equivalent)

data_none <-
  tibble::tibble(x = x_none, y = y_none)

# Positive correlation — tučňáci, add lm trend line and P | S subtitle
plot_tucnaci_situace <-
  plot_prvni_bodovy +
  ggplot2::geom_smooth(
    method = "lm",
    formula = y ~ x,
    se = FALSE,
    colour = biostat_cols["indigo_velvet"],
    linewidth = 1.1
  ) +
  ggplot2::labs(
    subtitle = stringr::str_glue(
      "Tučňáci: silná kladná\nPearson {pearson_korelace_txt}\nSpearman {spearman_korelace_txt}"
    )
  )

plot_none <-
  ggplot2::ggplot(
    data = data_none,
    mapping = ggplot2::aes(x = x, y = y)
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    size = 2,
    alpha = 0.85
  ) +
  ggplot2::geom_hline(
    yintercept = mean(data_none$y),
    linetype = "dashed",
    colour = biostat_cols["grey_olive"],
    linewidth = 0.8
  ) +
  ggplot2::labs(
    x = "X",
    y = "Y",
    subtitle = stringr::str_glue(
      "Žádná zřetelná souvislost\nPearson {pearson_none_txt}\nSpearman {spearman_none_txt}"
    )
  ) +
  ggview::canvas(
    width = 800,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_none,
  file = here::here(path_materials, "korelace_bez_vztahu.png")
)

# Negative correlation — elevation, override subtitle to consistent P | S format
plot_neg_situace <-
  plot_zaporna_korelace +
  ggplot2::labs(
    subtitle = stringr::str_glue(
      "Silná záporná\nPearson {pearson_nadmorska_txt}\nSpearman {spearman_nadmorska_txt}"
    )
  )

# Curve — override subtitle to consistent P | S format
plot_curve_situace <-
  plot_curve +
  ggplot2::labs(
    subtitle = stringr::str_glue(
      "Rostoucí, ale zakřivený\nPearson {pearson_curve_txt}\nSpearman {spearman_curve_txt}"
    )
  )

plot_ctyri_situace_korelace <-
  cowplot::plot_grid(
    plot_tucnaci_situace,
    plot_none,
    plot_neg_situace,
    plot_curve_situace,
    ncol = 2
  ) +
  ggview::canvas(
    width = 1600,
    height = 1200,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_ctyri_situace_korelace,
  file = here::here(path_materials, "ctyri_situace_korelace.png")
)
```


```{r}
#| label: zobrazit-ctyri-situace-korelace
#| echo: false
#| out.height: "620px"
#| fig-alt: "Čtyři bodové grafy s hodnotami Pearsonovy a Spearmanovy korelace: tučňáci se silným kladným vztahem, body bez zřetelné souvislosti, silný záporný vztah nadmořské výšky a teploty a stále rostoucí, ale zakřivený vztah."
include_local_figure("ctyri_situace_korelace.png")
```

## Čtyři soubory, stejná čísla

```{r}
#| label: pripravit-anscombuv-kvartet
#| include: false
#| message: false
#| warning: false
data_anscombe <-
  tibble::tibble(
    soubor = rep(LETTERS[1:4], each = 11),
    x = c(anscombe$x1, anscombe$x2, anscombe$x3, anscombe$x4),
    y = c(anscombe$y1, anscombe$y2, anscombe$y3, anscombe$y4)
  )

souhrn_anscombe <-
  data_anscombe |>
  dplyr::group_by(soubor) |>
  dplyr::summarise(
    prumer_x = mean(x),
    prumer_y = mean(y),
    rozptyl_x = var(x),
    rozptyl_y = var(y),
    korelace = cor(x, y),
    .groups = "drop"
  )
```

```{r}
#| label: zobrazit-souhrn-anscombe
#| echo: false
souhrn_anscombe |>
  dplyr::transmute(
    Soubor = soubor,
    `Průměr x` = formatC(prumer_x, digits = 2, format = "f", decimal.mark = ","),
    `Průměr y` = formatC(prumer_y, digits = 2, format = "f", decimal.mark = ","),
    `Rozptyl x` = formatC(rozptyl_x, digits = 2, format = "f", decimal.mark = ","),
    `Rozptyl y` = formatC(rozptyl_y, digits = 2, format = "f", decimal.mark = ","),
    `r` = formatC(korelace, digits = 2, format = "f", decimal.mark = ",")
  ) |>
  knitr::kable(align = c("l", rep("r", 5)))
```

::: {.box-question}
[Mají všechny čtyři soubory stejný vztah mezi x a y?]{.panel-lead}

Načrtněte sousedovi, jak by mohl vypadat bodový graf jednoho z nich.
:::

::: {.footer}
Anscombův kvartet (Anscombe 1973); data `anscombe` jsou součástí R.
:::

::: {.notes}
Studenti zatím vidí jen čísla. Nechám je odhadnout, zda stejné průměry, rozptyly a korelace znamenají stejný graf. Grafy odkryje až následující snímek.
:::

## Stejná čísla, jiné grafy

```{r}
#| label: vytvorit-anscombuv-kvartet
#| include: false
#| message: false
#| warning: false
# Panel titles carry the realised r so no label sits on top of the points.
data_anscombe_panely <-
  data_anscombe |>
  dplyr::left_join(souhrn_anscombe, by = "soubor") |>
  dplyr::mutate(
    panel = paste0(
      soubor,
      ":  r = ",
      formatC(korelace, digits = 2, format = "f", decimal.mark = ",")
    )
  )

plot_anscombe <-
  ggplot2::ggplot(
    data = data_anscombe_panely,
    mapping = ggplot2::aes(x = x, y = y)
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    size = 3.2,
    alpha = 0.9
  ) +
  ggplot2::facet_wrap(
    facets = ggplot2::vars(panel),
    ncol = 4
  ) +
  ggplot2::labs(
    x = "x",
    y = "y"
  ) +
  ggview::canvas(
    width = 1600,
    height = 560,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_anscombe,
  file = here::here(path_materials, "anscombuv_kvartet.png")
)
```

```{r}
#| label: zobrazit-anscombuv-kvartet
#| echo: false
#| fig-alt: "Čtyři bodové grafy Anscombova kvartetu se stejnou korelací: A přibližně přímkový oblak, B hladká křivka, C přímka s jedním vzdáleným bodem, D svislý sloupec bodů s jediným bodem daleko vpravo."
include_local_figure("anscombuv_kvartet.png")
```

:::: {.columns .text-center .fragment}

::: {.column width="25%"}
**A** rozptýlená přímka
:::

::: {.column width="25%"}
**B** křivka
:::

::: {.column width="25%"}
**C** přímka a jeden vzdálený bod
:::

::: {.column width="25%"}
**D** jediný bod vytváří „vztah“
:::

::::

::: {.takeaway-strip .fragment}
Stejné [průměry, rozptyly i *r*]{.text-hgl-indigo_velvet} mohou popisovat [úplně jiné vztahy]{.text-hgl-orange}. Proto se nejdřív díváme na graf.
:::

::: {.footer}
Anscombův kvartet (Anscombe 1973); data `anscombe` jsou součástí R.
:::

::: {.notes}
Pointa navazuje na celou korelační část: jedno číslo nestačí. V souboru D by bez jediného vzdáleného bodu žádný vztah nebyl. Ve skriptech je kvartet v rozbalovacím rámečku u korelace.
:::

## Co nám to říká právě o tučňácích?

*Mají tučňáci s delší ploutví také vyšší tělesnou hmotnost?*

:::: {.columns}

::: {.column width="50%" .fragment}
::: {.strip-indigo}
Pearson i Spearman vyšly podobně

<br>

Pearson: `r pearson_korelace_txt`, Spearman: `r spearman_korelace_txt`.

<br>

Graf ukázal rostoucí oblak. Oba koeficienty shrnují celkovou asociaci; vztahy uvnitř druhů mohou být jiné.
:::
:::

::: {.column width="50%" .fragment}
::: {.strip-orange}
Korelace neřekne, odkud vztah pochází

<br>

Část vztahu může souviset s druhem nebo celkovou velikostí těla.
:::
:::

::::

::: {.notes}
Tady vracím korelaci k biologické otázce. V předchozím bodovém grafu jsme viděli přibližně rostoucí oblak. Podobné koeficienty s tímto obrazem souhlasí, ale jejich shoda sama tvar vztahu nedokazuje. To je důvod, proč korelace u těchto dat dává smysl. Hned ale dodám limit: korelace sama neřekne, jestli délka ploutve přímo "způsobuje" vyšší hmotnost, nebo jestli obě proměnné souvisí s velikostí těla a druhem.
:::

## [Korelace]{.text-hgl-indigo_velvet} ukazuje asociaci, ne [příčinu]{.text-hgl-orange}

:::: {.columns .align-top}

::: {.column width="44%"}
```{r}
#| label: zobrazit-korelace-neni-kauzalita
#| echo: false
#| fig-alt: "Humorná fotografie: kočka sedí přesně v místě, kde se prohnula střecha přístřešku. Kočka a prohnutí se vyskytují spolu, ale kočka střechu zřejmě nezlomila."
include_local_figure("korelace_neni_kauzalita.png")
```
:::

::: {.column width="4%"}
:::

::: {.column width="52%"}
::: {.panel-result .fragment}
[Společná změna dvou proměnných]{.panel-title}

Korelace popisuje, zda se dvě proměnné mění společně.
:::

<br>

::: {.panel-warning .fragment}
[Sama neoddělí příčinu]{.panel-title .rn-box-red}

Korelace sama neodliší přímý efekt od sdílené příčiny.
:::
:::

::::

::: {.footer}
Fotografie: internetový mem, autor neuveden.
:::

::: {.notes}
Nejdřív se zeptám: zlomila kočka střechu, nebo si jen lehla tam, kde už byla prohnutá? Příklad s čápy nechávám mluveně, protože jako odlehčená ilustrace zabere na slidu příliš mnoho místa. Řeknu: počet čápů a porodnost v Evropě mohou korelovat, ale společným vysvětlením může být venkovský charakter oblasti. U tučňáků podobně: část vztahu mezi ploutví a hmotností může plynout z celkové velikosti těla nebo druhu.
:::

# Jak vybrat první graf?

## Tři dvojice, tři různé otázky

:::: {.columns .align-top}

::: {.column width="58%"}
::: {.strip-olive .strip-compact}
[Délka ploutve × hmotnost]{.text-bold}
:::

::: {.strip-olive .strip-compact}
[Druh tučňáka × hmotnost]{.text-bold}
:::

::: {.strip-olive .strip-compact}
[Druh tučňáka × ostrov]{.text-bold}
:::
:::

::: {.column width="38%"}
::: {.panel-question}
[Skupinka 3–4 · 2 min]{.panel-title}

Ke každé dvojici navrhněte první graf a jednou větou zdůvodněte, co z něj chcete přečíst.
:::
:::

::::

::: {.notes}
Studenti nejprve rozhodují bez katalogu možností. Při sdílení se ptám na typ obou proměnných a na otázku, kterou má graf zodpovědět. Galerie, která následuje, prochází tytéž tři dvojice ve stejném pořadí a se stejnou barvou štítku; souhrnná tabulka přijde až na konci sekce.
:::

## Ploutev × hmotnost: body, nebo barva?

::: {.strip-olive .strip-compact}
Numerická × numerická: obě proměnné mají číselnou osu
:::

```{r}
#| label: vytvorit-kv-kv-body-barva
#| include: false
#| message: false
#| warning: false
plot_kv_kv_body <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.55,
    size = 1.7
  ) +
  ggplot2::labs(
    title = "Body",
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)",
    subtitle = "každý tučňák je jeden bod"
  ) +
  theme_gallery()

plot_kv_kv_barva <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g,
      colour = druh_tucnaka
    )
  ) +
  ggplot2::geom_point(
    alpha = 0.62,
    size = 1.7
  ) +
  ggplot2::scale_colour_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Barva",
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)",
    subtitle = "stejné body, přidaný druh"
  ) +
  theme_gallery()

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kv_body,
    plot_kv_kv_barva,
    legend_from = plot_kv_kv_barva,
    show_right = FALSE
  ),
  "kv_kv_body_barva_vlevo.png",
  height = 680
)

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kv_body,
    plot_kv_kv_barva,
    legend_from = plot_kv_kv_barva
  ),
  "kv_kv_body_barva.png",
  height = 680
)
```

::: {.r-stack}
```{r}
#| label: zobrazit-kv-kv-body-barva-vlevo
#| echo: false
#| fig-alt: "Šedý bodový graf délky ploutve a hmotnosti tučňáků; pravá polovina je zatím prázdná."
include_local_figure("kv_kv_body_barva_vlevo.png")
```

::: {.fragment fragment-index=1}
```{r}
#| label: zobrazit-kv-kv-body-barva
#| echo: false
#| fig-alt: "Vlevo šedý bodový graf délky ploutve a hmotnosti, vpravo tentýž graf s body obarvenými podle druhu tučňáka."
include_local_figure("kv_kv_body_barva.png")
```
:::
:::

:::: {.columns .text-center}

::: {.column width="50%"}
Každý tučňák je jeden bod: první volba pro dvě numerické proměnné.
:::

::: {.column width="50%" .fragment fragment-index=1}
Barva nepřidá osu, ale novou otázku: je vztah stejný ve všech skupinách?
:::

::::

::: {.notes}
Nechám studenty číst jen směr a rozptýlení. Barva je třetí proměnná, ne dekorace.
:::

## Ploutev × hmotnost: kde je bodů nejvíc?

```{r}
#| label: vytvorit-kv-kv-hustota
#| include: false
#| message: false
#| warning: false
plot_kv_kv_hustota <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::stat_density_2d(
    mapping = ggplot2::aes(fill = ggplot2::after_stat(level)),
    geom = "polygon",
    bins = 7,
    alpha = 0.75,
    colour = "white",
    linewidth = 0.18
  ) +
  ggplot2::scale_fill_gradient(
    low = biostat_cols["light_gray"],
    high = biostat_cols["graphite"]
  ) +
  ggplot2::labs(
    title = "Hustota",
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)",
    subtitle = "kde se body nejvíc hromadí"
  ) +
  theme_gallery()

save_gallery_plot(plot_kv_kv_hustota, "kv_kv_hustota.png")
```

```{r}
#| label: zobrazit-kv-kv-hustota
#| echo: false
#| fig-alt: "Vrstevnicový graf hustoty bodů délky ploutve a hmotnosti; tmavší oblasti ukazují, kde se tučňáci nejvíce hromadí."
include_local_figure("kv_kv_hustota.png")
```

::: {.takeaway-strip .fragment}
**Hustota** odpovídá na jinou otázku: kde je dat nejvíc? Jednotlivé body ale zmizí.
:::

::: {.notes}
Inspirováno 2D density/hexbin logikou z R Graph Gallery. U tučňáků není překryv dramatický, ale ukazuje, co bychom udělali u mnohem větších dat.
:::

## Druh × hmotnost: body, nebo krabice?

::: {.strip-olive .strip-compact}
Kategoriální × numerická: jedna proměnná vytváří skupiny, druhá je číslo
:::

```{r}
#| label: vytvorit-kv-kat-body-boxplot
#| include: false
#| message: false
#| warning: false
plot_kv_kat_body <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = druh_tucnaka,
      y = hmotnost_g,
      colour = druh_tucnaka
    )
  ) +
  ggplot2::geom_jitter(
    width = 0.12,
    alpha = 0.45,
    size = 1.4
  ) +
  ggplot2::scale_colour_manual(
    values = barvy_druhu,
    guide = "none"
  ) +
  ggplot2::labs(
    title = "Body ve skupinách",
    x = "Druh tučňáka",
    y = "Tělesná hmotnost (g)",
    subtitle = "každý tučňák viditelný"
  ) +
  ggplot2::coord_cartesian(ylim = range(data_tucnaci$hmotnost_g)) +
  theme_gallery()

plot_kv_kat_boxplot <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = druh_tucnaka,
      y = hmotnost_g,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_boxplot(
    width = 0.55,
    alpha = 0.55,
    outlier.shape = NA,
    colour = biostat_cols["graphite"]
  ) +
  ggplot2::geom_jitter(
    mapping = ggplot2::aes(colour = druh_tucnaka),
    width = 0.08,
    alpha = 0.28,
    size = 0.9
  ) +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::scale_colour_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Boxplot + body",
    x = "Druh tučňáka",
    y = NULL,
    subtitle = "souhrn i jednotlivé body"
  ) +
  ggplot2::coord_cartesian(ylim = range(data_tucnaci$hmotnost_g)) +
  theme_gallery()

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kat_body,
    plot_kv_kat_boxplot,
    show_right = FALSE
  ),
  "kv_kat_body_boxplot_vlevo.png",
  height = 680
)

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kat_body,
    plot_kv_kat_boxplot
  ),
  "kv_kat_body_boxplot.png",
  height = 680
)
```

::: {.r-stack}
```{r}
#| label: zobrazit-kv-kat-body-boxplot-vlevo
#| echo: false
#| fig-alt: "Hmotnost tří druhů tučňáků jako jednotlivé body rozptýlené ve skupinách; pravá polovina je zatím prázdná."
include_local_figure("kv_kat_body_boxplot_vlevo.png")
```

::: {.fragment fragment-index=1}
```{r}
#| label: zobrazit-kv-kat-body-boxplot
#| echo: false
#| fig-alt: "Hmotnost tří druhů tučňáků: vlevo jednotlivé body rozptýlené ve skupinách, vpravo krabicové grafy s body v pozadí. Gentoo leží typicky výš než Adelie a Chinstrap."
include_local_figure("kv_kat_body_boxplot.png")
```
:::
:::

:::: {.columns .text-center}

::: {.column width="50%"}
**Body ve skupinách** nic neskrývají: vidíme každého tučňáka.
:::

::: {.column width="50%" .fragment fragment-index=1}
**Boxplot** dá rychlý souhrn, ale samotná krabice by skryla tvar dat.
:::

::::

::: {.notes}
Body ve skupinách jsou pro začátečníky velmi dobrý první graf: vidí počet pozorování, krajní hodnoty i překryv skupin. Boxplot je běžný, ale schová rozložení, proto ho nechávám s body.
:::

## Druh × hmotnost: jaký tvar má rozložení?

```{r}
#| label: vytvorit-kv-kat-violin-histogram
#| include: false
#| message: false
#| warning: false
plot_kv_kat_rozlozeni <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = druh_tucnaka,
      y = hmotnost_g,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_violin(
    alpha = 0.25,
    colour = NA,
    trim = FALSE
  ) +
  ggplot2::geom_boxplot(
    width = 0.18,
    outlier.shape = NA,
    alpha = 0.75,
    colour = biostat_cols["graphite"]
  ) +
  ggplot2::scale_fill_manual(
    values = barvy_druhu,
    guide = "none"
  ) +
  ggplot2::labs(
    title = "Violin + boxplot",
    x = "Druh tučňáka",
    y = "Tělesná hmotnost (g)",
    subtitle = "tvar rozložení"
  ) +
  theme_gallery()

plot_kv_kat_histogram <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = hmotnost_g,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_histogram(
    binwidth = 250,
    boundary = 2500,
    alpha = 0.55,
    position = "stack",
    linewidth = 0.35,
    colour = "white"
  ) +
  ggplot2::scale_x_continuous(breaks = c(3000, 4500, 6000)) +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Histogram",
    x = "Tělesná hmotnost (g)",
    y = "Počet tučňáků",
    subtitle = "počty v intervalech"
  ) +
  theme_gallery()

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kat_rozlozeni,
    plot_kv_kat_histogram,
    legend_from = plot_kv_kat_histogram,
    show_right = FALSE
  ),
  "kv_kat_violin_histogram_vlevo.png",
  height = 680
)

save_gallery_plot(
  combine_gallery_pair(
    plot_kv_kat_rozlozeni,
    plot_kv_kat_histogram,
    legend_from = plot_kv_kat_histogram
  ),
  "kv_kat_violin_histogram.png",
  height = 680
)
```

::: {.r-stack}
```{r}
#| label: zobrazit-kv-kat-violin-histogram-vlevo
#| echo: false
#| fig-alt: "Houslové grafy hmotnosti tří druhů tučňáků s malými krabicemi uvnitř; pravá polovina je zatím prázdná."
include_local_figure("kv_kat_violin_histogram_vlevo.png")
```

::: {.fragment fragment-index=1}
```{r}
#| label: zobrazit-kv-kat-violin-histogram
#| echo: false
#| fig-alt: "Vlevo houslové grafy hmotnosti tří druhů s malými krabicemi uvnitř, vpravo skládaný histogram hmotnosti, ve kterém barvy ukazují počty tučňáků jednotlivých druhů."
include_local_figure("kv_kat_violin_histogram.png")
```
:::
:::

:::: {.columns .text-center}

::: {.column width="50%"}
**Violin** ukáže tvar rozložení; krabice uvnitř dá rychlý souhrn.
:::

::: {.column width="50%" .fragment fragment-index=1}
**Histogram** ukáže skutečné počty tučňáků v intervalech hmotnosti.
:::

::::

::: {.notes}
Nechci rozebírat jádrové odhady hustoty; stačí říct, že šířka violinu ukazuje, kde je hodnot víc. Histogram je poctivější, když chci skutečné počty: každý sloupec říká, kolik tučňáků spadá do intervalu.
:::

## Druh × hmotnost: který druh převažuje?

```{r}
#| label: vytvorit-kv-kat-skladana-hustota
#| include: false
#| message: false
#| warning: false
plot_kv_kat_skladana_hustota <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = hmotnost_g,
      fill = druh_tucnaka,
      colour = druh_tucnaka
    )
  ) +
  ggplot2::geom_density(
    mapping = ggplot2::aes(y = ggplot2::after_stat(count)),
    alpha = 0.75,
    adjust = 1.25,
    position = "fill",
    linewidth = 0.35
  ) +
  ggplot2::scale_y_continuous(
    labels = scales::percent_format(accuracy = 1),
    breaks = c(0, 0.5, 1)
  ) +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::scale_colour_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Skládaná hustota",
    x = "Tělesná hmotnost (g)",
    y = "Relativní složení",
    subtitle = "který druh převažuje při dané hmotnosti"
  ) +
  theme_gallery() +
  ggplot2::theme(legend.position = "bottom")

save_gallery_plot(plot_kv_kat_skladana_hustota, "kv_kat_skladana_hustota.png")
```

```{r}
#| label: zobrazit-kv-kat-skladana-hustota
#| echo: false
#| fig-alt: "Skládaná hustota relativního složení druhů podél hmotnosti: při nízké hmotnosti převažují Adelie a Chinstrap, při vysoké hmotnosti Gentoo."
include_local_figure("kv_kat_skladana_hustota.png")
```

::: {.takeaway-strip .fragment}
**Skládaná hustota** neukazuje počty. Ukazuje relativní složení druhů podél hmotnosti.
:::

::: {.notes}
Varianta inspirovaná R Graph Gallery stacked density. Je dobrá na otázku, který druh v dané části osy převažuje, ale hůř se z ní čte rozložení jednotlivého druhu.
:::

## Který graf byste udělali jako první?

::: {.box-question}
[Otázka: liší se tělesná hmotnost mezi druhy a jak moc se druhy překrývají?]{.panel-lead}
:::

<br>

:::: {.columns}

::: {.column width="33%"}
::: {.panel-question}
[Body ve skupinách]{.panel-lead}

Vidíme každého tučňáka.
:::
:::

::: {.column width="33%"}
::: {.panel-question}
[Boxplot + body]{.panel-lead}

Rychleji čteme typickou hodnotu a rozptýlení.
:::
:::

::: {.column width="33%"}
::: {.panel-question}
[Violin / histogram]{.panel-lead}

Lépe čteme tvar nebo počty v intervalech.
:::
:::

::::

::: {.notes}
Tady nejde o jednu správnou odpověď. Pokud chci studenty učit číst data, často začnu body ve skupinách. Pokud chci rychle porovnat skupiny, použiji boxplot. Smyslem aktivity je přimět je formulovat, co má graf ukázat.
:::

## Druh × ostrov: každý tučňák jedním čtverečkem

::: {.strip-olive .strip-compact}
Kategoriální × kategoriální: čteme počty nebo podíly v kombinacích kategorií
:::

```{r}
#| label: pripravit-pocty-druhu-na-ostrovech
#| include: false
#| message: false
#| warning: false
data_ctetnosti <-
  data_tucnaci |>
  dplyr::count(druh_tucnaka, ostrov)
```

```{r}
#| label: vytvorit-kat-kat-waffle
#| include: false
#| message: false
#| warning: false
data_waffle <-
  data_ctetnosti |>
  tidyr::uncount(weights = n, .id = "jedinec") |>
  dplyr::group_by(ostrov) |>
  dplyr::mutate(
    poradi = dplyr::row_number(),
    x = (poradi - 1) %% 14,
    y = (poradi - 1) %/% 14
  ) |>
  dplyr::ungroup()

plot_kat_kat_waffle <-
  ggplot2::ggplot(
    data = data_waffle,
    mapping = ggplot2::aes(
      x = x,
      y = y,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_tile(
    width = 0.9,
    height = 0.9,
    colour = "white",
    linewidth = 0.18
  ) +
  ggplot2::facet_wrap(~ ostrov, nrow = 1) +
  ggplot2::coord_equal() +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Waffle plot",
    x = NULL,
    y = NULL,
    subtitle = "každý čtvereček je jeden tučňák"
  ) +
  theme_gallery() +
  ggplot2::theme(
    legend.position = "right",
    axis.text = ggplot2::element_blank(),
    axis.ticks = ggplot2::element_blank(),
    panel.grid = ggplot2::element_blank(),
    strip.text = ggplot2::element_text(
      face = "bold",
      size = 13,
      colour = biostat_cols["graphite"]
    )
  )

save_gallery_plot(plot_kat_kat_waffle, "kat_kat_waffle.png")
```

```{r}
#| label: zobrazit-kat-kat-waffle
#| echo: false
#| fig-alt: "Waffle plot tří ostrovů, kde každý čtvereček je jeden tučňák obarvený podle druhu: na Biscoe žijí Adelie a Gentoo, na Dream Adelie a Chinstrap, na Torgersen jen Adelie."
include_local_figure("kat_kat_waffle.png")
```

::: {.takeaway-strip .fragment}
**Waffle plot** ukáže počty jako jednotky: vidíme složení i velikost skupin najednou.
:::

::: {.notes}
Facety oddělují ostrovy, barva druhy. Je to vizuálně silnější než tabulka četností, ale na přesné odečítání hodnot se lépe hodí tabulka nebo sloupce.
:::

## Druh × ostrov: sloupce počtů a podílů

```{r}
#| label: vytvorit-kat-kat-sloupce-podily
#| include: false
#| message: false
#| warning: false
data_ctetnosti_podil <-
  data_ctetnosti |>
  dplyr::group_by(ostrov) |>
  dplyr::mutate(podil = n / sum(n)) |>
  dplyr::ungroup()

plot_kat_kat_sloupce <-
  ggplot2::ggplot(
    data = data_ctetnosti,
    mapping = ggplot2::aes(
      x = ostrov,
      y = n,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_col(
    position = ggplot2::position_dodge(width = 0.78),
    width = 0.72,
    colour = "white"
  ) +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Skupinové sloupce",
    x = "Ostrov",
    y = "Počet",
    subtitle = "absolutní počty"
  ) +
  theme_gallery()

plot_kat_kat_podil <-
  ggplot2::ggplot(
    data = data_ctetnosti_podil,
    mapping = ggplot2::aes(
      x = ostrov,
      y = podil,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_col(
    width = 0.72,
    colour = "white"
  ) +
  ggplot2::scale_y_continuous(
    labels = scales::percent_format(accuracy = 1),
    breaks = c(0, 0.5, 1)
  ) +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Skládané podíly",
    x = "Ostrov",
    y = "Podíl",
    subtitle = "složení každého ostrova"
  ) +
  theme_gallery()

save_gallery_plot(
  combine_gallery_pair(
    plot_kat_kat_sloupce,
    plot_kat_kat_podil,
    legend_from = plot_kat_kat_podil,
    show_right = FALSE
  ),
  "kat_kat_sloupce_podily_vlevo.png",
  height = 680
)

save_gallery_plot(
  combine_gallery_pair(
    plot_kat_kat_sloupce,
    plot_kat_kat_podil,
    legend_from = plot_kat_kat_podil
  ),
  "kat_kat_sloupce_podily.png",
  height = 680
)
```

::: {.r-stack}
```{r}
#| label: zobrazit-kat-kat-sloupce-podily-vlevo
#| echo: false
#| fig-alt: "Skupinové sloupce s počty tučňáků každého druhu na třech ostrovech; pravá polovina je zatím prázdná."
include_local_figure("kat_kat_sloupce_podily_vlevo.png")
```

::: {.fragment fragment-index=1}
```{r}
#| label: zobrazit-kat-kat-sloupce-podily
#| echo: false
#| fig-alt: "Vlevo skupinové sloupce s počty tučňáků každého druhu na třech ostrovech, vpravo skládané sloupce se stejnými daty přepočtenými na podíly, kde má každý ostrov výšku 100 %."
include_local_figure("kat_kat_sloupce_podily.png")
```
:::
:::

:::: {.columns .text-center}

::: {.column width="50%"}
**Skupinové sloupce** porovnají absolutní počty mezi ostrovy.
:::

::: {.column width="50%" .fragment fragment-index=1}
**Skládané podíly** ukážou složení ostrova, ale skryjí, kolik tučňáků tam bylo.
:::

::::

::: {.notes}
Po přepočtu na procenta ztratíme informaci o celkovém počtu tučňáků na ostrově. To otevírá následující aktivní otázku.
:::

## Druh × ostrov: hezčí, nebo čitelnější?

```{r}
#| label: vytvorit-kat-kat-bubliny
#| include: false
#| message: false
#| warning: false
plot_kat_kat_bubliny <-
  ggplot2::ggplot(
    data = data_ctetnosti,
    mapping = ggplot2::aes(
      x = ostrov,
      y = druh_tucnaka,
      size = n,
      fill = druh_tucnaka
    )
  ) +
  ggplot2::geom_point(
    shape = 21,
    alpha = 0.75,
    colour = "white",
    stroke = 0.9
  ) +
  ggplot2::geom_text(
    mapping = ggplot2::aes(label = n),
    colour = "white",
    fontface = "bold",
    size = 3
  ) +
  ggplot2::scale_size_area(max_size = 18, guide = "none") +
  ggplot2::scale_fill_manual(values = barvy_druhu) +
  ggplot2::labs(
    title = "Bublinové počty",
    x = "Ostrov",
    y = "Druh tučňáka",
    subtitle = "stejná tabulka jako plocha"
  ) +
  theme_gallery()

save_gallery_plot(plot_kat_kat_bubliny, "kat_kat_bubliny.png")
```

```{r}
#| label: zobrazit-kat-kat-bubliny
#| echo: false
#| fig-alt: "Bublinový graf druhu a ostrova, kde plocha každé bubliny a číslo v ní udávají počet tučňáků v dané kombinaci."
include_local_figure("kat_kat_bubliny.png")
```

::: {.takeaway-strip .fragment}
Bubliny jsou efektní, ale porovnávání ploch je pro oko těžší než porovnávání délek sloupců.
:::

::: {.notes}
Tento graf je schválně trochu „cool dataviz“ a zároveň příležitost k opatrnosti: hezký graf nemusí být nejlepší pro přesné čtení.
:::

## Kdy potřebujeme počty a kdy podíly?

:::: {.columns}

::: {.column width="50%"}
::: {.panel-question}
[Počty]{.panel-title}

Kdy potřebujeme vědět, kolik pozorování opravdu máme?
:::
:::

::: {.column width="50%"}
::: {.panel-question}
[Podíly]{.panel-title}

Kdy nás zajímá složení skupiny bez ohledu na její velikost?
:::
:::

::::

::: {.notes}
Studenti mají říct jednu situaci, kdy by vybrali počty, a jednu, kdy podíly. Cíl je odlišit absolutní a relativní četnost.
:::

## Který graf zvolit jako první?

| Typy proměnných | Dobrý první graf | Co v něm čteme |
|---|---|---|
| numerická × numerická | bodový graf | směr, tvar, rozptýlení, odlehlá pozorování |
| kategoriální × numerická | body ve skupinách; boxplot + body | rozdíly mezi skupinami, překryv, rozptýlení uvnitř skupin |
| kategoriální × kategoriální | tabulka četností; sloupce počtů nebo podílů | složení kombinací, počty vs. podíly |

:::: {.columns .align-top}

::: {.column width="50%"}
::: {.takeaway-strip .fragment}
[Typy proměnných]{.text-hgl-indigo_velvet} zúží možnosti. [Biologická otázka]{.text-hgl-orange} rozhodne, co má graf zvýraznit.
:::
:::

::: {.column width="50%"}
::: {.panel-warning .fragment}
[Co nesmíme skrýt?]{.panel-title}

Boxplot skryje tvar dat, podíly skryjí počty.
:::
:::

::::

::: {.notes}
Tabulka uzavírá galerii a odpovídá tabulce ve skriptech. Není to testový strom: „první graf“ není jediný povolený graf a jednotlivá pozorování nemáme skrývat bez důvodu. V praktiku se studenti mohou vracet k prvnímu sloupci: jaký typ mají proměnné, které chci porovnat?
:::

# Závěr

## Co přidá [model]{.text-hgl-indigo_velvet}?

```{r}
#| label: vytvorit-s-primkou
#| include: false
#| message: false
#| warning: false
plot_s_primkou <-
  ggplot2::ggplot(
    data = data_tucnaci,
    mapping = ggplot2::aes(
      x = delka_ploutve_mm,
      y = hmotnost_g
    )
  ) +
  ggplot2::geom_point(
    colour = biostat_cols["grey_olive"],
    alpha = 0.55,
    size = 1.9
  ) +
  ggplot2::geom_smooth(
    method = "lm",
    formula = y ~ x,
    se = FALSE,
    colour = biostat_cols["indigo_velvet"],
    linewidth = 1.2
  ) +
  ggplot2::labs(
    x = "Délka ploutve (mm)",
    y = "Tělesná hmotnost (g)"
  ) +
  ggview::canvas(
    width = 1600,
    height = 800,
    units = "px"
  )

ggview::save_ggplot(
  plot = plot_s_primkou,
  file = here::here(path_materials, "bodovy_graf_s_primkou.png")
)
```

```{r}
#| label: zobrazit-graf-s-primkou
#| echo: false
#| fig-alt: "Bodový graf délky ploutve a hmotnosti tučňáků s fialovou rostoucí přímkou proloženou body."
include_local_figure("bodovy_graf_s_primkou.png")
```

::: {.blockquote .fragment}
Přímka popíše [vztah v původních jednotkách]{.text-hgl-indigo_velvet}: o kolik gramů se typicky mění hmotnost na každý 1 mm délky ploutve? To bude téma následující lekce.
:::

::: {.notes}
Tady výslovně zavírám dnešní lekci a otevírám následující. Graf a korelace nám řekly, že vztah existuje jako vzor a že je relativně těsný. Model přidá odhad efektu a později nejistotu. Nezabíhám do lineárního modelu, jen nastavím otázku.
:::

## Shrnutí

::: {.blockquote}
::: {.incremental}
- Pro dvě numerické proměnné je první volbou [bodový graf]{.text-hgl-graphite}.
- Z grafu čteme současně [směr vztahu]{.text-hgl-indigo_velvet} i [rozptýlení bodů]{.text-hgl-orange}.
- [Korelace]{.text-hgl-indigo_velvet} vztah shrne číslem, ale nenahradí samotný graf.
- Typ dvojice proměnných zúží výběr grafu; otázka rozhodne, co má graf ukázat.
- Viditelný vzor ještě není důkaz [příčiny]{.text-hgl-orange}.
:::
:::

::: {.notes}
Shrnutí kopíruje výsledky učení. Pokud dochází čas, přečtu první a poslední bod a prostřední logiku nechám studenty doplnit ve dvojicích.
:::

## Co potřebujete vidět, než napíšete „delší ploutev, těžší tučňák“? {.text-center}

<br>

::: {.text-size-large .text-bold .text-center}
Jaké tři otázky položíte autorovi, který vám ukáže jen *r* = `r pearson_korelace_txt` bez grafu?
:::

<br>

::: {.panel-olive}
[Řekněte sousedovi jednou větou]{.panel-title}

Kterou z otázek byste položili jako první, a proč?
:::


::: {.notes}
Otevřená závěrečná otázka bez jedné správné odpovědi. Očekávané otázky: Jak vypadá graf (přímka, křivka, shluky)? Jsou v datech skupiny, například druhy? Kolik pozorování a jak byla měřena? Tvrdí autor příčinu? Most do následující lekce už zazněl na snímku Co přidá model?.
:::
