Słownik metodologiczny · Regresja

Kodowanie efektów (effect coding) – kiedy zamiast dummy coding?

Kodowanie efektów zamienia zmienną jakościową na predyktory z kodem −1 dla grupy odniesienia. W modelach z interakcją zmienia to sens współczynników i testów typu III. Pokazujemy przykład 2 × 2 w R.

Strona główna / Słownik / Kodowanie efektów
W skrócie: Kodowanie efektów nadaje grupie odniesienia kod −1, więc współczynnik pokazuje odchylenie grupy od średniej średnich. W modelu z interakcją współczynniki i testy typu III opisują wtedy efekty główne, a przy kodowaniu 0/1 – efekty proste na poziomie odniesienia.

Co to jest kodowanie efektów?

Kodowanie efektów (ang. effect coding, też sum coding lub kodowanie dewiacyjne) to sposób zamiany zmiennej jakościowej na predyktory, w którym grupa odniesienia dostaje kod −1 zamiast 0. Współczynnik każdej zmiennej pokazuje wtedy odchylenie średniej grupy od nieważonej średniej średnich grupowych, a stała – samą tę średnią (Alkharusi, 2012). Hasło dummy coding porównuje oba sposoby dla jednego czynnika, gdzie dają to samo R² i F. W planie czynnikowym wybór kodowania zmienia sens współczynników i testów.

Dlaczego to ważne przy interakcji

Przy kodowaniu zero-jedynkowym współczynnik czynnika A w modelu z interakcją A × B to efekt prosty A na poziomie odniesienia B, a nie efekt główny. Kody efektów sumują się do zera, więc współczynnik A opisuje efekt uśredniony po poziomach B. Od kodowania zależą też testy typu III: hipotezy o efektach głównych testują one tylko przy kodach sumujących się do zera. W R ustawisz je argumentem contrasts = list(A = contr.sum). Schad i in. (2020) wyjaśniają ten i inne kontrasty w modelach liniowych w R.

Przykład

Plan 2 (kontrola, trening) × 2 (wyspany, niewyspany), po 30 osób, wynik testu pamięci (dane symulowane). Średnie w komórkach: kontrola 50.91 i 44.11, trening 57.54 i 46.36.

  • Kodowanie zero-jedynkowe: współczynnik treningu = 6.63, czyli różnica tylko u osób wyspanych.
  • Kodowanie efektów (kontrola = 1, trening = −1): współczynnik = −2.22, czyli połowa różnicy średnich brzegowych (4.44 pkt); stała 49.73 to średnia średnich.
  • Test typu III dla snu: F(1, 116) = 10.69 przy kodach 0/1 (to efekt snu tylko w grupie kontrolnej) i F(1, 116) = 37.37 przy kodach efektów.

Jak opisać w pracy

Czynniki zakodowano metodą kodowania efektów (contr.sum), a efekty testowano sumami kwadratów typu III. Trening poprawiał wynik testu pamięci, F(1, 116) = 9.12, p = .003; uśredniona po stanie wyspania różnica średnich brzegowych wyniosła 4.44 pkt. Niewyspanie obniżało wynik, F(1, 116) = 37.37, p < .001, a interakcja była nieistotna, F(1, 116) = 2.22, p = .139.

Na co uważać

  • Przy nierównych grupach stała to nieważona średnia średnich, a nie średnia wszystkich osób (Alkharusi, 2012).
  • Przy kodach ±1 współczynnik to połowa różnicy między dwoma poziomami. Przy kodach ±0.5 jest równy różnicy. Zawsze podaj schemat kodowania.
  • Dopasowanie modelu się nie zmienia. Test interakcji w przykładzie jest taki sam przy obu kodowaniach, a średnie brzegowe z emmeans nie zależą od kodowania.

Kodowanie predyktorów w regresji opisuje wpis Regresja wieloraka krok po kroku, a ANOVA czynnikową – ANOVA krok po kroku.

Przykład reprodukowalny

Kodowanie efektów w R

Kod dopasowuje ten sam model 2 × 2 z kodowaniem zero-jedynkowym i z kodowaniem efektów, a potem porównuje współczynniki i testy typu III z pakietu car.

contr.treatment a contr.sum w modelu z interakcją

