3  Mittelwertvergleiche

PDF-Datei

Beispielanalyse

Hängt die Rezeptionswahrscheinlichkeit von Nachrichten auf Facebook von der Art der Kuratierung ab?

Quelle

Kümpel, A. S. (2019). Getting tagged, getting involved with news? A mixed-methods investigation of the effects and motives of news-related tagging activities on social network sites. Journal of Communication, 69(4), 373–395. https://doi.org/10.1093/joc/jqz019

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.

kuempel19 <- haven::read_sav("data/Kuempel_2019.sav") |>
  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
  ) |>
  haven::zap_labels()

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::report_table()
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.

m1_tag <- lm(rw ~ modus_tag, data = kuempel19)
report::report_table(m1_tag)
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.

Vergleich zum t-Test
t.test(rw ~ modus_tag, data = kuempel19, var.equal = TRUE) |>
  report::report_table()
Two Sample t-test

Parameter |     Group | Mean_Group1 | Mean_Group2 | Difference |         95% CI | t(522) |      p |     d |          d  CI
--------------------------------------------------------------------------------------------------------------------------
rw        | modus_tag |        2.84 |        3.51 |      -0.67 | [-0.91, -0.43] |  -5.51 | < .001 | -0.48 | [-0.66, -0.31]

Alternative hypothesis: two.sided

Wir sehen, dass t- und p-Wert identisch mit dem GLM sind.

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.

m2_modus <- lm(rw ~ modus, kuempel19)
report::report_table(m2_modus)
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.

Vergleich zu ANOVA
aov(rw ~ modus, data = kuempel19) |>
  report::report_table()
Parameter | Sum_Squares |  df | Mean_Square |     F |      p | Eta2 |  Eta2 95% CI
----------------------------------------------------------------------------------
modus     |       49.12 |   3 |       16.37 | 10.17 | < .001 | 0.06 | [0.02, 1.00]
Residuals |      837.19 | 520 |        1.61 |       |        |      |             

F- und p-Wert sowie das Gütemaß sind identisch zum GLM.

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"))

m2_modus_dm <- lm(rw ~ modus_dm, kuempel19)
report::report_table(m2_modus_dm)
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.

marginaleffects::avg_comparisons(m2_modus,
  variables = 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.