Tegur R: Kategoorilised muutujad ja pidevad muutujad

โšก Nutikas kokkuvรตte

R-i funktsioon Factor salvestab kategoorilisi andmeid tรคisarvukoodide vektorina, mis on seotud tasemete komplektiga โ€“ nii eraldab keel piiratud kategooriate rรผhma pidevast mรตรตtmisest.

  • ???? ๏ธ Struktuur: Faktor sisaldab tรคisarvukoode ja levels atribuuti, seega iga kategooria valideeritakse fikseeritud loendi suhtes.
  • ๐Ÿงฉ Loomine: factor() teisendab mรคrgivektori ja class() kinnitab tulemuse muutumist mรคrgilt faktorile.
  • ๐Ÿ”˜ Nominaalne: Ilma levels argumendita sorteerib R kategooriad ise, seega ei kaasne vรคrvide ega sugude vahelist jรคrjestust.
  • ๐Ÿ“Š Korduv: Kui edastada ordered = TRUE koos selgesรตnalise tasemevektoriga, fikseeritakse jรคrjestus madalaimast kรตrgeimani.
  • ๐Ÿ”ข Pidev: Numbrilised ja tรคisarvulised veerud jรครคvad vaikimisi pidevaks, nagu nรคitab klass (mtcars$mpg).
  • โš ๏ธ Konversioonilรตks: Funktsioon as.numeric() tagastab faktori puhul tasemekoodid, seega loe esmalt lรคbi levels() funktsiooni silt.
  • ๐Ÿง  Hooldamine: relevel() mรครคrab mudeli baasjoone ja droplevels() tรผhjendab alamhulgast maha jรครคnud kategooriad.

Tegur R-kategooria muutujates ja pidevates muutujates

Mis on R-i tegur?

Tegur R-s on muutuja, mida kasutatakse andmete kategoriseerimiseks ja salvestamiseks ning millel on piiratud arv erinevaid vรครคrtusi. See salvestab andmeid tรคisarvude vรครคrtuste vektorina. Faktor R-is on tuntud ka kui kategooriline muutuja, mis salvestab nii string- kui ka tรคisarvude vรครคrtusi tasemetena. Faktorit kasutatakse enamasti statistilises modelleerimises ja uurimuslikus andmeanalรผรผsis R-is.

Sisemiselt on tegur kaks koos liikuvat objekti: tรคisarvuline koodide vektor ja mรคrgiatribuut nimega tasetIga kood on selles tasemevektoris positsioon, mistรตttu teguri printimine nรคitab sรตnu, samal ajal kui klassist eemaldamine() nรคitab numbreid.

Andmekogus saame eristada kahte tรผรผpi muutujaid: kategooriline ja pidev.

  • R-i kategooriliste muutujate kirjeldavas statistikas on vรครคrtus piiratud ja pรตhineb tavaliselt konkreetsel piiratud rรผhmal. Nรคiteks vรตib R-i kategooriliseks muutujaks olla riigid, aasta, sugu, amet.
  • Pidev muutuja vรตib aga vรตtta mis tahes vรครคrtused tรคisarvust kรผmnendmurruni. Nรคiteks vรตib meil olla tulu, aktsia hind jne.

Seda eristust tasub meeles pidada, sest R valib vaikselt iga veeru jaoks erinevad vaikesรคtted. Numbriline veerg summeeritakse keskmise ja mediaaniga, samas kui tegur summeeritakse tasemete arvuga. Kategooria tekstina vรตi numbrina salvestamine muudab seega saadavat analรผรผsi. Laiem valik salvestusreลพiime on kรคsitletud juhendis R-andmetรผรผbid ja operaatorid.

Kategoorilised muutujad

Kategoorilised muutujad sisse R salvestatakse faktorisse. Vaatame allolevat koodi, et teisendada R-is mรคrkmuutuja faktorimuutujaks. Paljud modelleerimis- ja masinรตpperutiinid ei saa toorteksti kasutada, seega tuleb kategooriad enne mudeli sobitamist kodeerida tasemete vรตi numbritena.

Sรผntaks

