Screening af kolonner

Det er vigtigt at få et hurtigt overblik over kolonnerne i en data frame. Denne type analyse bruges til at sikre sig, at alle kolonner har det forventede indhold. Medmindre dataindsamlingen er foregået meget omhyggeligt, er det sandsynligt, at en eller flere variabler ikke har den forventede formatering. Forekomsten af et enkelt ikke-numerisk tegn i en kolonne med datoer eller numeriske værdier er nok til, at hele kolonnen bliver fortolket som en tekstkolonne i R.

Der findes en række forskellige pakker og funktioner til at generere oversigter over data frames. Nedenfor følger en række funktioner med små, men vigtige nuancer.

Vi begynder med pakken mlr, som indeholder funktionen summarizeColumns(). Pakken mlr skal være installeret, for at funktionen kan bruges. Installér og aktivér pakken på følgende måde:

install.packages("mlr")
library(mlr)

mlr har en tendens til at bruge scientific notation, hvilket betyder, at store og små tal skrives ud som eksponenttal; for eksempel skrives 100000000 ud som 1e+08. Du kan slå scientific notation fra med følgende kommando:

## Slå scientific notation fra i R
options(scipen = 999)

Brug derefter funktionen summarizeColumns() til at gennemgå indholdet i vores data frame (rhc):

summarizeColumns(rhc)
name (variabelnavn) type (variabeltype) na (antal missing) mean (middelværdi) disp (SD for numeriske værdier; kvalitativ variation for kategoriske) median (medianværdi) mad (median absolute deviation; NA for kategoriske kolonner) min (mindste værdi) max (største værdi) nlevs (antal niveauer for kategoriske variabler; 0 for numeriske)
adld3p integer 4296 1.18207088 1.819057175 0.0000000 0.00000000 0.00000000 7.0000000 0
age numeric 0 61.37588300 16.681929290 64.0470000 16.96239695 18.04199000 101.8479600 0
alb1 numeric 0 3.09274278 0.783276789 3.5000000 0.29680955 0.29998780 29.0000000 0
amihx integer 0 0.03487358 0.183475574 0.0000000 0.00000000 0.00000000 1.0000000 0
aps1 integer 0 54.66765475 19.956433845 54.0000000 19.27380000 3.00000000 147.0000000 0
bili1 numeric 0 2.26706698 4.801537560 1.0097656 0.43001193 0.09999084 58.1953125 0
ca character 0 NA 0.236442895 NA NA 384.00000000 4379.0000000 3
card character 0 NA 0.336704446 NA NA 1931.00000000 3804.0000000 2
cardiohx integer 0 0.17663470 0.381392509 0.0000000 0.00000000 0.00000000 1.0000000 0
cat1 character 0 NA 0.565823888 NA NA 7.00000000 2490.0000000 9
cat2 character 4535 NA NA NA NA 2.00000000 826.0000000 6
chfhx integer 0 0.17802964 0.382571052 0.0000000 0.00000000 0.00000000 1.0000000 0
chrpulhx integer 0 0.18988666 0.392245516 0.0000000 0.00000000 0.00000000 1.0000000 0
crea1 numeric 0 2.13301689 2.053079758 1.5000000 0.88970479 0.09999084 25.0976562 0
das2d3pc numeric 0 20.49688754 5.317185677 19.7460900 5.46708750 11.00000000 33.0000000 0
death character 0 NA 0.351002616 NA NA 2013.00000000 3722.0000000 2
dementhx integer 0 0.09834350 0.297804507 0.0000000 0.00000000 0.00000000 1.0000000 0
dnr1 character 0 NA 0.114036617 NA NA 654.00000000 5081.0000000 2
dschdte integer 1 11660.05040112 513.447322056 11777.0000000 658.27440000 10757.00000000 12560.0000000 0
dth30 character 0 NA 0.334437663 NA NA 1918.00000000 3817.0000000 2
dthdte integer 2013 11753.86915637 538.812330065 11831.5000000 675.32430000 10757.00000000 12783.0000000 0
edu numeric 0 11.67846146 3.145831004 12.0000000 2.96520000 0.00000000 30.0000000 0
gastr character 0 NA 0.164254577 NA NA 942.00000000 4793.0000000 2
gibledhx integer 0 0.03225806 0.176700102 0.0000000 0.00000000 0.00000000 1.0000000 0
hema character 0 NA 0.061726242 NA NA 354.00000000 5381.0000000 2
hema1 numeric 0 31.86547859 8.363786134 30.0000000 6.82227582 2.00000000 66.1875000 0
hrt1 integer 0 115.17890148 41.244941234 124.0000000 29.65200000 0.00000000 250.0000000 0
immunhx integer 0 0.26904969 0.443504514 0.0000000 0.00000000 0.00000000 1.0000000 0
income character 0 NA 0.437489102 NA NA 451.00000000 3226.0000000 4
liverhx integer 0 0.06992153 0.255036968 0.0000000 0.00000000 0.00000000 1.0000000 0
lstctdte integer 0 11781.25789015 524.094168229 11868.0000000 673.10040000 10756.00000000 12644.0000000 0
malighx integer 0 0.22946818 0.420527489 0.0000000 0.00000000 0.00000000 1.0000000 0
meanbp1 numeric 0 78.52005231 38.046582141 63.0000000 26.68680000 0.00000000 259.0000000 0
meta character 0 NA 0.046207498 NA NA 265.00000000 5470.0000000 2
neuro character 0 NA 0.120836966 NA NA 693.00000000 5042.0000000 2
ninsclas character 0 NA 0.703923278 NA NA 322.00000000 1698.0000000 6
ortho character 0 NA 0.001220575 NA NA 7.00000000 5728.0000000 2
paco21 numeric 0 38.74897496 13.183444618 37.0000000 8.89560000 1.00000000 156.0000000 0
pafi1 numeric 0 222.27370952 114.953087434 202.5000000 122.31450000 11.59961000 937.5000000 0
ph1 numeric 0 7.38841349 0.109811941 7.3999980 0.08890114 6.57910200 7.7695310 0
pot1 numeric 0 4.06669330 1.028353060 3.7998050 0.74130000 1.09985400 11.8984380 0
psychhx integer 0 0.06730602 0.250573071 0.0000000 0.00000000 0.00000000 1.0000000 0

