
Sumarizace
Sumarizace je podtyp agregace dat a spíše patří k explorativní analýze dat. Sumarizací se vytváří statistiky a frekvenční tabulky.
Základní generická funkce pro sumarizaci je summary(). Její výstup závisí na typu objektu, pokud tedy tvoříme vlastní funkci, jejíž výstupem je nějaký speciální objekt (například výstup lineárního modelování), můžeme definovat i výstup funkce summary. Generické funkce jsme podrobně popsali v kapitole R jako programovací jazyk.
Další sumarizační funkcí je table(), která vytváří frekvenční tabulky. Jejím vstupem je vektor nebo datová tabulka vektorů. Výsledek je vždy objekt třídy table - pole o dimenzi počtu vektorů.
Základní nastavení vynechává chybějící hodnoty.
V případě jednoduchého vektoru hodnot je výstup funkce table() tabulka se jmény prvků a jejich četností, se kterou můžeme pracovat jako s obyčejným vektorem:
> zvirata <- c("kočka", "pes", "kanárek", "pes", "kuře", "kuře", "pes")
> tt <- table(zvirata)
> tt
zvirata
kanárek kocka kure pes
1 1 2 3
Objekt třídy table můžeme přeměnit na datovou tabulku jednoduše s pomocí funkce as.data.frame():
> as.data.frame(tt)
pets Freq
1 kanárek 1
2 kocka 1
3 kure 2
4 pes 3
Stáhněte si datovou tabulku students a po rozbalení archivu načtěte do R:
> load("students.RData")
Jedná se o datovou tabulku odvozenou z R datového souboru HairEyeColor, který popisuje pohlaví, barvu vlasů a barvu očí u studentů. K těmto údajům jsme si vymysleli informaci o dopravním prostředku, kterým se student dopravuje do školy.
> head(students)
Hair Eye Sex Transport
1 Brown Brown Male Bike
2 Red Green Male Train
3 Red Hazel Male Train
4 Red Brown Female Bus
5 Brown Green Male Bike
6 Red Green Male Bike
Chceme-li zjistit, jaké jsou frekvence kombinace barvy vlasů a očí, použijeme jednoduše funkci table():
> cc1 <- table(students[,1:2])
> cc1
Eye
Hair Blue Brown Green Hazel
Black 7 4 5 10
Blond 1 5 7 11
Brown 8 10 4 4
Red 3 7 4 10
Funkce addmargins() přidává součty řádků a sloupců:
> addmargins(cc1)
Eye
Hair Blue Brown Green Hazel Sum
Black 7 4 5 10 26
Blond 1 5 7 11 24
Brown 8 10 4 4 26
Red 3 7 4 10 24
Sum 19 26 20 35 100
Frekvenční tabulku lze zobrazit i pro více než dvě proměnné, v tom případě je výsledkem vícerozměrné pole:
> cc2 <- table(students)
> cc2
, , Sex = Female, Transport = Bike
Eye
Hair Blue Brown Green Hazel
Black 1 1 1 2
Blond 0 1 1 2
Brown 3 1 0 2
Red 1 1 1 3
, , Sex = Male, Transport = Bike
Eye
Hair Blue Brown Green Hazel
Black 3 0 1 3
Blond 0 0 0 3
Brown 1 2 1 0
Red 0 0 2 3
, , Sex = Female, Transport = Bus
Eye
Hair Blue Brown Green Hazel
Black 0 0 0 1
Blond 0 1 1 2
Brown 1 1 1 1
Red 0 4 0 1
, , Sex = Male, Transport = Bus
Eye
Hair Blue Brown Green Hazel
Black 2 1 1 0
Blond 0 1 3 1
Brown 0 1 1 0
Red 1 0 0 0
, , Sex = Female, Transport = Train
Eye
Hair Blue Brown Green Hazel
Black 1 2 2 1
Blond 0 2 1 2
Brown 1 3 0 0
Red 0 2 0 2
, , Sex = Male, Transport = Train
Eye
Hair Blue Brown Green Hazel
Black 0 0 0 3
Blond 1 0 1 1
Brown 2 2 1 1
Red 1 0 1 1
Toto uspořádání tabulky je ale nepřehledné. Proměna na datovou tabulku může pomoct:
> head(as.data.frame(cc2))
Hair Eye Sex Transport Freq
1 Black Blue Female Bike 1
2 Blond Blue Female Bike 0
3 Brown Blue Female Bike 3
4 Red Blue Female Bike 1
5 Black Brown Female Bike 1
6 Blond Brown Female Bike 1
Výsledná datová tabulka má podobnou strukturu jako původní tabulka, avšak každý řádek představuje pouze jedinou kombinaci kategorií a tabulka navíc obsahuje sloupec s frekvencemi a všechny kombinace proměnných (i ty s frekvencí 0).
Dalším způsobem je použití funkce ftable():
> ftable(students)
Transport Bike Bus Train
Hair Eye Sex
Black Blue Female 1 0 1
Male 3 2 0
Brown Female 1 0 2
Male 0 1 0
Green Female 1 0 2
Male 1 1 0
Hazel Female 2 1 1
Male 3 0 3
Blond Blue Female 0 0 0
Male 0 0 1
Brown Female 1 1 2
Male 0 1 0
Green Female 1 1 1
Male 0 3 1
Hazel Female 2 2 2
Male 3 1 1
Brown Blue Female 3 1 1
Male 1 0 2
Brown Female 1 1 3
Male 2 1 2
Green Female 0 1 0
Male 1 1 1
Hazel Female 2 1 0
Male 0 0 1
Red Blue Female 1 0 0
Male 0 1 1
Brown Female 1 4 2
Male 0 0 0
Green Female 1 0 0
Male 2 0 1
Hazel Female 3 1 2
Male 3 0 1
Funkce prop.table() vytváří frekvenční tabulku procent, vstupem je výstup z funkce table(). Parametr margin= určuje, v jaké dimenzi jsou počítány procenta (sloupce, řádky). Základní nastavení jsou procenta, které se počítají k celkovému počtu.
> prop.table (cc1)
Eye
Hair Blue Brown Green Hazel
Black 0.07 0.04 0.05 0.10
Blond 0.01 0.05 0.07 0.11
Brown 0.08 0.10 0.04 0.04
Red 0.03 0.07 0.04 0.10