Dane wejściowe: wynik testu pamięci u 120 osób w planie trening × sen, po 30 w komórce (dane symulowane, set.seed(275)).

Co odczytać: średnie w komórkach, dwa zestawy współczynników oraz F value i Pr(>F) z testów typu III przy obu kodowaniach.

R
suppressPackageStartupMessages(library(car))
set.seed(275)
d <- expand.grid(osoba = 1:30, trening = c("kontrola", "trening"), sen = c("wyspany", "niewyspany"))
d$pamiec <- round(50 + 8 * (d$trening == "trening") - 6 * (d$sen == "niewyspany") -
                  6 * (d$trening == "trening") * (d$sen == "niewyspany") + rnorm(nrow(d), 0, 8), 1)
round(tapply(d$pamiec, list(d$trening, d$sen), mean), 2)       # średnie w komórkach
m_dummy  <- lm(pamiec ~ trening * sen, data = d)                                    # contr.treatment
m_efekty <- lm(pamiec ~ trening * sen, data = d,
               contrasts = list(trening = contr.sum, sen = contr.sum))              # kodowanie efektów (+1/−1)
round(coef(m_dummy), 2)
round(coef(m_efekty), 2)
Anova(m_dummy,  type = 3)[c("trening", "sen"), c("F value", "Pr(>F)")]   # typ III ze złym kodowaniem
Anova(m_efekty, type = 3)[c("trening", "sen", "trening:sen"), c("F value", "Pr(>F)")]   # typ III z kodowaniem efektów
Wynik w R
         wyspany niewyspany
kontrola   50.91      44.11
trening    57.54      46.36
                 (Intercept)               treningtrening 
                       50.91                         6.63 
               senniewyspany treningtrening:senniewyspany 
                       -6.80                        -4.38 
  (Intercept)      trening1          sen1 trening1:sen1 
        49.73         -2.22          4.50         -1.09 
        F value   Pr(>F)   
trening  10.162 0.001843 **
sen      10.690 0.001418 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
            F value   Pr(>F)    
trening      9.1152 0.003118 ** 
sen         37.3699 1.35e-08 ***
trening:sen  2.2176 0.139155    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet car).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. car (wersja 3.1.5): Fox, J., & Weisberg, S. (2019). An R companion to applied regression (3rd ed.). Sage. https://www.john-fox.ca/Companion/

Najczęstsze pytania

Kiedy używać kodowania efektów zamiast dummy coding?

Gdy model ma interakcję czynników, a chcesz interpretować współczynniki lub testy typu III jako efekty główne. Przy jednym czynniku oba kodowania dają to samo dopasowanie.

Jak włączyć kodowanie efektów w R?

Podaj w modelu contrasts = list(czynnik = contr.sum) albo ustaw globalnie options(contrasts = c("contr.sum", "contr.poly")) przed dopasowaniem modelu.

Co oznacza współczynnik przy kodowaniu efektów?

To odchylenie średniej danej grupy od nieważonej średniej średnich grupowych. Przy dwóch poziomach i kodach ±1 jest równy połowie różnicy między nimi.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Alkharusi, H. (2012). Categorical variables in regression analysis: A comparison of dummy and effect coding. International Journal of Education, 4(2), 202–210. https://doi.org/10.5296/ije.v4i2.1962 ● Otwarty dostęp
  2. Schad, D. J., Vasishth, S., Hohenstein, S., & Kliegl, R. (2020). How to capitalize on a priori contrasts in linear (mixed) models: A tutorial. Journal of Memory and Language, 110, Article 104038. https://doi.org/10.1016/j.jml.2019.104038 ● Otwarty dostęp

Cytowania BibTeX

@article{alkharusi2012categorical, author={Alkharusi, Hussain}, title={{Categorical variables in regression analysis: A comparison of dummy and effect coding}}, journal={International Journal of Education}, year={2012}, volume={4}, number={2}, pages={202--210}, doi={10.5296/ije.v4i2.1962}}
@article{schad2020capitalize, author={Schad, Daniel J. and Vasishth, Shravan and Hohenstein, Sven and Kliegl, Reinhold}, title={{How to capitalize on a priori contrasts in linear (mixed) models: A tutorial}}, journal={Journal of Memory and Language}, year={2020}, volume={110}, eid={104038}, doi={10.1016/j.jml.2019.104038}}
R