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 6
Startad

Baslinje

Avsnitt Progress
0% färdig

Inom flera områden (medicin, ekonomi, etc) behövs en inledande beskrivning av studiepopulationen. Sådana beskrivningar brukar utgöra studiens Table 1, vilket är den första tabellen i studien. Produktion av Table 1 är således en del av många studier. För att skapa Table 1 använder vi paketet tableone. Användning av detta paketet är mycket enkelt och visas steg för steg här nedan.

Börja med att aktivera tidyverse, samt installera och aktivera tableone:

R
# Aktivera tidyverse
library(tidyverse)

# Installera tableone
install.packages("tableone")

# Aktivera tableone
library(tableone)

I detta exempel använder vi Right Heart Catetherization (RHC), som är en klinisk studie. Ladda ner data till R genom nedanstående kommando. Som framgår nedan sparar vi data till objektet rhc.

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

Variabelnamnen i en data frame är inte alltid lämpliga för presentation i en rapport. Därför använder vi paketet labelled, vilket gör det möjligt att ge varje variabel en label (etikett), som kan användas i presentationer och rapporter. Installera och aktivera paketet labelled:

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

Från rhc data väljer vi de kolumner (variabler) som skall vara med i Table 1.

R
rhc2 <- select(rhc,
               adld3p,
               age,
               alb1,
               amihx,
               aps1,
               bili1,
               ca,
               card,
               cardiohx,
               cat1,
               cat2,
               chfhx,
               chrpulhx,
               crea1,
               death)

Vi fortsätter genom att ge varje variabel en label. Det görs genom följande kod:

R
var_label(rhc2) <- list(adld3p    = "ADL",
                        age       = "Age (years)",
                        alb1      = "Albumin (g/L)",
                        amihx	  = "Definite Myocardial Infarction",
                        aps1	  = "APACHE score",
                        bili1	  = "Bilirubin",
                        ca	  = "Cancer",
                        card	  = "Cardiovascular Diagnosis",
                        cardiohx  = "Cardiovascular disease",
                        cat1	  = "Primary disease category",
                        cat2	  = "Secondary disease category",
                        chfhx	  = "Congestive Heart Failure",
                        chrpulhx  = "Chronic Pulmonary Disease",
                        crea1	  = "Creatinine",
                        death	  = "Death at 180 days")

Skapa sedan första objektet, som vi kallar results. Funktionen vi använder heter CreateTableOne och den har argumenten vars, strata och data. Vi anger att vars är lika med alla kolumnnamnen i rhc2 (names(rhc2)), och att strata är kolumnen death. Detta kommer ge oss en Table 1 stratifierat på death. Vi specificerar också att data kommer från rhc2.

R
results <- CreateTableOne(vars=names(rhc2),
                          strata="death",
                          data=rhc2)

I nästa steg behöver vi tillämpa funktionen print() på föregående objekt (results). Print används för att styra vilken information som Table 1 skall innehålla. Som framgår här nedan finns en rad inställningar som kan justeras efter tycke och smak.

R
results2 <- as_tibble(print(results,
                             # Antal decimaler på kategoriska variabler
                             catDigits=2,
                             # Antal decimaler på kontinuerliga variabler
                             contDigits=1,
                             # Antal decimaler på p-värden
                             pDigits=5,
                             # Visa missing i en kolumn
                             missing=TRUE,
                             # Ange om det är medelvärden, SD eller medianer
                             explain=TRUE,
                             # Skriv inte ut resultatet förrän vi ber om det
                             printToggle=FALSE,
                             # Presentera P-värden
                             test=TRUE,
                             # Presentera standardized mean difference
                             smd=TRUE,
                             # Ta bort onödiga mellanrum
                             noSpaces=TRUE,
                             # Ska variabel labels användas istället? 
                             varLabels=TRUE,
                             # ange om någon variabel inte är normalfördelad
                             nonnormal=c('age')),
                             # Ska radnamnen behållas, i så fall vad skall kolumnen heta?
                             rownames="Variable")

# Om du använder ett vanligt R-skript skriver du ut resultatet som följer:                         
results2

# Om du använder R Markdown skriver du ut resultatet som följer:
library(knitr)
kableone(results2)

Resultat

VariableAliveDeadP-valueSMDMissing
n20133722
ADL (mean (SD))1.0 (1.7)1.4 (1.9)<0.000010.2467574.9
Age (years) (median [IQR])58.3 [43.3, 70.3]66.2 [54.3, 75.6]<0.000010.453960.0
Albumin (g/L) (mean (SD))3.1 (0.7)3.1 (0.8)0.025340.063590.0
Definite Myocardial Infarction (mean (SD))0.0 (0.2)0.0 (0.2)0.672960.011630.0
APACHE score (mean (SD))49.5 (18.2)57.5 (20.3)<0.000010.416760.0
Bilirubin (mean (SD))1.7 (3.3)2.6 (5.4)<0.000010.189050.0
Cancer (%)<0.000010.452950.0
Metastatic36 (1.79)348 (9.35)
No1758 (87.33)2621 (70.42)
Yes219 (10.88)753 (20.23)
Cardiovascular Diagnosis = Yes (%)645 (32.04)1286 (34.55)0.058740.053270.0
Cardiovascular disease (mean (SD))0.2 (0.4)0.2 (0.4)0.001570.088500.0
Primary disease category (%)<0.000010.449030.0
ARF1019 (50.62)1471 (39.52)
CHF181 (8.99)275 (7.39)
Cirrhosis66 (3.28)158 (4.25)
Colon Cancer3 (0.15)4 (0.11)
Coma89 (4.42)347 (9.32)
COPD176 (8.74)281 (7.55)
Lung Cancer3 (0.15)36 (0.97)
MOSF w/Malignancy36 (1.79)363 (9.75)
MOSF w/Sepsis440 (21.86)787 (21.14)
Secondary disease category (%)<0.000010.5153779.1
Cirrhosis6 (2.17)32 (3.46)
Colon Cancer0 (0.00)2 (0.22)
Coma20 (7.25)70 (7.58)
Lung Cancer0 (0.00)15 (1.62)
MOSF w/Malignancy20 (7.25)209 (22.62)
MOSF w/Sepsis230 (83.33)596 (64.50)
Congestive Heart Failure (mean (SD))0.1 (0.4)0.2 (0.4)<0.000010.133310.0
Chronic Pulmonary Disease (mean (SD))0.2 (0.4)0.2 (0.4)0.022940.063420.0
Creatinine (mean (SD))1.9 (2.0)2.3 (2.1)<0.000010.172450.0
Death at 180 days = Yes (%)0 (0.00)3722 (100.00)<0.00001NaN0.0