Kapitel 81 RCT Analysieren

Unkorrigierte, unfertige Version 24 December, 2022

Sie lernen in diesem Kapitel folgendes:

  • Dass Regression auf T1 kontrolliert für T0 das gleiche Result gibt die Analyse dier Pre-Post Differenz kontrolliert für T0
  • To be Done

81.1 Packete für dieses Kapitel

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   0.3.4 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.5.0 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(cowplot)
library(sjPlot)
## 
## Attaching package: 'sjPlot'
## 
## The following objects are masked from 'package:cowplot':
## 
##     plot_grid, save_plot

Wir werden eine Regression auf den t1-Wert der abhängigen Variable verwenden, kontrolliert für den Wert zu Beginn der Studie (t0). Ich versuche zu erklären, warum dies die beste Analyse ist. Zu diesem Zweck simuliere ich einige Daten, bei denen die Differenz zwischen t0 und t1 zwei Punkte für die Kontrollgruppe und vier Punkte für die Interventionsgruppe beträgt. Achtung: Die Differenz ist in der Population 2 Punkte, in der Stichprobe unserer Studie wird diese Differenz natürlich von der Populationsdifferenz abweichen (sampling variability).

81.2 Graphische Darstellung der Resultate

df_example_long<-df_example %>% 
  pivot_longer(cols = c(outcome_t0, outcome_t1, diff_t1_t0), 
               names_to = c(".value", "time"),
        names_sep = '_') %>% 
  mutate(id=factor(id))
## Warning: Expected 2 pieces. Additional pieces discarded in 1 rows [3].
p1<-ggplot(df_example_long, aes(x=time, y=outcome, color=id, group=id))+
  geom_line()+
  theme_classic()+
    theme(legend.position = 'none')

p2<-ggplot(data=df_example, aes(x=group, y=diff_t1_t0, fill=group))+
  geom_boxplot()+
  theme_classic()
cowplot::plot_grid(p1, p2,labels = c('A', 'B'))

Nun könnten wir einen t-Test auf den Unterschied der Differenzen t1 minus t0 durchführen:

Wir sehen, dass die Differenz der Veränderung 2.55 ist, zugunsten der Interventionsgruppe.

t.test(diff_t1_t0~group, data=df_example,var.equal=TRUE )
## 
##  Two Sample t-test
## 
## data:  diff_t1_t0 by group
## t = -1.9338, df = 198, p-value = 0.05456
## alternative hypothesis: true difference in means between group Control and group Intervention is not equal to 0
## 95 percent confidence interval:
##  -4.96739041  0.04855396
## sample estimates:
##      mean in group Control mean in group Intervention 
##                   1.674020                   4.133438

Oder ein lineares Modell erstellen:

lm_diff.fit<-lm(diff_t1_t0~group, data=df_example)
tab_model(lm_diff.fit)
  diff t 1 t 0
Predictors Estimates CI p
(Intercept) 1.67 -0.08 – 3.43 0.062
group [Intervention] 2.46 -0.05 – 4.97 0.055
Observations 200
R2 / R2 adjusted 0.019 / 0.014

Wir sehen, dass der Unterschied bei beiden Methoden genau gleich groß ist.

Wir sollten nun den Basiswert der abhängigen Variable anpassen:

lm_diffadjusted.fit<-lm(diff_t1_t0~group+outcome_t0, data=df_example)
tab_model(lm_diffadjusted.fit)
  diff t 1 t 0
Predictors Estimates CI p
(Intercept) -1.91 -10.55 – 6.72 0.663
group [Intervention] 2.55 0.03 – 5.07 0.047
outcome t0 0.07 -0.10 – 0.24 0.404
Observations 200
R2 / R2 adjusted 0.022 / 0.012

Wir können nun zeigen, dass die Anpassung eines Modells mit dem Ergebnis bei t1 als abhängige Variable, bereinigt um den Wert bei t0, gleichwertig ist.

lm_fup_adjusted.fit<-lm(outcome_t1~group+outcome_t0, data=df_example)
tab_model(lm_fup_adjusted.fit)
  outcome t 1
Predictors Estimates CI p
(Intercept) -1.91 -10.55 – 6.72 0.663
group [Intervention] 2.55 0.03 – 5.07 0.047
outcome t0 1.07 0.90 – 1.24 <0.001
Observations 200
R2 / R2 adjusted 0.451 / 0.445

Die Interventionsgruppe verändert sich um 2.55 Punkte mehr als die Kontrollgruppe.