factor(x = character(), levels, labels = levels, ordered = is.ordered(x))

R-i baasviide dokumenteerib veel kaks argumenti, mis รผlaltoodud lรผhendatud vormis puuduvad: vรคlistama, mis eemaldab vรครคrtused enne tasemekomplekti loomist ja nmax, tasemete arvu รผlempiir, mis kiirendab vรคga suurte vektorite teisendamist.

Argumendid:

  • xR-i kategooriliste andmete vektor. Peab olema string vรตi tรคisarv, mitte kรผmnendmurr.
  • taset: Vรตimalike vรครคrtuste vektor, mille vรตtab x. See argument on valikuline. Vaikimisi vรครคrtus on vektori x elementide unikaalne loend, mis on sorteeritud kasvavas jรคrjekorras.
  • sildidLisage R-i x kategoorilisele andmele silt. Nรคiteks 1 saab sildi โ€žmeesโ€œ ja 0 silt โ€žnaineโ€œ.
  • vรคlistamaVรครคrtuste vektor, mis tasemekomplekti moodustamisel eemaldatakse. Vรคlja jรคetud vรครคrtused muutuvad tulemuses puuduvateks.
  • tellitudLoogiline lipp, mis mรครคrab, kas tasemeid tuleks kรคsitleda antud jรคrjekorras jรคrjestatud olevat.
  • nmaxValikuline รผlempiir tasemete arvule, kasulik pikkade vektorite puhul.

Nรคide:

Teisendame mรคrgivektori faktoriks ja kinnitame muutust class() abil.

# Create gender vector
gender_vector <- c("Male", "Female", "Female", "Male", "Male")
class(gender_vector)
# Convert gender_vector to a factor
factor_gender_vector <-factor(gender_vector)
class(factor_gender_vector)

Vรคljund:

## [1] "character"
## [1] "factor"

Klass lรผlitus mรคrgilt tegurile ja prinditud vรครคrtuste osas ei muutunud midagi. Oluline on teisendada a nรถรถr R-i faktorimuutujaks enne masinรตppeรผlesannet, sest just sel hetkel muutuvad kategooriad fikseeritud ja valideeritud hulgaks.

Kategoorilise muutuja R-s vรตib jagada nominaalne kategooriline muutuja ja jรคrguline kategooriline muutuja.

Nominaalne kategooriline muutuja

Nominaalsel kategoorilisel muutujal on mitu vรครคrtust, kuid jรคrjekord pole oluline. Nรคiteks mees vรตi naine. R-i nominaalsed kategoorilised muutujad ei kanna mingit jรคrjestust.

# Create a color vector
color_vector <- c('blue', 'red', 'green', 'white', 'black', 'yellow')
# Convert the vector to factor
factor_color <- factor(color_vector)
factor_color

Vรคljund:

## [1] blue   red    green  white  black  yellow
## Levels: black blue green red white yellow

Vรคrvifaktori (factor_color) pรตhjal ei saa me jรคrjestust kindlaks teha. Tasemete loend on tรคhestikulises jรคrjekorras, kuna levels argumenti ei antud, seega sorteeris R unikaalsed vรครคrtused ise. See sortimine jรคrgib aktiivset lokaati, mitte tavalist ASCII-koodi, mis on รผks pรตhjus tasemete selgesรตnaliseks mรคrkimiseks alati, kui jรคrjestus on oluline.

Ordinaal Kategooriline muutuja

Ordinaalsetel kategoorilistel muutujatel on loomulik jรคrjestus. Jรคrjestus tuleneb vektori jรคrjestusest, mis edastatakse muutujale. taset argument ja jรคrjestatud = TRUE annab R-ile kรคsu kรคsitleda seda jรคrjestust paremusjรคrjestuse, mitte tรผhja loendina. Paigutus jรคrjestatud = FALSE ei pรถรถra jรคrjestust รผmber; see lihtsalt loob tavalise jรคrjestamata teguri. Kรตrgeimast madalaimani jรคrjestamiseks tuleb tasemete vektor ise รผmber pรถรถrata.

Nรคide:

R-i iga tegurimuutuja vรครคrtuste loendamiseks saame kasutada kokkuvรตtet.

