Gå till index

Analys med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Prediktionsmodeller: Tidymodels
  12. Hypotestester
    1 Ämne
Avsnitt 7, Ämne 4
Startad

Tabellering

Avsnitt Progress
0% färdig

I detta kapitel används data från Right Heart Catetherization (RHC) för att demonstrera funktioner för att tabellera data. Du kan ladda ner data med följande kommando:

R
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)

Funktioner i base R

Base R är grundinstallationen utan några tilläggspaket. Den mest använda funktionen för tabeller i base R är table().

En enskild kategorisk variabel kan tabelleras med funktionen table():

R
table(rhc$sex)
Resultat
Female   Male 
  2543   3192 

En korstabell skapas som följer:

R
table(rhc$sex, rhc$death)
Resultat
           No  Yes
  Female  919 1624
  Male   1094 2098

Notera att första argumentet (sex) hamnar som rader och andra argumentet (death) blir kolumner i korstabellen.

Vi kan göra en korstabell stratifierad på en tredje variabel. För att stratifiera föregående tabell på variabeln ca (cancer) skriver vi som föjer:

R
table(rhc$sex, rhc$death, rhc$ca)
Resultat
ca = Metastatic

           No  Yes
  Female   24  175
  Male     12  173

ca = No

           No  Yes
  Female  798 1151
  Male    960 1470

ca = Yes

           No  Yes
  Female   97  298
  Male    122  455

Tabellering med tilläggspaket

Paketen janitor, dplyr, gtsummary, crosstable och rstatix innehåller kraftfulla funktioner för att skapa deskriptiva tabeller. Installera paketen med följande kommando:

R
install.packages(c("rstatix", "janitor", "gtsummary", "crosstable"))

Rstatix

Med funktionen get_summary_stats() genererar vi deskriptiva data för variablerna age, aps1, urin1, adld3p, paco21 och ph1:

R
library(rstatix)
rhc %>% 
  get_summary_stats(
    age, aps1, urin1, adld3p, paco21, ph1,
    type = "full")
R
# A tibble: 6 × 13
variable  n     min  max  median q1      q3      iqr     mad      mean    sd    se     ci
adld3p    1439  0    7    0      0       2       2       0        1.18    1.82  0.048  0.094
age       5735 18.0  102. 64.0   50.1    73.9    23.8    17.0     61.4    16.7  0.22   0.432
aps1      5735  3    147  54     41      67      26      19.3     54.7    20.0  0.264  0.517
paco21    5735  1    156  37     31      42      11      8.90     38.7    13.2  0.174  0.341
ph1       5735  6.58 7.77 7.4    7.34    7.46    0.12    0.089    7.39    0.11  0.001  0.003
urin1     2707  0    9000 1927   1110    2955    1845    1357.    2192.   1525. 29.3   57.5  

Argumentet type har ovan specificerats till type="full", vilket resulterar i ovanstående parametrar. Argumentet har följande alternativ: "full", "common", "robust", "five_number", "mean_sd", "mean_se", "mean_ci", "median_iqr", "median_mad", "quantile", "mean", "median", "min", "max".

Janitor

Med janitor kan flexibla tabeller skapas. Vi börjar med en beskrivning av variabeln cat1 (sjukdomskategori)

R
library(janitor)
rhc %>% tabyl(cat1, show_na = T)
Resultat
              cat1    n     percent
               ARF 2490 0.434176112
               CHF  456 0.079511770
         Cirrhosis  224 0.039058413
      Colon Cancer    7 0.001220575
              Coma  436 0.076024412
              COPD  457 0.079686138
       Lung Cancer   39 0.006800349
 MOSF w/Malignancy  399 0.069572799
     MOSF w/Sepsis 1227 0.213949433

Därefter lägger vi till variabeln sex, vilket resulterar i en korstabell:

R
rhc %>% tabyl(cat1, sex, show_na = T)
Resultat
              cat1 Female Male
               ARF   1108 1382
               CHF    143  313
         Cirrhosis     81  143
      Colon Cancer      5    2
              Coma    230  206
              COPD    208  249
       Lung Cancer     12   27
 MOSF w/Malignancy    190  209
     MOSF w/Sepsis    566  661

Med janitors "adorn"-funktioner kan vi lägga till ytterligare information i tabellerna. Adorn funktioner kan kombineras. De är som följer:

Funktionens namnFunktion
adorn_totals()Lägger till total.
Har argumentet where = som kan vara “row”, “col”, eller “both”.
adorn_percentages()Konverterar antal till proportioner. Har argumentet denominator = “row”, “col”, eller “all”.
adorn_pct_formatting()Konverterar proportioner till procent.
adorn_rounding()Avrundar decimalerna i proportioner.
adorn_ns()Lägger till antal i en tabell med proportioner eller procent.
adorn_title()Lägger till en rubrik på raderna och kolumnerna i korstabellen.

Vi skapar du en korstabell med procentsiffror:

R
rhc %>%
  tabyl(cat1, sex, show_na = T) %>%
  adorn_totals(where="col") %>%
  adorn_totals(where="row") %>%
  adorn_percentages() %>%
  adorn_pct_formatting()
Resultat
              cat1 Female  Male  Total
               ARF  44.5% 55.5% 100.0%
               CHF  31.4% 68.6% 100.0%
         Cirrhosis  36.2% 63.8% 100.0%
      Colon Cancer  71.4% 28.6% 100.0%
              Coma  52.8% 47.2% 100.0%
              COPD  45.5% 54.5% 100.0%
       Lung Cancer  30.8% 69.2% 100.0%
 MOSF w/Malignancy  47.6% 52.4% 100.0%
     MOSF w/Sepsis  46.1% 53.9% 100.0%
             Total  44.3% 55.7% 100.0%

Vi adderar nu antalet i tillägg till procentsiffror:

R
rhc %>%                                  
  tabyl(cat1, sex) %>%
  adorn_totals(where = "row") %>%
  adorn_percentages(denominator = "col") %>%
  adorn_pct_formatting() %>%
  adorn_ns(position = "front") %>%
  adorn_title(
    row_name = "Sjukdom",
    col_name = "Kön")
Resultat
                             Kön              
           Sjukdom        Female          Male
               ARF 1108  (43.6%) 1382  (43.3%)
               CHF  143   (5.6%)  313   (9.8%)
         Cirrhosis   81   (3.2%)  143   (4.5%)
      Colon Cancer    5   (0.2%)    2   (0.1%)
              Coma  230   (9.0%)  206   (6.5%)
              COPD  208   (8.2%)  249   (7.8%)
       Lung Cancer   12   (0.5%)   27   (0.8%)
 MOSF w/Malignancy  190   (7.5%)  209   (6.5%)
     MOSF w/Sepsis  566  (22.3%)  661  (20.7%)
             Total 2543 (100.0%) 3192 (100.0%)

Du kan spara tabellen direkt till Microsoft Word, Powerpoint, HTML eller som en bild med hjälp av paketet flextable, vars funktioner kan tillämpas direkt enligt följande exempel. Vi Funktionen save_as_docx() sparar tabellen till Microsoft Word. Alternativt kan funktionerna save_as_html(), save_as_word(), save_as_ppt(), eller save_as_image() användas.

R
install.packages("flextable")
library(flextable)

rhc %>%                                  
  tabyl(cat1, sex) %>% 
  adorn_totals(where = "row") %>%
  adorn_percentages(denominator = "col") %>%
  adorn_pct_formatting() %>%
  adorn_ns(position = "front") %>%
  flextable() %>% # skapar en flextable
  autofit() %>% # Säkerställer max 1 rad per cell
  save_as_docx(path="min_tabell.docx") # Sparar i Word-format

Crosstable

R
library(crosstable)

Vi skapar nu en korstabell för sex och death. Vi specificerar en speciell funktion för percent_pattern (denna behöver du inte komma ihåg):

R
crosstable(data=rhc,
           # Variabler att korstabellera
           cols=c(age, sex),
           # Vilka procentsatser skall visas?
           total = "both",
           # Hur skall procentsatser visas?
           percent_pattern="{n} ({p_row}/{p_col})") %>%
       # Snyggare formatering
       as_flextable()

Som du märker resulterade funktionen inte i en korstabell vilket förklaras av att vi glömde argumentet by, vilket vi korrigerar nu:

R
crosstable(rhc,
           cols=c(age, sex),
           by=death,
           total = "both",
           percent_pattern="{n} ({p_row}/{p_col})") %>%
  as_flextable()

Funktionen kan användas för att inspektera alla variablerna stratifierat på exempelvis death. För att inspektera alla variabler specificeras cols=everything():

R
crosstable(rhc,
           cols=everything(),
           by=death,
           total = "both",
           percent_pattern="{n} ({p_row}/{p_col})") %>%
  as_flextable()

Figuren är avkortad.