3 Mittelwertvergleiche
Beispielanalyse
Hängt die Rezeptionswahrscheinlichkeit von Nachrichten auf Facebook von der Art der Kuratierung ab?
3.1 Pakete und Daten laden
Zunächst laden wir die üblichen R-Pakete sowie die Daten von Kümpel (2019). Neu ist das Paket marginaleffects
, mit dem wir aus Regressionsmodellen weitere Schätzungen, Vorhersagen oder Kontraste erhalten können.
library(marginaleffects)
library(report)
library(tidyverse)
theme_set(theme_minimal())
Wir wählen nur die relevanten Variablen aus dem SPSS-Datensatz aus und benennen sie in modus
und rw
um. Anschließen setzen wir den Referenzwert für die Versuchsbedingung Modus auf den Wert Chronik. Für den Modus Tagging erstellen wir zudem eine dichotome Variable (0/1), d.h. Tagging vs. alle anderen Bedingungen. Schließlich wandeln wir die Rezeptionswahrscheinlichkeit in einen Zahlenwert um und löschen alle SPSS-Labels.
<- haven::read_sav("data/Kuempel_2019.sav") |>
kuempel19 select(
modus = Kurationsmodus_SNS,
rw = Rezeptionswahrscheinlichkeit
|>
) mutate(
modus = as_factor(modus) |> relevel("Chronik"), # Faktor mit Referenz Chronik
modus_tag = ifelse(modus == "Tag", 1, 0), # Dummy-Variable
rw = as.numeric(rw) # Numerische Variable
|>
) ::zap_labels()
haven
kuempel19
# A tibble: 524 × 3
modus rw modus_tag
<fct> <dbl> <dbl>
1 Tag 5 1
2 Chronik 2 0
3 Post 3 0
4 DM 1 0
5 Chronik 1 0 # ℹ 519 more rows
3.2 Deskriptivstatistik
|>
kuempel19 select(rw) |>
::report_table() report
Variable | n_Obs | Mean | SD | Median | MAD | Min | Max | Skewness | Kurtosis | percentage_Missing
------------------------------------------------------------------------------------------------------- rw | 524 | 3.04 | 1.30 | 3.00 | 1.48 | 1.00 | 5.00 | -0.10 | -1.13 | 0.00
|>
kuempel19 ggplot(aes(x = rw)) +
geom_histogram()
Neben der univariaten Auswertung des Outcomes betrachten wir auch schon die Gruppenmittelwerte der einzelnen Experimentalbedingungen.
|>
kuempel19 group_by(modus) |>
summarise(
n = n(),
M = mean(rw, na.rm = TRUE),
SD = sd(rw, na.rm = TRUE)
)
# A tibble: 4 × 4
modus n M SD
<fct> <int> <dbl> <dbl>
1 Chronik 141 2.88 1.20
2 Post 97 2.79 1.25
3 Tag 152 3.51 1.33 4 DM 134 2.84 1.28
Wir erkennen bereits, dass sich die Rezeptionswahrscheinlichkeit in der Stichprobe zwischen den Experimentalbedingungen unterscheidet.
3.3 Zwei Gruppen vergleichen
Zunächst testen wir den Unterschied zwischen dem Modus “Tagging” und allen anderen Versuchsbedingungen. Dies entspricht einem klassischen t-Test.
<- lm(rw ~ modus_tag, data = kuempel19)
m1_tag ::report_table(m1_tag) report
Parameter | Coefficient | 95% CI | t(522) | p | Std. Coef. | Std. Coef. 95% CI | Fit
-----------------------------------------------------------------------------------------------------
(Intercept) | 2.84 | [2.71, 2.97] | 43.26 | < .001 | -2.00e-16 | [-0.08, 0.08] |
modus tag | 0.67 | [0.43, 0.91] | 5.51 | < .001 | 0.23 | [ 0.15, 0.32] |
| | | | | | |
AIC | | | | | | | 1738.84
AICc | | | | | | | 1738.89
BIC | | | | | | | 1751.62
R2 | | | | | | | 0.05
R2 (adj.) | | | | | | | 0.05 Sigma | | | | | | | 1.27
Wir sehen, dass der Modus Tagging zu einer signifikant höheren Rezeptionswahrscheinlichkeit im Vergleich zu anderen Modi führt (B = 0.67, 95% CI [0.43, 0.91], t(522) = 5.51, p < .001). Der Mittelwert in den anderen Versuchsbedingungen (Tagging = 0) ist 2,84 auf einer Skala von 1-5. Der Effekt des Taggings ist eher schwach, wie wir am standardisierten Koeffizienten bzw. am \(R^2\) erkennen können.
3.4 Mehr als zwei Gruppen vergleichen
Der Code für die Auswertung mit mehr als zwei Gruppen ist identisch, lediglich hat die modus
Variable vier Ausprägungen.
<- lm(rw ~ modus, kuempel19)
m2_modus ::report_table(m2_modus) report
Parameter | Coefficient | 95% CI | t(520) | p | Std. Coef. | Std. Coef. 95% CI | Fit
-------------------------------------------------------------------------------------------------------
(Intercept) | 2.88 | [ 2.67, 3.09] | 26.95 | < .001 | -0.12 | [-0.28, 0.04] |
modus [Post] | -0.09 | [-0.41, 0.24] | -0.51 | 0.609 | -0.07 | [-0.32, 0.19] |
modus [Tag] | 0.63 | [ 0.34, 0.93] | 4.27 | < .001 | 0.49 | [ 0.26, 0.71] |
modus [DM] | -0.04 | [-0.34, 0.26] | -0.28 | 0.776 | -0.03 | [-0.26, 0.20] |
| | | | | | |
AIC | | | | | | | 1742.57
AICc | | | | | | | 1742.69
BIC | | | | | | | 1763.88
R2 | | | | | | | 0.06
R2 (adj.) | | | | | | | 0.05 Sigma | | | | | | | 1.27
Wir erhalten daher drei Regressionskoeffizienten, die jeweils die Differenz der Gruppe zur Referenzgruppe Chronik widergeben. Zum Beispiel ist die Rezeptionswahrscheinlichkeit in der Gruppe Post um 0,09 niedriger als bei Chronik. Diese Differenz ist nicht statistisch signifikant. Der Intercept von 2,88 entspricht dem Mittelwert in der Bedingung Chronik.
3.5 Referenzkategorie ändern
Wollen wir Differenzen zwischen anderen Versuchsgruppen prüfen, können wir die Referenzkategorie für modus
mit relevel()
ändern und das Modell noch einmal schätzen.
<- kuempel19 |>
kuempel19 mutate(modus_dm = relevel(modus, "DM"))
<- lm(rw ~ modus_dm, kuempel19)
m2_modus_dm ::report_table(m2_modus_dm) report
Parameter | Coefficient | 95% CI | t(520) | p | Std. Coef. | Std. Coef. 95% CI | Fit
-------------------------------------------------------------------------------------------------------------
(Intercept) | 2.84 | [ 2.62, 3.05] | 25.87 | < .001 | -0.15 | [-0.32, 0.01] |
modus dm [Chronik] | 0.04 | [-0.26, 0.34] | 0.28 | 0.776 | 0.03 | [-0.20, 0.26] |
modus dm [Post] | -0.04 | [-0.37, 0.29] | -0.25 | 0.804 | -0.03 | [-0.29, 0.22] |
modus dm [Tag] | 0.68 | [ 0.38, 0.97] | 4.50 | < .001 | 0.52 | [ 0.29, 0.75] |
| | | | | | |
AIC | | | | | | | 1742.57
AICc | | | | | | | 1742.69
BIC | | | | | | | 1763.88
R2 | | | | | | | 0.06
R2 (adj.) | | | | | | | 0.05 Sigma | | | | | | | 1.27
Nun beziehen sich alle Regressionskoeffizienten auf die Referenzgruppe DM, die anderen Modellkoeffizienten sind unverändert.
3.6 Post-hoc Tests
Um alle paarweisen Vergleiche durchzuführen, nutzen wir die Funktion avg_comparisons()
aus dem marginaleffects
-Paket. Diese bekommt als erstes Argument das geschätzte Modell m2_modus
, zudem die Variable, für die wir paarweise Kontraste erhalten wollen mit variables
. Da es sich um viele Vergleiche handelt, korrigieren wir die p-Werte nach Bonferroni.
::avg_comparisons(m2_modus,
marginaleffectsvariables = list(modus = "pairwise"),
p_adjust = "bonferroni"
)
Term Contrast Estimate Std. Error z Pr(>|z|) S
modus DM - Chronik -0.0436 0.153 -0.285 1 -0.0
modus DM - Post 0.0420 0.169 0.248 1 -0.0
modus DM - Tag -0.6773 0.150 -4.505 <0.001 14.6
modus Post - Chronik -0.0856 0.167 -0.512 1 -0.0
modus Tag - Chronik 0.6337 0.148 4.272 <0.001 13.1
modus Tag - Post 0.7193 0.165 4.362 <0.001 13.7
Columns: term, contrast, estimate, std.error, statistic, p.value, s.value Type: response
Wir sehen, dass sich die Rezeptionswahrscheinlichkeit in der Bedingung Tagging signifikant von jeder anderen Bedingung unterscheidet, die anderen drei Bedingungen aber nicht untereinander.