# Create Ordinal categorical vector 
day_vector <- c('evening', 'morning', 'afternoon', 'midday', 'midnight', 'evening')
# Convert `day_vector` to a factor with ordered level
factor_day <- factor(day_vector, order = TRUE, levels =c('morning', 'midday', 'afternoon', 'evening', 'midnight'))
# Print the new variable
factor_day

Vรคljund:

## [1] evening   morning   afternoon midday    
midnight  evening

Konsool prindib esmalt vรครคrtused ja nende alla paremusjรคrjestuse. Jรคrgmine plokk avaneb selle Levels reaga, mis on endiselt kommenteeritud, seega jรครคb paremusjรคrjestus nรคhtavaks, kuni summary() kutse eelmisele koodile lisatakse.

## Levels: morning < midday < afternoon < evening < midnight
# Append the line to above code
# Count the number of occurence of each level
summary(factor_day)

Vรคljund:

##   morning    midday afternoon   evening  midnight
##         1         1         1         2         1

R jรคrjestas taseme 'hommikust' 'keskรถรถni', nagu on tรคpsustatud levels argumendis. Kuna tegur on jรคrjestatud, toimivad sellega ka vรตrdlusoperaatorid, nรคiteks < ja >, mida nad รผlaltoodud nominaalse vรคrviteguri puhul ei tee.

Pidevad muutujad

Pideva klassi muutujad on R-is vaikevรครคrtused. Neid salvestatakse numbriliste vรตi tรคisarvudena. Seda nรคeme allolevast andmestikust. mtcars on sisseehitatud andmestik. See kogub teavet erinevat tรผรผpi autode kohta. Saame selle mtcarsi abil importida ja kontrollida muutuja mpg (miil galloni kohta) klassi. See tagastab numbrilise vรครคrtuse, mis nรคitab pidevat muutujat.

dataset <- mtcars
class(dataset$mpg)

Vรคljund

## [1] "numeric"

Mitte iga numbriline veerg pole tรตeliselt pidev. Samas andmestikus sisaldab cyl ainult vรครคrtusi 4, 6 ja 8 ning am ainult vรครคrtusi 0 ja 1, seega on mรตlemad kategooriad, mis on salvestatud arvudena. Nende teisendamine funktsiooniga factor() enne modelleerimist takistab R-il kรคsitlemast 4 ja 6 silindri vahelist tรผhimikku mรตรตdetud suurusena. Vastupidine samm, pideva veeru lรตikamine ribadeks, teostatakse funktsiooniga cut().

Faktoritasemed ja sildid R-is

Atribuut โ€žlevelsโ€œ on teguri osa, mille muutmisele kulutate kรตige rohkem aega, kuna see kontrollib nii seda, mis prinditakse, kui ka seda, mida mudel baasjoonena kรคsitleb. Neli baas-R abimeest katavad peaaegu iga juhtumi.

funktsioon Mida see teeb Tรผรผpiline kasutamine
tasemed (f) Loeb vรตi asendab tasemete nimesid Lรผhendite รผmbernimetamine loetavateks siltideks
nlevels(f) Tagastab tasemete arvu Kategooria kontrollimine ei plahvatanud pรคrast liitumist
uuesti level(f, ref) Liigub รผhe taseme vรตrra ettepoole Regressiooni baasjoone valimine
droplevels(f) Eemaldab tasemed, millel pole vaatlusi Puhastamine pรคrast alamhulga lisamist vรตi filtreerimist

Allolev plokk rakendab kรตiki nelja varem loodud vรคrvi- ja sooteguritele.

# Inspect the levels of an existing factor
levels(factor_color)          # the level names, in the order R stored them
nlevels(factor_color)         # how many distinct levels exist

# Rename the levels in place (the new vector must follow the same order)
levels(factor_color) <- c('Black', 'Blue', 'Green', 'Red', 'White', 'Yellow')

# Attach labels at creation time instead of renaming afterwards
gender_coded <- factor(c(1, 0, 0, 1, 1), levels = c(0, 1), labels = c('female', 'male'))

