Gå till index

Data Science med R

0% färdig
0/42 Steps
avsnitt 5, Ämne 8

Faktorer (factors)

Johan Svensson februari 22, 2020
avsnitt Progress
0% färdig

Faktorer i R (factors)

Faktorer i R är kategoriska variabler, såsom kön, hårfärg, etnicitet, sjukdomsstatus etc. En faktor är helt enkelt en kategorisk variabel som har 2 eller flera kategorier (levels). Kategorierna kan ha en naturlig ordning, men det är inte nödvändigt. De flesta nya användare har svårigheter att skilja faktorvektorer (factor vectors) från teckenvektorer (character vectors). När det gäller statistik är det ingen skillnad i hur R behandlar dessa två. Du behöver inte konvertera teckenvektorer till faktorvektorer när du gör statistiska beräkningar (R hanterar teckenvektorer som faktorvektorer).

Vid manipulering av data frames behandlas dock teckenvektorer och faktorer mycket olika. Du kan stöta på oväntade fel och varningsmeddelanden när du hanterar character och factors vectors i R. Generellt, när du arbetar med datamanipulation, kan du också hålla dig till character vector. Låt oss skapa en teckenvektor och en identisk faktorvektor:

# Skapa en vektor
my_names <- c("David", "Mohammed", "Christina", "Yusuf", "Djemba", "Liu", "Christina")

# Kopiera my_names till en ny vektor som tvingas vara av typen "character"
character_names <- as.character(my_names)

# Kopiera my_names till en ny vektor som tvingas vara av typen "factor"
factor_names <- as.factor(my_names)

Låt oss skapa en tabell för varje vektor. Tabellen anger antalet observationer för varje kategori:

table(character_names)
## character_names
## Christina     David    Djemba       Liu  Mohammed     Yusuf 
##         2         1         1         1         1         1
table(factor_names)
## factor_names
## Christina     David    Djemba       Liu  Mohammed     Yusuf 
##         2         1         1         1         1         1

Du kan se möjliga kategorier för en faktor genom funktionen  levels(). Funktionen fungerar inte på en teckenvektor (character vector).

levels(character_names)
## NULL

NULL betyder att R inte kunde utföra operationen eller att det returnerade värdet helt enkelt är NULL (ingenting). Det verkar som att en teckenvektor (character vector) inte har kategorier/nivåer.

levels(factor_names)
## [1] "Christina" "David"     "Djemba"    "Liu"       "Mohammed"  "Yusuf"

Som framgår ovan har alltså en faktorvektor (factor) kategorier/nivåer/levels. Detta är en viktig egenskap hos faktorer (factors), vilket används när man gör statistiska modeller och machine learning. När funktionen levels() skriver ut alla nivåer (kategorier) så skriver den ut referenskategorin först (i detta fall är Christina referenskategori). faktorvariabeln. Detta är en viktig egenskap för faktorer, nämligen att det finns en kategori som är referenskategori (referensvärde, referensnivå).

Referenskategorin är särskilt användbar när man skapar statistiska modeller där man vill jämföra de olika kategoriernas effekter i modellen. Det är förstås inte alltid relevant att använda en referenskategori men man skall veta att en sådan alltid existerar för en faktor och att den kan ändras efter behov. Detta är något som används vid exempelvis linjär regression, logistisk regression, multipel regression, Cox regression med flera.

Det är viktigt att kunna skapa en faktor och ändra dess referensnivå, varför ett exempel följer. Du skall jämför överlevnaden hos personer med olika typer av cancer: lungcancer, hudcancer, tarmcancer och bröstcancer. Du vill undersöka hur allvarligt lungcancer är i relation till övriga cancerformer och du vill därför ha lungcancer som referensnivå. Vi börjar med att skapa vår vektor:

# Skapa en vektor (det blir en character vector)
cancer_type <- c("bröstcancer", "lungcancer", "hudcancer", "tarmcancer")

# Konvertera vektorn till en faktorvektor
# Eftersom vi ger den nya vektorn samma namn som den föregående så skriver vi över den sistnämnda
cancer_type <- as.factor(cancer_type)

# Kontrollera nivåerna
levels(cancer_type)
[1] "bröstcancer" "hudcancer"   "lungcancer"  "tarmcancer" 

Eftersom bröstcancer skrivs ut först så är den referenskategori för denna faktor. Vi kan ändra det genom att använda funktionen relevel(), som följer:

# Relevel (definiera ny referenskategori)
cancer_type <- relevel(cancer_type, "hudcancer")

# Kontrollera levels igen
levels(cancer_type)
[1] "hudcancer"   "bröstcancer" "lungcancer"  "tarmcancer" 

Om du använder de grundläggande R-funktionerna för att läsa data till R (t.ex. read.csv()), kan R faktiskt konvertera teckenvariabler till faktorvariabler. Detta kan orsaka förvirring och oväntade fel och varningar under arbetet. Strategier för att läsa in data diskuteras i senare kapitel.

0/5 (0 Reviews)