Kategoriální proměnné v jazyce R (factors)
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
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á
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.