# Make 'male' the reference level that modelling functions compare against
gender_coded <- relevel(gender_coded, ref = 'male')

# Remove levels that survived a subset but no longer occur in the data
subset_color <- droplevels(factor_color[1:3])

Tasub meeles pidada kahte detaili. Funktsioonile levels() omistamine nimetab รผmber positsiooni jรคrgi, seega mittevastav vektor nimetab vaikselt รผmber vale kategooria. Ja alamhulk hoiab iga algset taset kuni droplevels() kutsumiseni, mistรตttu filtreeritud... andmeraam saab ikka tรผhje tulpasid joonistada. sildid Argument on jรคlle erinev: see nimetab tasemed loomise ajal ja dubleeritud sildid รผhendavad mitu sisendvรครคrtust รผheks tasemeks.

Kuidas teisendada tegurit numbriliseks vรตi mรคrgiks R-is

See on R-i kรตige levinum faktori viga. Kuna faktoris salvestatakse tรคisarvukoode, tagastab as.numeric() kutsumine need koodid, mitte ekraanil kuvatavad vรครคrtused. Aastate 2021 kuni 2023 faktori vรครคrtused on 1, 2 ja 3.

# A factor whose labels happen to look like numbers
year_factor <- factor(c('2021', '2023', '2022', '2023'))

# WRONG: this returns the internal codes 1, 3, 2, 3 - not the years
as.numeric(year_factor)

# RIGHT: read the label through the levels attribute first
as.numeric(levels(year_factor))[year_factor]

# Equivalent and easier to remember, but slightly slower
as.numeric(as.character(year_factor))

# Back to plain text
as.character(year_factor)

R-i baasdokumentatsioon soovitab รตige ja veidi kiirema marsruudina as.numeric(levels(f))[f], kus hรตlpsamini loetava vastena on as.numeric(as.character(f)). Mรตlemad loevad esmalt sildi ja teisendavad seejรคrel.

  • Tegur iseloomule: as.character(f) tagastab sildid lihttekstina.
  • Tรคisarvulisteks faktoriteks koodid: as.integer(f) vรตi unclass(f), kui koodid on just sellised, nagu sa vajad.
  • Tegelane, keda arvestada: factor(x) vรตi kiirem otsetee as.factor(x).
  • Numbriline tegurdamiseks: factor(x) diskreetsete koodide jaoks, cut(x, breaks) pidevate vรครคrtuste jaoks, mis vajavad ribastamist.

รœks kaitsemeede kehtib neile kรตigile. Kui x vรครคrtus tasemete vektoris ei esine, mรครคrab factor() selle elemendi vรครคrtuseks NA, selle asemel et viga tekitada, seega vรตib hulkuv tรผhik vรตi suurtรคhtede erinevus mรคrkamatult ridu kustutada. Unikaalsete vรครคrtuste vรตrdlemine enne ja pรคrast teisendamist vรตi andmeraami sorteerimine uuel veerul paljastab probleemi kiiresti.

Faktor vs mรคrk vs numbriline R-is: millal igaรผht kasutada

Salvestusreลพiimi varajane valimine sรครคstab hilisemat silumist suurel hulgal. Tabelis vรตrreldakse kolme reลพiimi, mida teksti- vรตi koodiveerud saavad kasutada.

vara Faktor Iseloom Arv-
Salvestatud kui Tรคisarvukoodid pluss levels atribuut Keelpillid Doubles vรตi tรคisarvud
Fikseeritud vรครคrtuste kogum Jah, tasemete kaupa mรครคratletud Ei Ei
Kohandatud kuvamisjรคrjekord Jah, lรคbi tasemete Ainult tรคhestikulises jรคrjekorras Ainult numbriline
Aritmeetika Ei ole lubatud Ei ole lubatud lubatud
Mudeli kontrastid Ehitatud automaatselt Esmalt sunniti Mรตรตtmisena kรคsitletud

