6  Popisná statistika

Popisná statistika má za cíle souhrnně popsat soubor (spíše než použít data k získání informací o populaci, o které se předpokládá, že vzorek dat reprezentuje).

Cíle cvičení
  • Provést import datové sady ze souborů typu CSV a RDS.
  • Být schopen popsat charakterizovat proměnné v datech popsat číselné proměnné pomocí uvedených statistik.

6.1 Import dat

V hydrologii pracujeme s datovými sadami, které mají různou podobu. Nejčastěji se zpracovávají tabelární a obrazová data. Asi nejběžnější typy souborů s tabelárními daty jsou *.csv (comma separated values), *.txt, případně *.xls/*.xlsx. Takto jsou například katalogizována data z automatických měření, nebo výstupy hydrologických modelů. Dále méně časté formáty *.json (javascript object notation), *.shp (shapefile), .laz (bodová pole), *.nc (NetCDF file), *.parquet (Apache parqet). A jako poslední doménově specifické *.RData, nebo *.rds. Formátů je velké množství, nicméně je velmi obtížné narazit na některý, pro který neexistuje v R možnost importu ať už v základní konfiguraci nebo s pomocí externích balíčků.

V RStudio se nachází poměrně propracovaný průvodce importem dat z textového souboru, který naklikneme pod záložkou Environment > Import Dataset.

Kód
global_temperatures <- read.csv(
  file = "./data/JonesGlobalT.csv", 
  row.names = 1
)
head(
  x = global_temperatures, 
  n = 5
)
  YEAR    JAN    FEB    MAR    APR    MAY    JUN    JUL    AUG    SEP    OCT
1 1850 -0.702 -0.284 -0.732 -0.570 -0.325 -0.213 -0.128 -0.233 -0.444 -0.452
2 1851 -0.303 -0.362 -0.485 -0.445 -0.302 -0.189 -0.215 -0.153 -0.108 -0.063
3 1852 -0.308 -0.477 -0.505 -0.559 -0.209 -0.038 -0.016 -0.195 -0.125 -0.216
4 1853 -0.177 -0.330 -0.318 -0.352 -0.268 -0.179 -0.059 -0.148 -0.409 -0.359
5 1854 -0.360 -0.280 -0.284 -0.349 -0.230 -0.215 -0.228 -0.163 -0.115 -0.188
     NOV    DEC ANNUAL
1 -0.190 -0.268 -0.375
2 -0.030 -0.067 -0.223
3 -0.187  0.083 -0.224
4 -0.256 -0.444 -0.271
5 -0.369 -0.232 -0.246
Kód
global_temperature_yr <- aggregate(
  x = . ~ YEAR,
  FUN = mean,
  data = global_temperatures
) 
head(
  x = global_temperature_yr,
  n = 5
)
1
Agregace dat do průměrů (mean) za roční období (YEAR).
2
Vypíšeme si prvních 5 hodnot z datové sady.
  YEAR    JAN    FEB    MAR    APR    MAY    JUN    JUL    AUG    SEP    OCT
1 1850 -0.702 -0.284 -0.732 -0.570 -0.325 -0.213 -0.128 -0.233 -0.444 -0.452
2 1851 -0.303 -0.362 -0.485 -0.445 -0.302 -0.189 -0.215 -0.153 -0.108 -0.063
3 1852 -0.308 -0.477 -0.505 -0.559 -0.209 -0.038 -0.016 -0.195 -0.125 -0.216
4 1853 -0.177 -0.330 -0.318 -0.352 -0.268 -0.179 -0.059 -0.148 -0.409 -0.359
5 1854 -0.360 -0.280 -0.284 -0.349 -0.230 -0.215 -0.228 -0.163 -0.115 -0.188
     NOV    DEC ANNUAL
1 -0.190 -0.268 -0.375
2 -0.030 -0.067 -0.223
3 -0.187  0.083 -0.224
4 -0.256 -0.444 -0.271
5 -0.369 -0.232 -0.246
Kód
par(mfrow = c(1, 2))
with(
  data = global_temperature_yr, 
  expr = plot(
    x = YEAR, 
    y = JAN, 
    type = "l", 
    sub ="a)"
  )
)
with(
  data = global_temperature_yr, 
  expr = boxplot(
    ANNUAL, 
    horizontal = TRUE, 
    sub = "b)"
  )
)

a) Časový průběh teplot. b) boxplot hodnot dle příslušností měření v měsících.
Úloha
  1. Nahrajte data do prostředí s pomocí vhodně parametrizované read.___() funkce. Pomožte si nastavením, které generuje záložka **Import Dataset**
  2. Přidejte proměnnou hyear pro hydrologický rok. V podmínkách ČR je hydrologický rok od 1. 11. předchozího roku do 31. 10. roku aktuálního.
  3. Proveďte agregaci dat průměrem pro jednotlivé měsíce.
  4. Vyneste do grafu pomocí funkce plot().

6.2 Statistický soubor

Je základní jednotkou popisné statistiky, skládá se z množiny všech objektů, které jsou nositely určitého znaku.

6.2.1 Základní soubor (populace)

Soubor všech jedinců, u nichž být zaznamenán výskyt sledovaného znaku. Bývá zřídkakdy k dispozici.

6.2.2 Výběrový soubor (výběr z populace)

Je soubor o konečném počtu \(n\) prvků základního souboru, u kterého je prováděno měření charakteristik.

Výběrový soubor vzniká ideálně realizací náhodného výběru.

Níže uvedené funkce jsou počítané s pomocí následujícího vektoru

Kód
set.seed(1)
x <- round(rnorm(50), 4)
x
##  [1] -0.6265  0.1836 -0.8356  1.5953  0.3295 -0.8205  0.4874  0.7383  0.5758
## [10] -0.3054  1.5118  0.3898 -0.6212 -2.2147  1.1249 -0.0449 -0.0162  0.9438
## [19]  0.8212  0.5939  0.9190  0.7821  0.0746 -1.9894  0.6198 -0.0561 -0.1558
## [28] -1.4708 -0.4782  0.4179  1.3587 -0.1028  0.3877 -0.0538 -1.3771 -0.4150
## [37] -0.3943 -0.0593  1.1000  0.7632 -0.1645 -0.2534  0.6970  0.5567 -0.6888
## [46] -0.7075  0.3646  0.7685 -0.1123  0.8811

6.3 Míry polohy

Pro obě extrémní polohy (\(\min\) a \(\max\)) jsou v R stejnojmenné funkce.

Název Funkce Vzorec
minimum/maximum min(x)/max(x)) \(\max(x) - \min(x)\)
výběrový kvantil quantile(x) -
aritmetický průměr mean(x) \(\dfrac{1}{n}\sum_{i=1}^{n}x_i\)
medián median(x) -
modus - -

6.3.1 Výběrový kvantil

Kód
t(sapply(X = 1:7, FUN = function(i) quantile(x, type = i)))
1
Využití anonymní funkce function(i) vektorizované pro rozsah hodnot 1:7 na pozici type ve funkci quantile()
          0%       25%    50%      75%   100%
[1,] -2.2147 -0.394300 0.0746 0.738300 1.5953
[2,] -2.2147 -0.394300 0.1291 0.738300 1.5953
[3,] -2.2147 -0.415000 0.0746 0.738300 1.5953
[4,] -2.2147 -0.404650 0.0746 0.717650 1.5953
[5,] -2.2147 -0.394300 0.1291 0.738300 1.5953
[6,] -2.2147 -0.399475 0.1291 0.744525 1.5953
[7,] -2.2147 -0.372075 0.1291 0.727975 1.5953

6.3.1.1 Medián

Aritmetický průměr hodnot na pozicích \(\frac{n}{2}\) a \(\frac{n}{2+1}\) v seřazeném souboru.

6.3.2 Modus

Za modus se označuje nejčastěji se vyskytující hodnota v souboru. Četnost výskytu hodnot na reálné ose se nahrazuje buďto hustotou (funkce density()) nebo je možné použít kombinaci funkcí cut() a table().

Kód
table(round(x = x, digits = 0))
table(cut(x, breaks = 10))
dens <- density(x = x)
max_dens <- which.max(dens$y)
plot(dens, main = "Jádrový odhad hustoty x")
segments(x0 = dens$x[max_dens], 
         y0 = 0, 
         x1 = dens$x[max_dens], 
         y1 = dens$y[max_dens], 
         lwd = 1.5)
1
Funkce table() provede součty speficikovaných hodnot. V tomto případě po zaokrouhlení na celá čísla.
2
Nyní s pomocí funkce cut() rozlišíme četnosti do 10 intervalů a následně spočteme počet hodnot v těchto intervalech.
3
Jádrový odhad hustoty. \[ \hat{f}(x)=\dfrac{1}{nh}\sum_{i=1}^{n}\mathsf{K}\left(\dfrac{x-x_i}{h}\right) \] kde \(\mathsf{K}\) je jádrová funkce, \(h\) je šířka pásma (zhlazovací funkce) a \(x_i\) jsou hodnoty.


-2 -1  0  1  2 
 2  8 22 16  2 

 (-2.22,-1.83]  (-1.83,-1.45]  (-1.45,-1.07] (-1.07,-0.691] (-0.691,-0.31] 
             2              1              1              3              6 
(-0.31,0.0713] (0.0713,0.452]  (0.452,0.833]   (0.833,1.21]     (1.21,1.6] 
            11              7             11              5              3 

6.3.3 Harmonický průměr

Aritmetický průměr převrácených hodnot.

\[ \bar{x_h} = \dfrac{n}{\sum\limits_{i=1}^{n}\frac{1}{x_i}} \]

6.3.4 Průměr stupně \(\alpha\)

Označuje obecný vzorec průměru (zahrnující aritmetický, harmonický, geometrický apod.)

\[ \bar{x}_\alpha(x_1, x_2, \ldots, x_n) = \left(\dfrac{1}{n}\sum_{i=1}^{n}x_i^\alpha\right)^\frac{1}{\alpha} \]

Kód
min(x)
max(x)
max(x) - min(x)
range(x)
## [1] -2.2147
## [1] 1.5953
## [1] 3.81
## [1] -2.2147  1.5953
1
Statistiky minimum & maximum.
2
Rozpětí hodnot.
Úloha
  1. Napište funkci pro výpočet obecného vzorce průměru stupně \(\alpha\) a srovnejte s výstupem funkce mean pro \(\alpha = 1\).

6.4 Míry variability

Výběrový rozptyl a směrodatnou odchylku spočteme v R pomocí funkcí var() angl. variance a sd() angl. standard deviation. Zatímco variační rozpětí popisuje rozpětí celého souboru, mezikvartilové rozpětí se omezuje na rozpětí poloviny hodnot, omezené \(Q3\) a \(Q1\) neboli \(q_{75}\) a \(q_{25}\).

Název Funkce Vzorec
rozptyl var(x) \(\sum\limits_{i=1}^{n}\dfrac{(x_i - \bar{x})^2}{n-1}\)
směrodatná odchylka sd(x) \(\dfrac{1}{n-1}\sum\limits_{i=1}^{n}\sqrt{(x_i - \bar{x})^2}\)
variační rozpětí range(x) \(\max(x) - \min(x)\)
mezikvartilové rozpětí IQR(x) \(\mathrm{Q}3 - \mathrm{Q}_1\)
variační koeficient mean(x)/sd(x) \(\dfrac{s_x}{\bar{x}}\)

6.4.1 Střední chyba aritmetického průměru

\[ s_x = \dfrac{s}{\sqrt{n}} \]

6.4.2 fivenum() & summary()

Pokud nás nezajímá vybraná konkrétní statistika, jsou k dispozici funkce vracející více hodnot najednou.

Kód
fivenum(x)
[1] -2.2147 -0.3943  0.1291  0.7383  1.5953
Kód
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-2.2147 -0.3721  0.1291  0.1004  0.7280  1.5953 
Poznámka

Funkce summary() je tzv. S3 generic, to znamená, že její chování je definované v závislosti na objekt, na který je volána. Podívejte se na výstup methods(summary). Pokud volána funkci na numerický vektor, tak je vybrána metoda summary.numeric().

6.5 Rekapitulace

Úloha
  1. Máte vektor hodnot \(\boldsymbol{x}\):
    0.64, 0.98, -0.49, 0.75, -1.35, 1.65, 1.12, -1.04, 1.05, 0.29, -0.6, -0.08, 1.45, -1.87, -0.07, -0.02, 0.62, 0.01, -0.26.

    Nalezněte s pomocí R:

    1. minimum:   
    2. maximum:   
    3. aritmetický průměr:   
    4. harmonický průměr:   
    5. \(q_{10\textrm{p}}\):  
    6. medián .  
    7. mezikvartilové rozpětí -
  2. Doplňte funkci read.___() aby výsledek byl

  3. K číselnému vektoru \(\boldsymbol{x}\). přidejte takovou hodnotu, aby průměr byl roven 0.15: .