Du kan kombinere dplyr-funktioner (f.eks. filter, select) med summarizeColumns() for at gennemgå kolonnernes karakteristika i en undergruppe af datasættet. Herunder laver vi tabellen igen, men medtager kun patienter, som ikke havde cancer (ca="No"):

rhc |>
  filter(ca=="No") |>
  summarizeColumns()

Kun de første 4 variabler vises nedenfor.

name type na mean disp median mad min max nlevs
adld3p integer 3258 1.16859946 1.810469232 0.0000000 0.00000000 0.00000000 7.0000000 0
age numeric 0 60.88398987 16.971172590 63.4929800 17.66669125 18.14600000 101.8479600 0
alb1 numeric 0 3.11450956 0.703468345 3.5000000 0.29680955 0.29998780 11.0000000 0
amihx integer 0 0.03653802 0.187646040 0.0000000 0.00000000 0.00000000 1.0000000 0
... ... ... ... ... ... ... ... ... ...

summarizeColumns() genererer ingen information om kategoriske variablers (factors) niveauer. For at få denne information bruges følgende kommando:

summarizeLevels(rhc)
$ca
Metastatic         No        Yes
       384       4379        972

$card
  No  Yes
3804 1931

$cat1
              ARF               CHF         Cirrhosis      Colon Cancer              Coma              COPD
             2490               456               224                 7               436               457
      Lung Cancer MOSF w/Malignancy     MOSF w/Sepsis
               39               399              1227

$cat2
        Cirrhosis      Colon Cancer              Coma       Lung Cancer MOSF w/Malignancy     MOSF w/Sepsis
               38                 2                90                15               229               826

$death
  No  Yes
2013 3722

$dnr1
  No  Yes
5081  654

$dth30
  No  Yes
3817 1918

$gastr
  No  Yes
4793  942

$hema
  No  Yes
5381  354

$income
    > $50k   $11-$25k   $25-$50k Under $11k
       451       1165        893       3226

Screening med Hmisc

Pakken Hmisc indeholder en række nyttige funktioner til eksploration og analyse. Funktionen describe() bruges til at beskrive alle kolonner i en data frame. Begynd med at installere Hmisc og aktivere pakken:

install.packages("Hmisc")
library(Hmisc)

Nu opretter vi objektet rhc_described ved at anvende funktionen describe() på vores data frame. Derefter skriver vi resultatet ud med funktionen html().

rhc_described <- describe(rhc)
html(rhc_described, size = 80)
Output fra Hmisc describe for datasættet rhc: n, missing, middelværdi, percentiler og minihistogram for adld3p, age og alb1
Kun de første 3 variabler er vist ovenfor. Som det fremgår af billedet ovenfor, får vi en række deskriptive parametre for hver variabel samt et histogram over spredningen.

I næste trin bruger vi flere funktioner i Hmisc til at generere frekvensdiagrammer og histogrammer. Se kommentarerne i koden for detaljer:

## Anvender funktionen plot() på vores objekt rhc_described
rhc_described_plots <- plot(rhc_described)

## Undersøger fordelinger i kategoriske data
rhc_described_plots$Categorical

## Undersøger histogrammer for kontinuerte data
rhc_described_plots$Categorical
Punktdiagram fra Hmisc med andelen pr. niveau for alle kategoriske variabler i datasættet rhc
Spikehistogram fra Hmisc, der viser fordelingen af de kontinuerte variabler age, alb1 og crea1
Kun de første 3 numeriske variabler er vist her.

Generér kolonnedata stratificeret efter en kategorisk variabel

Hmisc indeholder funktionen summaryM(), som viser variablernes karakteristika stratificeret efter en kategorisk variabel. Den kategoriske variabel er typisk et udfaldsmål (event, outcome) i studiet. Funktionen summaryM() er speciel, idet den bruger en formel til at angive de variabler, der skal vises. Funktionen beregner også forskellige typer hypotesetest for gruppeforskelle. Om sådanne hypotesetest (P-værdier) er nyttige eller ej, afhænger af konteksten. Det er oftest uhensigtsmæssigt at udføre hypotesetest rutinemæssigt på jagt efter gruppeforskelle eller for at identificere, hvilke variabler der skal inkluderes i en statistisk model.

Herunder demonstreres funktionen. Bemærk, at de variabler, vi vil undersøge, placeres til venstre for tilde (~), adskilt af +, og outcome placeres til højre for ~. Vi anvender funktionen html() på resultatet for at få et æstetisk tiltalende resultat.

rhc_summary <- summaryM(age + alb1 + card + crea1 + hema1 + trauma + edu + dementhx ~ death,
              data = rhc,
              overall = TRUE,
              test = TRUE)

html(rhc_summary,
     caption='Prediktorer i relation till död',
     exclude1 = TRUE,
     npct = 'both',
     digits = 2,
     prmsd = TRUE,
     brmsd = TRUE)
Tabel fra summaryM med kvartiler, middelværdi ± SD og andele pr. variabel stratificeret efter død, med F- og chi2-test
Kun de første rækker vises her.