# Vlastnosti metrik a aritmetika dat
V této kapitole si ukážeme, jak reagují jednotlivé statistiky na to když
1. k datům přičteme stejnou hodnotu
2. když data vynásobíme nějakým číslem
3. když přidáme odlehlou hodnotu
## Aritmetika dat
Zůstaňme u příkladu z předchozí lekce: máme deset domácností a sledujeme, jaký mají počet motorových vozidel (automobilů, motocyklů, elektrokoloběžek). Získaná data po uspořádání od nejmenšího po největší jsou $X=\{1, 2, 2, 2, 3, 3, 4, 5, 8, 11\}$.
O nich víme, že je lze popsat následujícími charakteristikami (zaokrouhlenými na dvě desetinná místa):
|statistika|$X$|
|:--|:--|
|$\bar{x}=m$ | 4.10|
|$mds$ | 2.00|
|$mdn$ | 3.00|
|$(min, max)$ | (1.00, 11.00) |
|$(1Q, 3Q)$ | (2.00, 4.75) |
|$(LF, UF)$ | (-2.13, 8.88) |
|$range$ | 10.00|
|$IQR$ | 2.75|
|$var, sd$ | 8.89, 2.98 |
Zkusme vytvořit nové soubory dat tak, že nejprve přičteme hodnotu 2 ke každému číslu ($X+2$) a nebo ho vynásobíme ($X\cdot 2$)
|statistika|$X$|$X+2$|$X\cdot 2$|
|:--|:--|:--|:--|
|$\bar{x}=m$ | 4.10 |6.10|8.20|
|$mds$ | 2.00 |4.00|4.00|
|$mdn$ | 3.00 | 5.00|6.00|
|$(min, max)$ | (1.00, 11.00) | (3.00, 11.00)|(2.00, 22.00)|
|$(1Q, 3Q)$ | (2.00, 4.75) | (5.00, 6.75)|(4.00, 9.50)|
|$(LF, UF)$ | (-2.13, 8.88) | (-0.13, 10.33)|(-4.25, 17.75)|
|$range$ | 10.00|10.00|20.00|
|$IQR$ | 2.75|2.75|5.50|
|$var, sd$ | 8.89, 2.98 |8.89, 2.98 |35.56, 5.96 |
Můžete pozorovat, že při přičtení se míry polohy se všechny posunuly od dva, zatímco míry variability **range, IQR, var, sd** zůstaly stejné. Při násobení se míry polohy vynásobily dvěma, míry variability **range, iqr, sd** se také vynásobily hodnotou $a=2$, zatímco **var** se vynásobila hodnotou $a^2=4$.
:::{.callout-note}
Pokud manažer firmy všem přidá stejnou hodnotu ($x+1000$), všichni si polepší a rozdíly zůstanou stejné. Pokud všem navýší plat o 10% ($x\cdot 1.01)$, všichni si polepší ale také se zvětší rozdíly - *procentuální navýšení příjmů rozevírá nůžky mezi bohatšími a chušími*.
Pokud stát požaduje od všech stejnou částku (např. televizní poplatky), všem se sníží rozpočet stejně $x-200$. Pokud však nastaví platby např procentuálně podle příjmu $x-0.01\cdot x$, budou vyskopříjmoví platit více než nízkopříjmoví - *procentuální snžení je trest za úspěch*.
:::
## Transformace dat
Zkusme naše data **standardizovat** tak, abychom eliminovali posun a zároveň upravili variabilitu. Cílem je, aby data s rozdílnou polohou a rozdílnou variabilitou byla porovnateln (např počet vozidel v rodině a celkový roční příjem rodiny). Jednou z tradičních standardizací je převod hodnot $x_i$ na $z-skór$ pomocí vzorce
$$z_i=\frac{x_i-\bar{x}}{sd}$$
Z skór tedy získáme nejprve posunem dat o průměr a poté vydělením směrodatnou odchylkou. Získané proměnná $z$ pak má průměr nula a směrodatnou odchylku 1. Tato standardizace je vhodná pro data alespoň přibližně symetrická kolem průměru, jinými slovy kdy je průměr blízko mediánu,$\bar{x}-mdn\to 0$.
Variantou odolnou vůči odlehlým hodotám je **robustní standardizace**m která každé hodnotě $x_i$ přiřadí hodnotu
$$x_r=\frac{x_i-mdn}{iqr}$$
Robustní standarizaci tedy získáme posunem dat o medián a vydělením mezikvartilovým rozpětím. Získaná proměnná $x_r$ pak má medán nula a iqr jedna. Rubustní standardizace je vhodná pro data zešikmená, kdy většina hodnot je na jedné straně od průměru, jinými slovy medián a průměr jsou daleko.
Jinou bežně používanou trasformací je **normalizace** rozsahu, které každé hodnotě $x$ přiřadí hodnotu
$$x_{n}=\frac{x-min}{range}$$
Hodnoty tedy nejprve posuneme o minimum a pak vydělíme celkovým rozsahem. Takto Rozsah proměnné $x_n$ bude $(min,max)=(0,1)$, tedy $range=1$. Tato transformace je vhodná a někdy i nutná pro algoritmy, kde by hodnoty nad jedna mohly vrazně ovlivnit schopnost nalezení výsledku.
Existují i další transformace, které jsou založené na rozdělení dat, ale těmi se nyní zabývat nebudeme.
|statistika |$X$ |$z(X)$ |$x_r$ |$x_n$ |
|:--|:--|:--|:--|:--|
|$\bar{x}=m$ | 4.10 |**0.00** |0.40 |0.31 |
|$mds$ | 2.00 |-0.70 |-0.36 |0.10 |
|$mdn$ | 3.00 | -0.37 |**0.00** |0.20 |
|$(min, max)$ | (1.00, 11.00) | (-1.04, 2.32) |(-0.73, 2.91) |**(0.00, 1.00)**|
|$(1Q, 3Q)$ | (2.00, 4.75) | (-0.70, 2.20) |(-0.36, 0.64) |(0.10, 0.38) |
|$(LF, UF)$ | (-2.13, 8.88) | (-2.09, 1.60) |(-1.86, 2.14) |(-0.31, 0.79) |
|$range$ | 10.00 |3.35 |3.64 |**1.00** |
|$IQR$ | 2.75 |0.92 |**1.00** |0.28 |
|$var, sd$ | 8.89, 2.98 |**1.00, 1.00** |1.18, 1.08 |0.09, 0.03 |
```{ojs}
//| echo: false
data = [1, 2, 2, 2, 3, 3, 4, 5, 8, 11].map(d => ({ hodnota: d }))
// Statistiky pro čáry a legendu
stats = [
{ label: "Modus", val: 2, color: "green", dash: "2,2", yOffset: 15 },
{ label: "Medián", val: 3, color: "blue", dash: "2.2", yOffset: 35 },
{ label: "Průměr", val: 4.1, color: "red", dash: "2.2", yOffset: 55 }
]
Plot.plot({
width: 600,
height: 200,
grid: true,
x: { domain: [0, 12],
ticks: d3.range(1, 12),
label: "Hodnota →" },
y: { axis: null,
domain: [0, 3] },
marks: [
// Tečky nad sebou
Plot.dot(data, Plot.stackY({ x: "hodnota", fill: "gray", stroke: "white", r: 6 })),
// Svislé čáry na pozicích statistik
stats.map(s => Plot.ruleX([s.val], { stroke: s.color, strokeWidth: 1, strokeDasharray: s.dash })),
// Popisky v pravém horním rohu pod sebou
stats.map(s =>
Plot.text([0], { // [0] je zde jen zástupný, pozici určí frameAnchor
text: [`${s.label}: ${s.val}`],
frameAnchor: "top-right",
dx: -20, // odsazení od pravého okraje
dy: s.yOffset, // vertikální rozestup mezi popisky
fill: s.color,
// fontWeight: "bold",
fontSize: 14,
textAnchor: "end"
})
)
]
})
```