Kasutama faktor kui vรครคrtused pรคrinevad teadaolevast suletud loendist, kui kuvamis- vรตi jรคrjestusjรคrjekord on oluline vรตi kui veerg annab teavet mudeli vรตi graafiku legendi kohta. Kasutage. iseloom vaba teksti, identifikaatorite ja kรตige muu jaoks, mida parsite vรตi mille alusel รผhendate, nรคiteks nimed, mรคrkmed ja koodid, mis saabuvad pidevalt uute vรครคrtustega. Kasutage arv- ainult siis, kui kahe vรครคrtuse vaheline kaugus on oluline.

Allolev plokk nรคitab kiireimaid viise, kuidas kontrollida, mis teil tegelikult on.

# Ask R what each column of a data frame actually is
sapply(mtcars, class)

# Direct membership tests
is.factor(factor_day)
is.ordered(factor_day)

# unclass() exposes the integer codes hiding behind the labels
unclass(factor_color)

Valiku รตigsuse tagavad kaks harjumust. Kรคivita pรคrast iga importi sapply(df, class), sest รผksainus ekslik mรคrk numbrilises veerus muudab kogu veeru tekstiks. Ja teisenda teguriks nii hilja kui vรตimalik, pรคrast andmete puhastamist ja รผhendamist, nii et dplyr Liitmised ja filtrid vรตrdlevad endiselt tavalisi stringe, mitte mittevastavaid tasemekomplekte.

KKK

Kui levels'i ei anta, kutsub factor() funktsiooni unique() ja sorteerib vรครคrtused kasvavas jรคrjekorras. See sortimine sรตltub aktiivsest lokaadist, seega pole see alati puhas ASCII. Esitage levels argument selgesรตnaliselt alati, kui jรคrjekorras on tรคhendus.

table(f) tagastab iga taseme kohta nimetatud loenduri ja prop.table(table(f)) teisendab need loendurid proportsioonideks. Mรตlemad hoiavad tรผhjad tasemed nรคhtavana, mis teeb need kasulikuks pรคrast filtreerimist kadunud kategooriate mรคrkamiseks. andmeraam.

factor() leiab iga elemendi vaste teie sisestatud tasemetele ja iga vรครคrtus, millel vastet pole, muutub NA-ks, selle asemel et tekitada viga. Enne teisendamist kontrollige funktsiooni setdiff(unique(x), your_levels) ja jรคlgige, kas lรคhteandmetes on juhuslikke tรผhikuid vรตi erinevat suurtรคhtede kasutust.

cut() jagab numbrilise vektori antud murdepunktides ja tagastab teguri. Edastage loetavate ribade nimede sildid ja ordered_result = TRUE, kui ribad on jรคrjestatud. findInterval() on kiirem alternatiiv, kui on vaja ainult prรผgikasti indeksit.

Alates versioonist R 4.0.0 on data.frame() ja read.csv() funktsioonide tehase vaikevรครคrtus stringsAsFactors = FALSE, seega tekstiveerud jรครคvad tรคhemรคrkideks. Vanemad skriptid, mis tuginesid automaatsele teisendamisele, peavad nรผรผd factor() funktsiooni modelleeritavate veergude jaoks selgesรตnaliselt kutsuma.

Less kui varem. R-i baasviide mรคrgib, et identsed stringid jagavad nรผรผd salvestusruumi, seega on vahe enamasti vรคike. Faktorid tasuvad end endiselt รคra kategooriate valideerimise ja mudelites ning graafikutes kasutatava tasemete jรคrjekorra fikseerimise kaudu.

Enamik modelleerimisfunktsioone aktsepteerib tegureid otse ja loob automaatselt nรคivkontraste, samas kui paljud masinรตpe Paketid ootavad numbrilist maatriksit. model.matrix() vรตi รผhekordne kodeering tรคidab selle tรผhimiku ning jรคrjestatud tegur saab oma jรคrjestust sรคilitada.

Jah. GitHubi koopia Tรถรถtab RStudio 2023.09.0 ja uuemates versioonides ning pakub vรคlja tรคiendusi avatud faili kommentaaride ja koodi pรตhjal. Kรคsitle tasemete jรคrjekorda ja NA kรคsitlemist kontrollimiseks mรตeldud soovitustena, mitte faktidena.

Vรตta see postitus kokku jรคrgmiselt: