Kapitel 74 Mittelwerte und Standardabweichungen von Gruppen kombinieren
In diesem Kapitel lernen Sie folgendes:
- Mittelwerte und Standardabweichungen für die gesamte Gruppe berechnen, wenn wir nur Mittelwerte und Standardabweichungen von Subgruppen haben
- Die Formel zur Berechnung der Standardabweichung von kombinierten Gruppen ist nicht die gleiche wie die Formel zur Berechnung der Standardabweichung von Differenzen oder Summen
- Die Standardabweichung von kombinierten Gruppen ist auch nicht gleich wie die gepoolte Standardabweichung
Es gibt immer wieder Situationen, in denen wir die einzelnen Werte der Studienteilnehmenden nicht haben, sondern nur N, Mittelwerte und Standardabweichungen. Wenn wir hier Gruppen kombinieren möchten und da den Mittelwert und die Standardabweichung der kombinierten Gruppe berechnen wollen, müssen wir eine relativ komplizierte Formel kennen.
74.0.1 Pakete für dieses Kapitel
Wir benötigen folgende Pakete:
library(dplyr)
library(Statamarkdown)
library(vtable)
74.1 Beispiel Meta-Analysen
In einer Meta-Analyse möchten wir manchmal Gruppen kombinieren, zum Beispiel für die Beschreibung der Stichproben möchten wir Mittelwert und Standardabweichung des Alters angeben. Geben die Autoren jedoch das Alter nur getrennt für Männer und Frauen an, müssen wir dies kombinieren.
Erstellen wir zuerst ein paar Daten
set.seed(666)
<-sample(c("Men", "Women"), size=76, rep=TRUE, prob=c(0.3,0.7))
Gender<-factor(1:length(Gender))
id<-data.frame(id, Gender) %>%
datamutate(Age=case_when(
=="Men"~rnorm(length(Gender), 55, 6),
Gender=="Women"~rnorm(length(Gender),60, 7 )))
Gender
%>%
data split(.$Gender) %>%
::map(~ Hmisc::describe(.x$Age)) purrr
$Men
.x$Age
n missing distinct Info Mean Gmd .05 .10
26 0 26 1 55.74 6.273 47.14 48.45
.25 .50 .75 .90 .95
51.78 56.07 59.02 61.96 65.45
lowest : 46.85330 47.09062 47.29992 49.60023 50.07506
highest: 59.35361 60.32583 63.59505 66.07356 66.91349
$Women
.x$Age
n missing distinct Info Mean Gmd .05 .10
50 0 50 1 60.04 8.464 48.70 50.40
.25 .50 .75 .90 .95
56.52 60.94 64.77 68.38 69.00
lowest : 37.95849 40.50623 48.04480 49.50717 49.70524
highest: 68.46813 68.63470 69.29544 70.58526 78.05247
::export(data, "grouped_sd.dta") rio
In einer Studie kann es sein, dass das Alter nur separat für die Männer und Frauen angebeben wird:
::st(data[,-1], group="Gender") # [,1] weil wir die ID natürlich nicht zusammenfassen möchten. Alternativ könnten wir auch st(data, vars="Age", group="Gender") schreiben. vtable
Variable | N | Mean | SD | N | Mean | SD |
---|---|---|---|---|---|---|
Age | 26 | 55.741 | 5.448 | 50 | 60.039 | 7.636 |
Wir möchten nun den Mittelwert und die Standardabweichung für die gesamte Gruppe berechnen. Hier haben wir ja die Daten für alle Teilnehmer:innen, somit wäre das ja kein Problem, wenn wir aus einer Studie nur Mittelwert und Standardabweichung haben, müssen wir eine Formel benutzen.
::st(data[,-1]) # ,-1 weil wir die ID natürlich nicht zusammefassen möchten vtable
Variable | N | Mean | Std. Dev. | Min | Pctl. 25 | Pctl. 75 | Max |
---|---|---|---|---|---|---|---|
Gender | 76 | ||||||
… Men | 26 | 34.2% | |||||
… Women | 50 | 65.8% | |||||
Age | 76 | 58.569 | 7.225 | 37.958 | 53.685 | 64.158 | 78.052 |
Die Formel lautet wie folgt:
Siehe hier https://math.stackexchange.com/questions/2971315/how-do-i-combine-standard-deviations-of-two-groups für eine Erklärung.
Wir finden auch hier https://handbook-5-1.cochrane.org/chapter_7/table_7_7_a_formulae_for_combining_groups.htm die Formel (etwas anders formuliert).
\[\begin{equation} s^2 = \frac{(n_1-1)\cdot s^2+(n_2-1)\cdot s^2}{n_1+n_2-1} + \frac{n_1\cdot n_2 \cdot(mean_1 - mean_2)^2 }{(n_1+n_2) \cdot (n_1 +n_2-1)} \tag{74.1} \end{equation}\]
Und die kombinierte Standardabweichung wäre dann:
\[\begin{equation} sd = \sqrt{s^2} \tag{74.2} \end{equation}\]
In unserem Beispiel ergäbe dies:
\[\begin{equation} s^2 = \frac{(26-1)\cdot 5.448^2+(50-1)\cdot 7.636^2}{26+50-1} + \frac{26\cdot 50 \cdot(55.741 - 60.039)^2 }{(26+50) \cdot (26 +50-1)} \tag{74.3} \end{equation}\]
und in R:
<-((26-1)*5.448^2 + (50-1)*7.636^2)/(26+50-1) + ((26*50)*(55.741-60.039)^2)/((26+50)*(26+50-1))
var_combined<-var_combined^0.5
sd_combined sd_combined
[1] 7.225064
Oder so:
<-26
n1<-50
n2
<-55.741
m1<-60.039
m2
<-5.448
sd1<-7.636
sd2
<-((n1-1)*sd1^2 + (n2-1)*sd2^2)/(n1+n2-1) + ((n1*n2)*(m1-m2)^2)/((n1+n2)*(n1+n2-1))
var_combined2<-sqrt(var_combined2)
sd_combined2 sd_combined2
[1] 7.225064
Übrigens: Stata gibt einfach die schöneren Outputs, deswegen hier ein wenig Werbung für Stata. Der Befehl ttest in Stata erlaubt uns auf einen Blick zu kontrollieren, ob die Berechnung mit unseren simulierten Daten stimmt: Hier die Erklärung: https://www.statstodo.com/CombineMeansSDs.php.
use grouped_sd.dta
ttest Age, by(Gender)
Two-sample t test with equal variances
------------------------------------------------------------------------------
Group | Obs Mean Std. err. Std. dev. [95% conf. interval]
---------+--------------------------------------------------------------------
Men | 26 55.74112 1.06844 5.447995 53.54063 57.94161
Women | 50 60.03907 1.079943 7.636347 57.86885 62.2093
---------+--------------------------------------------------------------------
Combined | 76 58.56872 .8287983 7.225296 56.91767 60.21977
---------+--------------------------------------------------------------------
diff | -4.297955 1.686296 -7.657974 -.9379368
------------------------------------------------------------------------------
diff = mean(Men) - mean(Women) t = -2.5488
H0: diff = 0 Degrees of freedom = 74
Ha: diff < 0 Ha: diff != 0 Ha: diff > 0
Pr(T < t) = 0.0064 Pr(|T| > |t|) = 0.0129 Pr(T > t) = 0.9936
74.2 Kombinieren von mehr als zwei Gruppen
Falls wir mehr als zwei Gruppen haben, ist der folgende Ansatz etwas einfacher:Wir benötigen die folgenden drei Komponenten.
Für jede Gruppe berechnen wir folgendes:
- \(\sum x\) = Das Produkt von Mittelwert und Stichprobengrösse
- \(\sum {x}^2\) = SD2(n-1)+((Σx)^2/n)
Danach müssen wir folgendes zusammenfügen:
- Summe_N = Summe aller Stichprobengrössen
- Summe \(\sum x\) : Summe aller \(\sum x\)
- Summe \(\sum {x}^2\) : Summer aller \(\sum {x}^2\)
Damit können wir nun die kombinierten Werte berechnen:
- Kombinierte Stichprobengrösse: Summe_N
- Kombinierter Mittelwert: Summe \(\sum x\) / Summe_N
- Kombinierte Varianz: \((\sum {x}^2 -{(\sum x})^2 / (Summe\_N-1)\)
- Kombinierte Standardabweichung: Quadradtwurzel von Kombinierte Varianz
74.2.1 Beispiel vier Gruppen
Wir können dies an einem Beispiel mit simulierten Daten mit vier Gruppen illustrieren.
set.seed(666)
=sample(1:4, rep=TRUE, size=100, prob=c(0.2,0.1, 0.3, 0.4))
Group<-1:length(Group)
id<-data.frame(id, Group) %>%
datamutate(Age=case_when(
==1~rnorm(length(Group), 50, 6),
Group==2~rnorm(length(Group), 55, 7),
Group==3~rnorm(length(Group), 60, 7.5),
Group==4~rnorm(length(Group), 65, 8)))
Group::st(data[,-1], vars="Age", group="Group") vtable
Variable | N | Mean | SD | N | Mean | SD | N | Mean | SD | N | Mean | SD |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Age | 24 | 50.202 | 4.606 | 12 | 54.849 | 5.272 | 25 | 58.342 | 9.12 | 39 | 64.265 | 6.576 |
Nun die eigene Berechnung:
<-24
n1<-12
n2<-25
n3<-39
n4
<-50.202
mean1<-54.849
mean2<-58.342
mean3<-64.265
mean4
<-4.606
sd1<-5.272
sd2<-9.12
sd3<-6.576
sd4
= mean1 * n1
summe_x1 = mean2 * n2
summe_x2 = mean3 * n3
summe_x3 = mean4 * n4
summe_x4
= sd1^2*(n1-1) + ((summe_x1)^2/n1)
summe_xsquared1 = sd2^2*(n2-1) + ((summe_x2)^2/n2)
summe_xsquared2 = sd3^2*(n3-1) + ((summe_x3)^2/n3)
summe_xsquared3 = sd4^2*(n4-1) + ((summe_x4)^2/n4)
summe_xsquared4
= n1 + n2 + n3 +n4
summe_n = summe_x1 + summe_x2 + summe_x3 + summe_x4
summe_summenx
= summe_xsquared1 + summe_xsquared2 + summe_xsquared3 + summe_xsquared4
summe_summenxsquared
= summe_n
N_total = summe_summenx / summe_n
Mean_total = (summe_summenxsquared-summe_summenx^2/summe_n) / (summe_n-1)
Varianz_total =Varianz_total^0.5
SD_total N_total
[1] 100
Mean_total
[1] 58.27921
SD_total
[1] 8.72566
Wir vergleichen das mit den Daten (und wir sind glücklich, dass unsere Berechnungen übereinstimmen).
::st(data, vars="Age") vtable
Variable | N | Mean | Std. Dev. | Min | Pctl. 25 | Pctl. 75 | Max |
---|---|---|---|---|---|---|---|
Age | 100 | 58.279 | 8.726 | 40.96 | 52.133 | 64.956 | 74.672 |
74.3 Warum ist die Berechnung der SD der ganzen Gruppe nicht gleich wie für die SD der Summe oder der Differenz?
Sie können sich vielleicht an die Formel zur Berechnung der Standardabweichung der Differenz oder der Summe zweier Gruppen erinnern. Würden wir jedoch diese Formel anwenden, bekämen wir nicht die korrekte Standardabweichung.
Auch wenn wir die gepoolte Standardabweichung berechnen, wäre dies nicht korrekt