Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Úprava a transformace dat v R Sumarizace

Logo Matematická biologie

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

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity