Kapitel 25 Typ-II Fehler

Eine sinnlose Studie, die uns Erleuchtung schenken soll.

Ein Walliser Wissenschaftler will untersuchen, ob man mit Aproz (Walliser Mineralwasser) besser abnehmen kann als mit Coca Cola. Er wollte dies an Patientinnen und Patienten mit Kniearthrose untersuchen, da hier eine Gewichtsreduktion meistes auch zu einer Schmerzreduktion führt.

25.1 Hypothesen erstellen

  • Wir postulieren eine Nullhypothese ** Mit Aproz nimmt man nicht mehr ab als mit Coca Cola

  • Wir legen ein Signifikanzniveau (α) fest (meistens 5%, d.h. α = 0.05).

  • Wir legen fest, welche Typ-II. Oft 20%. Dies ergibt eine sogenannte statistische Power von 80%.

  • Wir berechnen die benötigte Stichprobengrösse

  • Wir schauen, ob die Daten unserer Studien Evidenz gegen die Nullhypothese liefern

  • Wir berechnen den P-Wert (die Wahrscheinlichkeit einen solchen oder stärkeren Effekt zu finden, wenn es in Wahrheit keinen gibt).

  • Alternativ können wir auch ein Konfidenzintervall berechnen.

  • Ist der P-Wert kleiner als das Signifikanzniveau sprechen wir von einem statistisch signifikanten Effekt.

  • Je kleiner der P-Wert, desto grösser die Evidenz gegen die Nullhypothese

Für eine kritische Diskussion des Hypothesentestens [siehe hier] (https://www.fharrell.com/post/pval-litany/)

knitr::include_graphics("Hypothese Aproz_CocaCola.png")
Alternativhypothese und Nullhypothese

Abbildung 24.1: Alternativhypothese und Nullhypothese

In dieser sinnlosen Studie kennen wir die Wahrheit ja: Es gibt keinen Unterschied zwischen Aproz und Coca Cola in Bezug auf das Abnehmen. Wenn wir allen Menschen während sechs Monaten Coca Cola geben würden und den gleichen Menschen im Paralell-Universum Coca Cola geben würden, so würden die Menschen hier (Aproz) und im Parallel-Universum (Coca Cola) gleich viel Gewicht aufweisen nach sechs Monaten. Natürlich werden wir in einer Studie einen Unterschied sehen, da ja nicht dieselben Personen in den beiden Interventionsgruppen sind (da wir keinen Zugang zum Parallell-Universum haben). Die Unterschiede im Gewicht nach sechs Monaten sind jedoch nicht auf Aproz oder Coca Cola zurückzuführen, sondern auf Unterschiede zwischen den Menschen. Da die Studie eine randomisierte Studie ist, werden diese Unterschiede zufällig sein.

Langer Rede kurzer Sinn: In dieser Studie stimmt die Nullhypothese nicht (in Wahrheit gibt es einen Unterschied zwischen Aproz und Coca Cola im Einfluss auf das Gewicht).

25.2 Wie viele müssen an der Studie teilnehmen?

Es ist nicht ethisch mehr Personen an einer Studie teilnehmen zu lassen, als wirklich nötig wäre. Es ist aber auch nicht sinnvoll weniger einzuschliessen, da mit zu kleiner Studiengrösse die statistische Präzision nicht erreicht wird. Deswegen muss vor jeder Studie berechnet werden, wie viele Teilnehmende es benötigt.

Der Wissenschaftler geht zur Statistikerin und fragt, wie gross die Studie denn sein müsste. Die Statistikerin wollte wissen, was denn der kleinste klinisch relevante Unterschied im Gewichtsverlust über die 6 Monate der Intervention wäre, und was Schätzungsweise die Standardabweichung der Gewichtsabnahme sein könnte. [Hier ein Link für Interessierte] (https://med.und.edu/daccota/_files/pdfs/berdc_resource_pdfs/sample_size_r_module.pdf).Der Wissenschaftler sagte, dass dies mindestens 3 Kilogramm sein sollten, und dass die Standardabweichung schätzungsweise 6kg sei. Die kleinste klinisch relevante Differenz fand der Wissenschaftler in einer Studie (auf englisch Minimal Clinically Importand Difference). Die Standarabweichung der Gewichtsabnahme über 6 Monate fand der Wissenschaftler in einem grossen Datenregister. Mit diesen Angaben und einem Signifikanzniveau von 5% (d.h. einer Typ-I Fehlerwahrscheinlichkeit von 5%) und einer statistischen Power von 80% (d.h. einer Typ-II Fehlerwahrscheinlichkeit von 20%) berechnete die Statistikerin, dass pro Gruppe 64 Personen analysiert werden sollten (d.h. Total 128 Teilnehmende).

Der Wissenschaftler rechnete damit, dass etwa 20% der Studienteilnehmenden die Studie abbrechen würden und somit wollte er 160 Patienten einschliesen. Falls nun 20% der Teilnehmenden die Studie abbrechen würden (160 * 0.2 = 32 Abbrecher), hätte er immer noch 128 in der Studie.

Wie kam der Wissenschaftler auf die 160 Teilnehmenden?

Am Ende muss er ja 128 haben. Wenn nun 20% ausfallen, dass entsprechen die 128 Teilnehmenden ja 80% vom den eingeschlossenen Teilnehmenden.

Hier unten sehen Sie auch noch wie die Statistikerin die benötigte Stichprobengrösse berechnete:

mcid <-3 # mcid = minimal clinically important difference (muss man aus einer grösseren Studie nehmen)
sd<-6 # Standardabweichung der Veränderung, kann man aus einer sehr grossen Studie oder einem Datenregister nehmen. 
effect_size=mcid / sd # Berechnung der Effektgrösse d
pwr::pwr.t.test(d=effect_size, sig.level=0.05, power=0.80, type="two.sample", alternative="two.sided")
## 
##      Two-sample t test power calculation 
## 
##               n = 63.76561
##               d = 0.5
##       sig.level = 0.05
##           power = 0.8
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

25.3 Die randomisierte Studie

Die Rekrutierung der Studienteilnehmenden gestaltete sich schwieriger als erwartet. Viele Personen wollten sich nicht zufällig zu Aproz oder Coca Cola zuteilen lassen, da sie Angst hatten, in der Coca Cola Gruppe zu landen. So konnte der Wissenschaftler nur 40 Personen in die Studie einschliessen.

Der Wissenschaftler teilt 40 Personen zufällig auf eine von zwei Gruppen auf:

Gruppe A trinkt während 6 Monaten täglich 1 Liter Aproz (und ernährt sich sonst wie gewohnt).

Gruppe B trinkt während 6 Monaten täglich 1 Liter Coca Cola (und ernährt sich sonst wie gewohnt)

Bei beiden Gruppen misst er vorher und nachher das Körpergewicht. So kann er die Gewichtsveränderung zwischen den beiden Gruppen vergleichen.

25.4 Die Resultate der Studie

25.4.1 Flow Chart

R Code von agbarnet

# consort.plot.R
# template for a CONSORT flow chart
# Feb 2017

library(diagram)
## Loading required package: shape
# dummy recruitment numbers
consort.assessed = 400
consort.excluded = 360
consort.declined = 210
consort.not.meet = 150
consort.other = 0
consort.randomised = consort.assessed - consort.excluded 
allocate.control = allocate.treatment = 30
died.control = died.treatment = 0
lost.fu.control = died.control + 0
lost.fu.treatment = died.treatment + 0
excluded.control = 0
excluded.treatment = 0
analysed.treatment = allocate.treatment - excluded.treatment
analysed.control = allocate.control - excluded.control
pp.treatment = allocate.treatment - 0
pp.control = allocate.control - 0
# labels
b = c('Enrollment', 'Allocation', 'Follow-up', 'Analysis')
l1 = paste('Assessed for eligibility (n=', consort.assessed, ')', sep='') # numbers from above
l2 = paste('Excluded (n=', consort.excluded, ')\n',
           '•   Declined to participate (n=', consort.declined, ')\n',
           '•   Not meeting inclusion criteria (n=', consort.not.meet,')\n',
           '•   Other reasons (n=', consort.other, ')', sep='')
l3 = paste('Randomised (n=', consort.randomised,')', sep='')
l4 = paste('Allocated to Aproz (n=', allocate.control ,')\n', sep='')
l5 = paste('Allocated to Coca Cola (n=', allocate.treatment ,')\n'
           , sep='')
l6 = paste('Lost to follow-up (n=', lost.fu.control, ')\n', # control lost to fu
           '•   Died (n=', died.control,')', sep='')
l7 = paste('Lost to follow-up (n=', lost.fu.treatment, ')\n', # treatment lost to fu
           '•   Died (n=', died.treatment,')', sep='')
l8 = paste('Analysed (n=', analysed.control, ')\n', 
           '•   Per protocol (n=', pp.control,')', sep='')
l9 = paste('Analysed (n=', analysed.treatment, ')\n', 
           '•   Per protocol (n=', pp.treatment,')', sep='')
labels = c(l1, l2, l3, l4, l5, l6, l7, l8, l9, b)
n.labels = length(labels)
### make data frame of box chars
frame = read.table(sep='\t', stringsAsFactors=F, skip=0, header=T, text='
i   x   y   box.col box.type    box.prop    box.size
1   0.5 0.94    white   square  0.25    0.16
2   0.76    0.82    white   square  0.28    0.21
3   0.5 0.7 white   square  0.25    0.15
4   0.26    0.5 white   square  0.23    0.2
5   0.76    0.5 white   square  0.23    0.2
6   0.26    0.33    white   square  0.2 0.2
7   0.76    0.33    white   square  0.2 0.2
8   0.26    0.15    white   square  0.2 0.2
9   0.76    0.15    white   square  0.2 0.2
10  0.1 0.95    light blue  round   0.7 0.035
11  0.51    0.6 light blue  round   0.7 0.035
12  0.51    0.411   light blue  round   0.7 0.035
13  0.51    0.235   light blue  round   0.7 0.035')
pos = as.matrix(subset(frame, select=c(x, y)))
M = matrix(nrow = n.labels, ncol = n.labels, byrow = TRUE, data = 0)
M[3, 1] = "' '"
M[4, 3] = "' '"
M[5, 3] = "' '"
M[6, 4] = "' '"
M[7, 5] = "' '"
M[8, 6] = "' '"
M[9, 7] = "' '"
tcol = rep('black', n.labels)
to.blank = c(2,4:9)
tcol[to.blank] = 'transparent' # blank some boxes to add text as right aligned
#postscript('consort.flow.eps', width=7.5, height=7, horiz=F)
par(mai=c(0,0.04,0.04,0.04))
plotmat(M, pos = pos, name = labels, lwd = 1, shadow.size=0, curve=0,
        box.lwd = 2, cex.txt = 1, box.size = frame$box.size, box.col=frame$box.col,
        box.type = frame$box.type, box.prop = frame$box.prop, txt.col = tcol)
# add left-aligned text; -0.185 controls the horizontal indent
for (i in to.blank){
  text(x=pos[i,1] - 0.185, y=pos[i,2], adj=c(0,0.5), labels=labels[i]) # minus controls text position
}
# extra arrow to excluded
arrows(x0=0.5, x1=0.55, y0=0.82, length=0.12)
Diagramm mit der Anzahl untersuchten, eingeschlossenen und analysierten Studienteilnehmenden [Consort Flow Chart.] (http://www.consort-statement.org/)

Abbildung 24.2: Diagramm mit der Anzahl untersuchten, eingeschlossenen und analysierten Studienteilnehmenden [Consort Flow Chart.] (http://www.consort-statement.org/)

25.5 Beschreibende Statistik zu Beginn der Studie

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(randomizr)
set.seed(199975)
Geschlecht<-sample(c("Mann", "Frau"), size=100000, replace =TRUE)
kg_t0<-rnorm(100000, 120, 6)
Schmerzen<-rnorm(100000, 6, 2.2)
Weight_Efficacy_Lifestyle_Questionnaire<-rnorm(100000, 121, 32) 
# https://spectrum.diabetesjournals.org/content/diaspect/27/4/270.full.pdf 

df_Population<-data.frame(Geschlecht, kg_t0, Schmerzen, Weight_Efficacy_Lifestyle_Questionnaire)
df_Einschluss<-sample_n(df_Population, 40)

df_Randomisation<-df_Einschluss %>% 
  mutate(Randomisation=complete_ra(N = 40, prob_each = c(.5, .5),
               conditions=c("Aproz", "Coca Cola"))) %>%
  group_by(Randomisation) %>% 
  mutate(id=row_number()) %>% 
  mutate(kg_6Monate=case_when(
    Randomisation=="Aproz"  ~kg_t0-rnorm(n(), 1.5,8), 
    Randomisation=="Coca Cola"~kg_t0+rnorm(n(), 2, 8)
  )) %>% 
    mutate(change_t1_t0=kg_6Monate-kg_t0)
summary(df_Randomisation$change_t1_t0[df_Randomisation$Randomisation=="Aproz"])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -14.156  -6.311  -1.733  -2.433   2.600   7.910
summary(df_Randomisation$change_t1_t0[df_Randomisation$Randomisation=="Coca Cola"])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -11.134  -5.449   2.904   1.322   5.341  18.507
table(df_Randomisation$Randomisation)
## 
##     Aproz Coca Cola 
##        20        20
Wir nutzen das tableone Paket um die beschreibende Statistik darzustellen.](https://cran.rstudio.com/web/packages/atable/vignettes/atable_usage.pdf) In Publikationen ist dies meistens die Tabelle 1. Dort sollten wichtige prognostische Faktoren und Effekt-Modifikatoren für beide Gruppen separat zusammengefasst werden. Ein prognostischer Faktor ist ein Faktore, der das Ergebnis - ungeachtet der Therapie - beeinflusst. Ein Effektmodifikator beeinflusst den Einfluss, respektive die Wirkung der Therapie. In unserem Beispiel wäre ein ein Enzym, das den Zucker unverwertet ausscheiden lässt, ein Effektmodifikator (dummes Beispiel, ich weiss). Der prognostische Faktor muss keinen Einfluss auf die Wirksamkeit der Therapie haben, der Effektmodifikator schon.

Merke: Bei der Tabelle 1 einer randomisierten Studie sollten eigentlich keine p-Werte gezeigt werden, da wir ja wissen, dass die beiden Gruppen sich nur zufällig unterscheiden, respektive aus derselben Population stammen.

library(tableone)
tab1 <- CreateTableOne(vars = c("Geschlecht","kg_t0","Schmerzen" ,"Weight_Efficacy_Lifestyle_Questionnaire"), strata = "Randomisation" , test=FALSE, data = df_Randomisation)


kableone(print(tab1, showAllLevels = TRUE, formatOptions = list(big.mark = "'"), smd=TRUE))
level Aproz Coca Cola SMD
n 20 20
Geschlecht (%) Frau 11 (55.0) 12 (60.0) 0.101
Mann 9 (45.0) 8 (40.0)
kg_t0 (mean (SD)) 120.24 (5.36) 120.66 (7.49) 0.064
Schmerzen (mean (SD)) 5.81 (2.64) 5.14 (1.99) 0.286
Weight_Efficacy_Lifestyle_Questionnaire (mean (SD)) 119.78 (35.17) 122.95 (31.21) 0.095

25.6 Resultate nach sechs Monaten

library(arsenal)
mycontrols  <- arsenal::tableby.control(test=TRUE, total=FALSE,
                               numeric.test="anova",
                               numeric.stats = c("N", "Nmiss", "meansd"))

table_2 <- tableby(Randomisation ~ change_t1_t0+kg_6Monate , data=df_Randomisation, control=mycontrols)
summary(table_2, labelTranslations = c(kg="Körpergewicht vor Therapie", 
                                       change_t1_t0="Veränderung t1 minus t0", 
                                       kg_6Monate="Körpergewicht nach 6 Monaten"))
Aproz (N=20) Coca Cola (N=20) p value
Veränderung t1 minus t0 0.095
   N 20 20
   Mean (SD) -2.433 (5.994) 1.322 (7.751)
Körpergewicht nach 6 Monaten 0.152
   N 20 20
   Mean (SD) 117.808 (7.879) 121.980 (10.054)
resultChangeES<-effectsize::cohens_d(change_t1_t0~factor(Randomisation),data=df_Randomisation, paired=FALSE, pooled_sd=TRUE)
Nach Ende der Interventionsperiode wogen die 20 Studienteilnehmenden in der Aproz Gruppe 118 kg, mit einer Standardabweichung von 7.9 kg. In der Coca Cola Gruppe hatten die 20 Studienteilnehmende ein durschnittliches Gewicht von 122 kg (SD 10). Die Statistikerin hat einen P-Wert für den Vergleich der durchschnittlichen Veränderungen beider Gruppen berechnet, dieser war 0.095. Da wir in unserem Beispiel ja wissen, dass es in Wahrheit einen Unterschied in der Gewichtsabnahme gibt (d.h. die Nullhypothese stimmt nicht), ist die Wahrscheinlichkeit 9.5%% ein solches Studienresultat oder ein extremeres zu sehen, wie wir es hier gesehen haben. Zur Erinnerung: Der p-Wert ist die Wahrscheinlichkeit, ein solches Resultat oder ein extremeres zu sehen, wenn in die Nullhypothese stimmt. Da diese Wahrscheinlichkeit über 5% liegt, verwerfen wir die Nullhypothese nicht. Diese Studie zeigt uns also einen Typ-II Fehler. Wir sagen fälschlicherweise, dass es keinen Unterschied gibt, wenn in Wahrheit ein Unterschied zwischen den Interventionen besteht.

Die Tabelle zeigt einerseits die Analyse der Veränderungen und die Analyse der Werte nach Abschluss der Therapie bei 6 Monaten. Beide Analysen sind korrekt (siehe Abschnitt weiter unten).

25.6.1 Effektstärke Cohen’s d

Wir können noch eine Effektstärke nach Cohen berechnen, das sogenannte Cohen’s d: -0.54 (95% KI -1.17 bis 0.09). Ein Cohen’s d von (-)0.54 bedeutet, dass die Zwischengruppendifferenz der Veränderungen 0.54 Mal die Standardabweichung der Veränderung war. Dies entspricht einem moderaten Effekt. Ein Cohen’s d von 0.2 wird oft als kleiner Effekt eingestuft Effekt, 0.5 als mittlerer Effekt und 0.8 als grosser Effekt. Siehe Tabelle 1 in diesem PDF

(result_change<-t.test(df_Randomisation$change_t1_t0~df_Randomisation$Randomisation, paired=FALSE, na.action='na.omit') %>% 
  broom::tidy())
## # A tibble: 1 × 10
##   estim…¹ estim…² estim…³ stati…⁴ p.value param…⁵ conf.…⁶ conf.…⁷ method alter…⁸
##     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl> <chr>  <chr>  
## 1   -3.76   -2.43    1.32   -1.71  0.0952    35.7   -8.20   0.689 Welch… two.si…
## # … with abbreviated variable names ¹​estimate, ²​estimate1, ³​estimate2,
## #   ⁴​statistic, ⁵​parameter, ⁶​conf.low, ⁷​conf.high, ⁸​alternative

25.7 Wie hat die Statistikerin den p-Wert berechnet?

Es gibt verschiedene Möglichkeiten, diese Studie zu analysieren. Zuerst muss die Statistikerin schauen, was wir überhaupt für Daten haben. In unserem Fall ist das Körpergewicht proportionalskaliert. Da wir eine relativ grosse Stichprobe haben, müssen wir nicht testen, ob die Daten aus einer normalverteilten Population stammen (dem zentralen Grenzwertsatz sein gedankt). Bei kleinen Stichproben (~ n < 60) müssten wir testen ob die Daten aus einer normalverteilten Population kommen, falls dies nicht der Fall ist, würde die Statistikerin sogenannte nichtparametrische Tests auswählen. Wir haben eine grössere Stichprobe, also wählen wir parametrische Tests (d.h. Tests die mit Mittelwert und Standardabweichung rechnen).

Da unser Beispiel eine randomiserte Studie ist, dürfen wir die Mittelwerte nach der Interventionsperiode verglichen, d.h. zu t1 (6 Monate nach Start der Studie). Warum dürfen wir das: alle Unterschiede zu Beginn der Studie sind zufällig. Wenn wir viele Studien haben, werden sich die Unterschiede neutralisieren. Wir dürfen jedoch auch die Veränderungen vergleichen. Die beste Analyse wäre, wenn wir eine Regression auf die Werte nach der Intervention machen und dabei für die Ausgangswerte des Gewichtes korrigieren. Dies zeigen wir ganz unten in diesem Kapitel.

25.7.1 Vergleich der Mittelwerte der Veränderungen

Wir vergleiche die Veränderungen der beiden Gruppen, (d.h. kg t1 minus kg t0, wobei t0 = Vor der Therapie, t1 = nach der Therapie (6 Monate)). Hier haben wir zwei unabhängige Gruppen (die Aproz-Gruppe und die Coca Cola Gruppe) und wir können zum Beispiel einen t-test für unabhängige Daten durchführen. Dazu müssen wir zuerst die Veränderungen des Gewichts berechnen. Standardmässig wird da t1 - t0 gerechnet.

Nun können wir den t.test für unabhängige Stichproben durchführen. Warum unabhängige Stichproben? Weil die beiden Gruppen unterschiedliche Personen sind. Wenn wir zu Beispiel t0 mit t1 vergleichen würden, müssten wir einen t.test für abhängige Stichproben nehmen, da bei t0 und bei zweimal die gleichen Personen gemessen wurden.

(result_change<-t.test(df_Randomisation$change_t1_t0~df_Randomisation$Randomisation, paired=FALSE, na.action='na.omit') %>% 
  broom::tidy())
## # A tibble: 1 × 10
##   estim…¹ estim…² estim…³ stati…⁴ p.value param…⁵ conf.…⁶ conf.…⁷ method alter…⁸
##     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl> <chr>  <chr>  
## 1   -3.76   -2.43    1.32   -1.71  0.0952    35.7   -8.20   0.689 Welch… two.si…
## # … with abbreviated variable names ¹​estimate, ²​estimate1, ³​estimate2,
## #   ⁴​statistic, ⁵​parameter, ⁶​conf.low, ⁷​conf.high, ⁸​alternative
Der t.test gibt uns die Veränderung der beiden Gruppen, d.h. -2.43 in der Gruppe mit Aproz und 1.32 für die Gruppe die Coca Cola trank. Die Mittelwertsdifferenz war -3.76, das 95% Konfidenzintervall von -8.2 bis 0.69.

Der p-Wert ist 0.095

25.7.2 Vergleich der Mittelwerte nach Abschluss der Therapie

In einer randomisierten Studie dürfen wir auch die Post-Werte mit einem t.test für unabhängige Gruppen vergleichen. Der P-Wert wird nicht gleich sein wie der t.test für die Veränderungen.

(results_t.test<-t.test(df_Randomisation$kg_6Monate~df_Randomisation$Randomisation, paired=FALSE, na.action='na.omit') )
## 
##  Welch Two Sample t-test
## 
## data:  df_Randomisation$kg_6Monate by df_Randomisation$Randomisation
## t = -1.4606, df = 35.945, p-value = 0.1528
## alternative hypothesis: true difference in means between group Aproz and group Coca Cola is not equal to 0
## 95 percent confidence interval:
##  -9.964537  1.621298
## sample estimates:
##     mean in group Aproz mean in group Coca Cola 
##                117.8085                121.9801

Ob die Veränderung oder der Post-Werte Vergleich einen tieferen p-Wert ergibt, hängt von der Korrelation der Werte t0 zu t1 ab. Bei tiefer Korrelation hat der Post-Werte Vergleich kleinere p-Werte als der Veränderungsvergleich. In unserem Beispiel haben wir jedoch relative hohe Korrelation der t0 zu t1 Werte.

cor(df_Randomisation$kg_t0, df_Randomisation$kg_6Monate, use='complete')
## [1] 0.635745
Die beste Analyse wäre eigentlich die Regression auf die Post-Werte oder die Change Wert, wenn gleichzeitig die Werte t0 mit in die Regressionsgleichung genommen werden.

Hier unten die beiden Regressionsanalysen, einmal sind die Post-Werte die abhängige Variable, in der zweiten Regression die Veränderungswerte. Sie sehen, dass dies beide Male das gleiche Resultat gibt. Der Effekt des Coca Cola-Wassers im Vergleich zum Approz-Wasser sehen Sie in der zweiten Zeile der Regression (RandomisationCoca Cola): Dies bedeutet, dass Coca Cola 3.8kg Kilogramm mehr Körpergewicht hat als die Aproz Gruppe, respektive, dass der Unterschied in der Veränderung 3.8kg war, wenn für die Ausgangswerte (auch Baselinewerte genant) korrigiert wird. Wir werden hier nicht näher auf die Details eingehen, wer jedoch interessiert ist, kann folgende Dokumente lesen: Common statistical tests are linear models und Senn 2006 Change from baseline and analysis of covariance revisited.

result_post_adjusted_t0<-lm(kg_6Monate~Randomisation+kg_t0, data=df_Randomisation)
jtools::summ(result_post_adjusted_t0, confint=TRUE)
Observations 40
Dependent variable kg_6Monate
Type OLS linear regression
F(2,37) 15.03
0.45
Adj. R² 0.42
Est. 2.5% 97.5% t val. p
(Intercept) 10.05 -32.50 52.59 0.48 0.64
RandomisationCoca Cola 3.80 -0.68 8.28 1.72 0.09
kg_t0 0.90 0.54 1.25 5.15 0.00
Standard errors: OLS
result_post_adjusted_t0<-lm(change_t1_t0~Randomisation+kg_t0, data=df_Randomisation)
jtools::summ(result_post_adjusted_t0, confint=TRUE)
Observations 40
Dependent variable change_t1_t0
Type OLS linear regression
F(2,37) 1.62
0.08
Adj. R² 0.03
Est. 2.5% 97.5% t val. p
(Intercept) 10.05 -32.50 52.59 0.48 0.64
RandomisationCoca Cola 3.80 -0.68 8.28 1.72 0.09
kg_t0 -0.10 -0.46 0.25 -0.60 0.55
Standard errors: OLS