V tomto článku se podíváme na to, co jsou to kategoriální proměnné, jak je vytvořit a jak s nimi v R pracovat.

Příklad 1: Vytvoření kategoriální proměnné

Kategoriální proměnná, jak už název napovídá, je proměnná, která vyjadřuje příslušnost k určité kategorii. V R se tomuto typu proměnné říká factor, nadále proto budeme používat tento pojem.

Factor může „vypadat“ jako písmena i jako čísla. Důležité ovšem je, že R tato písmena nebo čísla interpretuje jako příslušnost k určité kategorii.

Ukažme si příklad. Založíme si dvě proměnné (vektory). V první budou čísla 0 a 1. Ve druhé budou písmena Z a M. Obojí může představovat příslušnost k nějaké kategorii (žena, muž).

> a = c(0, 1, 0, 1, 1)

> b = c("Z", "M", "Z", "M", "M")

R chápe první proměnnou jako vektor čísel (numeric), druhou proměnnou jako vektor textových řetězců (character), což lze ověřit příkazem str.

> str(a)

num [1:5] 0 1 0 1 1

> str(b)

chr [1:5] "Z" "M" "Z" "M" "M"

Obě proměnné můžeme snadno převést na factor příkazemas.factor. Nazvěme si takto upravené proměnné af, bf.

> af = as.factor(a)

> bf = as.factor(b)

Když si nyní tyto proměnné vypíšeme, vypadají skoro stejně jako proměnné a, b, s tím rozdílem, že se objeví řádek Levels: ten nám říká, jaké různé kategorie proměnná obsahuje.

> af

[1] 0 1 0 1 1

Levels: 0 1

> bf

[1] Z M Z M M

Levels: M Z

Příklad 2: Operace s kategoriálními proměnnými

Na první to vypadá, že mezi „obyčejnými čísly“ a kategoriálními proměnnými vlastně není zásadní rozdíl. R ovšem s kategoriálními proměnnými pracuje odlišným způsobem. Zaměřme se nyní na proměnné a a af.

Vektor a můžeme snadno sečíst.

> sum(a)

[1] 3

Pro af to ale neplatí. Když se o to pokusíme, R nám sdělí, že sčítání kategoriálních proměnných nemá smysl. Čísla 0 a 1 totiž již nejsou „obyčejná čísla“, ale označení kategorie.

> sum(af)

Error in Summary.factor(c(1L, 2L, 1L, 2L, 2L), na.rm = FALSE) :

"sum"  not meaningful for factors

Je řada funkcí, které vyžadují, aby vstupní proměnné byly kategoriální. Například t-test rozdílu středních hodnot v různých skupinách (kategoriích) nebude fungovat, použijeme-li „obyčejná čísla“ a ne kategorie.

Dalším příkladem toho, že R pracuje rozdílně s číselnými a kategoriálními proměnnými, jsou grafy. Vytvořme si nyní proměnnou vek, která bude představovat věk pěti různých lidí.

> vek = c(40, 30, 35, 45, 25)

Zakreslíme nejprve graf závislosti věku na proměnné a.

> plot(vek ~ a, pch = 16)

Argument pch v zadaném příkazu pouze „ztmaví puntíky“, aby byly lépe vidět. Výsledný graf vypadá takto:

Nyní zakreslíme graf závislosti věku na proměnné af.

> plot(vek ~ af)

Vidíme, že vypadá úplně jinak: jedná se o graf, kterému říkáme v angličtině boxplot, v češtině krabicový graf. Znázorňuje rozdělení hodnot podle různých kategorií. Tlustá černá čára uprostřed každé „krabice“ přestavuje průměr v dané kategorii.

Takových „vychytávek“, kdy se bere v potaz fakt, že pracujeme s kategoriemi, a ne s čísly, umí R spoustu. Je ale třeba mít na paměti, že pokud pracujeme s několika různými kategoriemi, musí toR vědět. Jak toho dosáhneme? Při načtení dat z externích zdrojů R někdy rozpozná automaticky, že se jedná o kategoriální proměnnou. To můžeme ověřit příkazem str. Pokud se to R rozpoznat nepodařilo, můžeme „ručně“ změnit proměnnou na kategoriální příkazem as.factor.

Autor článku: Lenka Fiřtová