Prace dyplomowe · SPSS

Mediacja i moderacja w SPSS z makrem PROCESS – modele 1, 4 i 7

Jak pobrać i zainstalować makro PROCESS Hayesa, który numer modelu wybrać i jak przeczytać wydruk: efekt pośredni z przedziałem bootstrapowym w modelu 4, interakcję i efekty warunkowe w modelu 1 oraz indeks moderowanej mediacji w modelu 7. Ze składnią, zapisem APA i plikiem .sav do ćwiczeń.

Strona główna / Blog / Mediacja i moderacja w SPSS (PROCESS)
W skrócie: Makro PROCESS pobierz ze strony Andrew F. Hayesa (afhayes.com; wersja 5.1 wymaga SPSS 26 lub nowszego), zainstaluj okno dialogowe i otwórz je z Analyze → Regression albo uruchom makro ze składni. Mediacja to model 4, moderacja – model 1, a moderowana mediacja ze ścieżką a zależną od W – model 7. Efekt pośredni oceniasz po przedziale BootLLCI–BootULCI, moderację po współczynniku Int_1 i efektach warunkowych, a moderowaną mediację po indeksie z przedziałem. Granice bootstrapu różnią się między uruchomieniami, więc w pracy podaj liczbę prób, ziarno i wersję makra.

Co robi PROCESS i kiedy po niego sięgnąć

PROCESS to bezpłatne makro Andrew F. Hayesa, które dodaje do SPSS regresyjną analizę mediacji, moderacji i ich połączeń. Każdy model ma numer z katalogu w podręczniku Hayesa (2022). Wpisujesz zmienne i numer, a makro szacuje równania, efekty warunkowe i przedziały bootstrapowe, których zwykła regresja w SPSS nie daje.

Ten wpis pokazuje instalację makra i wydruki trzech najczęstszych modeli: 1 (moderacja), 4 (mediacja) i 7 (moderowana mediacja). Ścieżki a, b i c′ wyjaśnia analiza mediacji krok po kroku, interakcje i proste nachylenia – analiza moderacji krok po kroku, a modele 7, 14 i 58 w R – moderowana mediacja i modele PROCESS w R.

Przykład. 240 osób piszących pracę dyplomową (dane symulowane) oceniło wsparcie promotora (wsparcie, 1–7), poczucie skuteczności w pisaniu (skut, 10–40), lęk przed pisaniem (lek, 1–5) i zaangażowanie w pisanie pracy (zaang, 1–7). Średnie: wsparcie M = 4.54 (SD = 1.17), skuteczność 25.82 (4.78), lęk 2.90 (0.77), zaangażowanie 4.80 (1.03). Dane pobierzesz jako plik SPSS .sav (z etykietami) albo plik CSV. Etykiety i braki danych przygotujesz według wpisu przygotowanie danych w SPSS.

Krok 1. Pobierz i zainstaluj PROCESS

Makro pobierasz tylko ze strony autora. Dawna domena processmacro.org kieruje dziś na afhayes.com i ma zostać wygaszona. 1 listopada 2026 r. strona podawała wersję 5.1 z października 2026 r., działającą w SPSS na Windows i Mac. Wydanie dla SPSS wymaga wersji 26 lub nowszej (Hayes, b.d.).

Warunki użycia (odczyt 1 listopada 2026 r.). PROCESS jest bezpłatny do użytku w postaci, w jakiej go pobierasz. Użycie komercyjne wymaga zgody właściciela praw. Nie wolno rozpowszechniać zmienionego makra ani wrzucać go na publiczne strony i serwery bez pisemnej zgody autora. Autor zaleca najnowsze wydanie i nie daje gwarancji (Hayes, b.d.).

  1. Rozpakuj archiwum ZIP. Znajdziesz w nim m.in. plik okna dialogowego, plik makra dla składni i dodatek do dokumentacji. Pełna instrukcja instalacji jest w dodatku A podręcznika (Hayes, b.d., 2022).
  2. Zainstaluj okno dialogowe. Dokumentacja IBM dla wersji 32 opisuje instalację okien zapisanych w pakiecie .spd przez Extensions → Utilities → Install Custom Dialog (Compatibility mode) (IBM Corp., b.d.). Ponowna instalacja zastępuje starszą wersję okna. W polskiej wersji interfejsu nazwy mogą się różnić.
  3. Windows: uprawnienia. Według FAQ autora najczęstszy problem to instalacja bez uprawnień administratora (Hayes, b.d.). Na komputerze uczelnianym uruchom SPSS jako administrator albo poproś o to dział IT.
  4. Sprawdź menu. Po instalacji PROCESS pojawia się w Analyze → Regression.

Bez instalacji: składnia. Okno dialogowe nie jest konieczne (Hayes, b.d.). Otwórz plik makra dla składni (.sps) i uruchom go w całości. Makro działa wtedy do końca sesji SPSS. Autor poleca tę drogę jako przejrzystszą i łatwiejszą do powtórzenia. Poniższe polecenia zapisaliśmy według podręcznika (Hayes, 2022), ale nie uruchamialiśmy ich w SPSS.

Krok 2. Numer modelu wybierz z hipotezy

Najpierw narysuj model hipotez (zob. model badawczy – schemat hipotez), potem znajdź pasujący schemat w katalogu Hayesa (2022). Rysunek 1 pokazuje trzy modele z tego wpisu.

Trzy schematy koncepcyjne: model 1 – lęk przed pisaniem wpływa na strzałkę od wsparcia promotora do zaangażowania; model 4 – wsparcie wiąże się z zaangażowaniem bezpośrednio (c′) i przez poczucie skuteczności (a, b); model 7 – jak model 4, ale lęk moderuje ścieżkę a
Rysunek 1. Schematy koncepcyjne modeli 1, 4 i 7 na zmiennych z przykładu; numeracja jak w katalogu Hayesa (2022). Rysunek przygotowany w R (to nie jest grafika z SPSS).
  • Model 1 – czy związek X z Y zależy od W? Jedno równanie z iloczynem X × W.
  • Model 4 – czy X wiąże się z Y przez M? Dwa równania i efekt pośredni ab.
  • Model 7 – czy efekt pośredni zależy od W, bo W moderuje ścieżkę a? Efekt pośredni zmienia się z W, a testem jest indeks moderowanej mediacji (Hayes, 2015).

Krok 3. Model 4: mediacja prosta

W oknie przenieś zaang do Y variable, wsparcie do X variable, a skut do Mediator(s) M. Wybierz Model number 4 i 5000 prób bootstrap. W opcjach poproś o model efektu całkowitego i efekty standaryzowane (od wersji 4 opcja stand zastąpiła effsize; Hayes, b.d.). Nazwy pól mogą się różnić między wersjami makra. Ta sama analiza w składni:

process y=zaang /x=wsparcie /m=skut /model=4 /total=1 /stand=1 /boot=5000 /seed=2941.
Model  : 4
    Y  : zaang
    X  : wsparcie
    M  : skut

Sample
Size:  240

OUTCOME VARIABLE:
 skut

Model
                 coeff         se          t          p       LLCI       ULCI
constant       20.6718     1.1894    17.3799      .0000    18.3287    23.0150
wsparcie        1.1346      .2536     4.4742      .0000      .6351     1.6342

OUTCOME VARIABLE:
 zaang

Model
                 coeff         se          t          p       LLCI       ULCI
constant        1.2866      .3188     4.0355      .0001      .6585     1.9147
wsparcie         .0561      .0470     1.1930      .2341     -.0365      .1486
skut             .1260      .0115    10.9241      .0000      .1033      .1487

************** TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y **************

Total effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .1990      .0552     3.6044      .0004      .0902      .3078

Direct effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .0561      .0470     1.1930      .2341     -.0365      .1486

Indirect effect(s) of X on Y:
                Effect     BootSE   BootLLCI   BootULCI
skut             .1430      .0310      .0840      .2058
Wydruk 1. Model 4 – fragment wydruku (równania, efekty całkowity, bezpośredni i pośredni). Liczby policzone w R metodą równoważną (MNK, percentylowy bootstrap z 5000 prób, set.seed(2941)); układ jak w wydruku tekstowym PROCESS, a nie zrzut z SPSS. Granice bootstrapowe (BootSE, BootLLCI, BootULCI) różnią się między uruchomieniami, więc w SPSS dostaniesz nieco inne wartości.

Jak czytać. Pierwsze równanie (OUTCOME VARIABLE: skut) daje ścieżkę a = 1.13: wyższe wsparcie wiązało się z wyższym poczuciem skuteczności. Drugie równanie daje b = 0.13 (wiersz skut) i c′ = 0.06 (wiersz wsparcie). Najważniejsza jest ostatnia część. Efekt pośredni ab = 0.14 ma przedział bootstrapowy [0.08, 0.21] bez zera. Efekt bezpośredni 0.06 jest nieistotny, a efekt całkowity 0.20 = 0.06 + 0.14. Efekt pośredni nie ma wartości p, więc wnioskujesz z przedziału (Preacher i Hayes, 2008). Opcja stand=1 doda też efekt w pełni standaryzowany (tu 0.16, 95% CI [0.10, 0.23]).

Krok 4. Model 1: moderacja

Przenieś lek do pola moderatora W, wybierz model 1 i zaznacz centrowanie zmiennych tworzących iloczyn. Autor nie uważa centrowania za konieczne, ale zaleca opcję center zamiast ręcznego liczenia nowych zmiennych (Hayes, b.d.). Opcja jn=1 dodaje przedział Johnsona–Neymana.

process y=zaang /x=wsparcie /w=lek /model=1 /center=1 /jn=1.
Model  : 1
    Y  : zaang
    X  : wsparcie
    W  : lek

Sample
Size:  240

OUTCOME VARIABLE:
 zaang

Model
                 coeff         se          t          p       LLCI       ULCI
constant        4.8015      .0634    75.7820      .0000     4.6767     4.9263
wsparcie         .2064      .0543     3.8020      .0002      .0995      .3134
lek             -.1745      .0827    -2.1089      .0360     -.3375     -.0115
Int_1            .2129      .0818     2.6022      .0098      .0517      .3741

Product terms key:
 Int_1    :        wsparcie x        lek

Test(s) of highest order unconditional interaction(s):
               R2-chng          F        df1        df2          p
 X*W             .0259     6.7714     1.0000   236.0000      .0098

Conditional effects of the focal predictor at values of the moderator(s):
                   lek     Effect         se          t          p       LLCI       ULCI
                -.6967      .0581      .0754      .7698      .4422     -.0905      .2067
                -.0967      .1858      .0542     3.4273      .0007      .0790      .2926
                 .7033      .3562      .0823     4.3287      .0000      .1941      .5183
Wydruk 2. Model 1 – fragment wydruku z centrowaniem; kolumna lek po wycentrowaniu. Liczby z R (metoda równoważna, bootstrap 5000 prób, set.seed(2941)), układ jak w PROCESS; granice bootstrapowe różnią się między uruchomieniami.

Jak czytać. Wiersz Int_1 to iloczyn wsparcia i lęku (klucz pod tabelą to wyjaśnia). Współczynnik 0.21 z przedziałem [0.05, 0.37] oznacza, że związek wsparcia z zaangażowaniem rośnie z poziomem lęku. R2-chng: interakcja dodała 2.6% wyjaśnionej wariancji. Po centrowaniu współczynnik wsparcie (0.21) to efekt wsparcia przy średnim lęku, a nie przy lęku równym zero.

Wartości moderatora. Domyślnie PROCESS liczy efekty warunkowe przy 16., 50. i 84. percentylu W, a opcja moments=1 zmienia je na M − 1 SD, M i M + 1 SD (Hayes, 2022). Po centrowaniu kolumna lek pokazuje odchylenia od średniej (2.90). Wartości −.6967, −.0967 i .7033 to więc lęk 2.20, 2.80 i 3.60. Przy niskim lęku wsparcie nie wiązało się z zaangażowaniem (p = .442), przy średnim i wysokim – tak. Według granicy Johnsona–Neymana efekt jest istotny od lęku 2.49 w górę, czyli dla około 69% próby. Sprawdzisz ją w kalkulatorze Johnsona–Neymana. Interakcja jest sondowana domyślnie tylko przy p ≤ .10 – próg zmienia opcja intprobe (Hayes, b.d.).

Krok 5. Model 7: moderowana mediacja

X, M i Y zostają jak w modelu 4, a lęk trafia do W jako moderator ścieżki a.

process y=zaang /x=wsparcie /m=skut /w=lek /model=7 /center=1 /boot=5000 /seed=2941.
Model  : 7
    Y  : zaang
    X  : wsparcie
    M  : skut
    W  : lek

Sample
Size:  240

OUTCOME VARIABLE:
 skut

Model
                 coeff         se          t          p       LLCI       ULCI
constant       25.8514      .2750    93.9931      .0000    25.3096    26.3933
wsparcie        1.1362      .2357     4.8210      .0000      .6719     1.6004
lek            -2.0671      .3591    -5.7558      .0000    -2.7746    -1.3596
Int_1            .8854      .3552     2.4928      .0134      .1857     1.5852

Product terms key:
 Int_1    :        wsparcie x        lek

OUTCOME VARIABLE:
 zaang

(równanie Y jak w modelu 4 – pominięte)

****************** DIRECT AND INDIRECT EFFECTS OF X ON Y *****************

Direct effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .0561      .0470     1.1930      .2341     -.0365      .1486

Conditional indirect effects of X on Y:

INDIRECT EFFECT:
 wsparcie    ->    skut    ->    zaang

                   lek     Effect     BootSE   BootLLCI   BootULCI
                -.6967      .0654      .0359     -.0014      .1400
                -.0967      .1324      .0298      .0769      .1928
                 .7033      .2216      .0444      .1406      .3147

Index of moderated mediation:
                 Index     BootSE   BootLLCI   BootULCI
lek              .1116      .0379      .0388      .1884
Wydruk 3. Model 7 – fragment wydruku z warunkowymi efektami pośrednimi i indeksem moderowanej mediacji. Liczby z R (metoda równoważna, bootstrap 5000 prób, set.seed(2941)), układ jak w PROCESS; granice bootstrapowe różnią się między uruchomieniami.

Jak czytać. W równaniu skuteczności Int_1 = 0.89 (p = .013): wsparcie silniej wiązało się z poczuciem skuteczności u osób z wyższym lękiem. Równanie zaangażowania ma te same b i c′ co w modelu 4 (inna jest tylko stała, bo wsparcie wycentrowano). Niżej masz warunkowe efekty pośrednie, czyli a(W) × b przy trzech wartościach lęku. Przy lęku 2.20 przedział [−0.001, 0.140] obejmuje zero, a przy 2.80 i 3.60 już nie.

Testem moderowanej mediacji jest jednak indeks, a nie porównanie trzech przedziałów. Indeks = 0.11, 95% CI [0.04, 0.19], więc efekt pośredni rósł o 0.11 z każdym punktem lęku (Hayes, 2015). PROCESS podaje indeks, gdy efekt pośredni jest liniową funkcją jednego moderatora (Hayes, b.d.). Wybór między modelami 7, 14 i 58 omawia poradnik o moderowanej mediacji w R, a kilka mediatorów naraz – mediacja równoległa i szeregowa.

Dlaczego granice bootstrapu zmieniają się między uruchomieniami

Bootstrap 5000 razy losuje osoby ze zwracaniem i szacuje model od nowa, więc BootSE, BootLLCI i BootULCI zależą od losowania. Ten sam model 7 z innym ziarnem dał w R indeks z przedziałem [0.04, 0.19], ale z dolną granicą .0405 zamiast .0388. Od wersji 3 PROCESS liczy domyślnie przedziały percentylowe. Przedziały z korekcją obciążenia daje opcja bc, a przedziałów BCa makro nie liczy (Hayes, b.d.). Żeby dostać identyczny wynik przy ponownym uruchomieniu, ustaw ziarno (seed).

W pracy podaj wersję PROCESS, numer modelu, liczbę prób, rodzaj przedziału i ziarno. Twoje granice z SPSS nie będą identyczne z wydrukami na tej stronie, bo SPSS i R mają inne generatory liczb losowych. Współczynniki, SE i p z regresji powinny się zgadzać co do czwartego miejsca po kropce. Jeśli masz tylko a, b i ich błędy standardowe, bez surowych danych, przedział policzysz w kalkulatorze efektu pośredniego Monte Carlo.

Zapis wyników w stylu APA

Według FAQ autora jedynym właściwym źródłem do zacytowania PROCESS jest podręcznik Hayesa (2022), a nie starsze artykuły ani dokumentacja (Hayes, b.d.). Hayes i Rockwood (2017) pokazują, jak zwięźle opisać takie modele w artykule. Wyniki kilku ścieżek zbierzesz w tabeli mediacji w APA, a pojedyncze zdania – w generatorze opisu wyników APA.

Mediację sprawdzono w makrze PROCESS (model 4; Hayes, 2022) z percentylowym przedziałem bootstrap (5000 prób). Wsparcie promotora wiązało się z wyższym poczuciem skuteczności w pisaniu, b = 1.13, 95% CI [0.64, 1.63], a poczucie skuteczności – z wyższym zaangażowaniem przy kontroli wsparcia, b = 0.13, 95% CI [0.10, 0.15]. Efekt pośredni wsparcia przez poczucie skuteczności był istotny, ab = 0.14, 95% CI [0.08, 0.21], a efekt bezpośredni nie, c′ = 0.06, 95% CI [−0.04, 0.15], p = .234 (N = 240).
W modelu 7 lęk przed pisaniem moderował związek wsparcia promotora z poczuciem skuteczności, b = 0.89, 95% CI [0.19, 1.59], p = .013, ΔR² = .02. Indeks moderowanej mediacji wyniósł 0.11, 95% CI [0.04, 0.19]. Warunkowy efekt pośredni był nieistotny przy niskim lęku (16. percentyl), 0.07, 95% CI [−0.001, 0.140], i istotny przy lęku przeciętnym, 0.13, 95% CI [0.08, 0.19], oraz wysokim (84. percentyl), 0.22, 95% CI [0.14, 0.31].

W badaniu z jednego pomiaru pisz o związkach, nie o wpływie. Modele z PROCESS dają wnioski przyczynowe tylko przy mocnych założeniach o braku pominiętych zmiennych (Rohrer i in., 2022). Inne analizy dobierzesz w kreatorze doboru testu.

Przykład reprodukowalny

Te same liczby w R

SPSS ani PROCESS nie były używane przy przygotowaniu tej strony. Wszystkie liczby z wydruków 1–3 policzyliśmy w R metodą równoważną: regresja MNK dla każdego równania, efekty warunkowe θ = b1 + b3W z błędem standardowym z macierzy kowariancji współczynników oraz percentylowy bootstrap (losowanie osób ze zwracaniem, 5000 prób, ustalone ziarno). Percentyle moderatora liczy funkcja quantile() z domyślną definicją R; przy innych danych PROCESS może wyznaczyć je nieco inaczej. Uruchom przepisy po kolei z folderu, w którym zapiszesz pliki danych. Przepis 1 tworzy plik CSV i plik .sav (pakiet haven).

1. Dane: CSV i plik SPSS .sav z etykietami

Dane wejściowe: 240 osób piszących pracę dyplomową (dane symulowane, set.seed(2941)): stopień studiów, wsparcie promotora, lęk przed pisaniem, poczucie skuteczności i zaangażowanie.

Co odczytać: liczebności stopni studiów, M, SD, minimum i maksimum oraz korelacje zmiennych.

R
# B294 – dane przykładowe: wsparcie promotora, poczucie skuteczności, lęk przed pisaniem
# i zaangażowanie w pisanie pracy (dane symulowane, set.seed(2941)); plik CSV i plik SPSS .sav
suppressPackageStartupMessages(library(haven))
set.seed(2941)
n <- 240
stopien  <- sample(1:2, n, replace = TRUE, prob = c(.55, .45))        # 1 = licencjackie, 2 = magisterskie
wsparcie <- round(pmin(pmax(rnorm(n, 4.6, 1.15), 1), 7) * 4) / 4         # wsparcie promotora (średnia 4 pozycji, 1–7)
lek      <- round(pmin(pmax(rnorm(n, 2.9, 0.80), 1), 5) * 5) / 5         # lęk przed pisaniem (średnia 5 pozycji, 1–5)
wc <- wsparcie - 4.6; lc <- lek - 2.9
skut     <- round(pmin(pmax(26 + 1.5 * wc - 1.6 * lc + 1.2 * wc * lc + rnorm(n, 0, 4.2), 10), 40))  # skuteczność (10–40)
zaang    <- round(pmin(pmax(1.6 + 0.10 * skut + 0.12 * wsparcie + 0.15 * wc * lc + rnorm(n, 0, 0.85), 1), 7), 2)    # zaangażowanie (1–7)
dane <- data.frame(id = 1:n, stopien, wsparcie, lek, skut, zaang)
write.csv(dane, "../mediacja-moderacja-process-dane.csv", row.names = FALSE)

sav <- dane
sav$stopien <- labelled(sav$stopien, c("licencjackie" = 1, "magisterskie" = 2), label = "Stopień studiów")
attr(sav$id, "label")       <- "Numer osoby"
attr(sav$wsparcie, "label") <- "Wsparcie promotora (1–7)"
attr(sav$lek, "label")      <- "Lęk przed pisaniem (1–5)"
attr(sav$skut, "label")     <- "Poczucie skuteczności w pisaniu (10–40)"
attr(sav$zaang, "label")    <- "Zaangażowanie w pisanie pracy (1–7)"
write_sav(sav, "../mediacja-moderacja-process-dane.sav")

table(stopien = dane$stopien)
round(sapply(dane[, c("wsparcie", "lek", "skut", "zaang")], function(x) c(M = mean(x), SD = sd(x), min = min(x), max = max(x))), 2)
round(cor(dane[, c("wsparcie", "lek", "skut", "zaang")]), 2)
Wynik w R
stopien
  1   2 
134 106 
    wsparcie  lek  skut zaang
M       4.54 2.90 25.82  4.80
SD      1.17 0.77  4.78  1.03
min     1.00 1.00 13.00  2.06
max     7.00 5.00 39.00  7.00
         wsparcie   lek  skut zaang
wsparcie     1.00 -0.03  0.28  0.23
lek         -0.03  1.00 -0.35 -0.15
skut         0.28 -0.35  1.00  0.60
zaang        0.23 -0.15  0.60  1.00

2. Model 4: równania MNK, efekt całkowity, bezpośredni i pośredni z bootstrapem

Dane wejściowe: plik CSV z przepisu 1; funkcje pomocnicze formatują liczby jak wydruk PROCESS i są używane w przepisach 3–4.

Co odczytać: ścieżki a, b, c′ i c z 95% CI, efekt pośredni z BootSE i percentylowym 95% CI, efekt w pełni standaryzowany, kontrolę c = c′ + ab oraz granice przy innym ziarnie.

R
# Model 4 (mediacja prosta): wsparcie -> skut -> zaang; MNK + percentylowy bootstrap 5000 prób
dane <- read.csv("../mediacja-moderacja-process-dane.csv")
# Pomocnicze: liczby w stylu wydruku PROCESS (4 miejsca, bez zera przed kropką)
f4 <- function(x, w = 11) { s <- formatC(x, format = "f", digits = 4, width = w)
  sub("^( *)0\\.", "\\1 .", sub("^( *)-0\\.", "\\1 -.", s)) }
wiersz <- function(nazwa, x) cat(formatC(nazwa, width = -11), paste(f4(x), collapse = ""), "\n", sep = "")
naglowek <- function(h) cat(formatC("", width = 11), paste(formatC(h, width = 11), collapse = ""), "\n", sep = "")
model_summary <- function(m) {
  s <- summary(m); fs <- s$fstatistic
  cat("Model Summary\n"); naglowek(c("R", "R-sq", "MSE", "F", "df1", "df2", "p"))
  wiersz("", c(sqrt(s$r.squared), s$r.squared, s$sigma^2, fs[1], fs[2], fs[3], pf(fs[1], fs[2], fs[3], lower.tail = FALSE)))
}
model_coef <- function(m) {
  s <- summary(m); ci <- confint(m)
  cat("Model\n"); naglowek(c("coeff", "se", "t", "p", "LLCI", "ULCI"))
  nz <- sub("\\(Intercept\\)", "constant", sub("wsparcie:lek", "Int_1", rownames(coef(s))))
  for (i in seq_len(nrow(coef(s)))) wiersz(nz[i], c(coef(s)[i, ], ci[i, ]))
}
# Bootstrap: losowanie osób ze zwracaniem, ponowne MNK, percentyle 2.5 i 97.5
bootstrap <- function(d, stat, B = 5000, seed) {
  set.seed(seed)
  t(replicate(B, stat(d[sample(nrow(d), replace = TRUE), ])))
}

ma <- lm(skut ~ wsparcie, data = dane)
my <- lm(zaang ~ wsparcie + skut, data = dane)
mc <- lm(zaang ~ wsparcie, data = dane)
cat("OUTCOME VARIABLE:\n skut\n\n"); model_summary(ma); cat("\n"); model_coef(ma)
cat("\nOUTCOME VARIABLE:\n zaang\n\n"); model_summary(my); cat("\n"); model_coef(my)
cat("\n************************** TOTAL EFFECT MODEL ****************************\n")
model_summary(mc); cat("\n"); model_coef(mc)

a <- coef(ma)["wsparcie"]; b <- coef(my)["skut"]
ind <- function(d) {
  a <- coef(lm(skut ~ wsparcie, data = d))["wsparcie"]
  b <- coef(lm(zaang ~ wsparcie + skut, data = d))["skut"]
  c(ab = unname(a * b), ab_std = unname(a * b * sd(d$wsparcie) / sd(d$zaang)))
}
bt <- bootstrap(dane, ind, B = 5000, seed = 2941)
cat("\n************** TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y **************\n")
cat("\nTotal effect of X on Y\n"); naglowek(c("Effect", "se", "t", "p", "LLCI", "ULCI"))
wiersz("", c(coef(summary(mc))["wsparcie", ], confint(mc)["wsparcie", ]))
cat("\nDirect effect of X on Y\n"); naglowek(c("Effect", "se", "t", "p", "LLCI", "ULCI"))
wiersz("", c(coef(summary(my))["wsparcie", ], confint(my)["wsparcie", ]))
cat("\nIndirect effect(s) of X on Y:\n"); naglowek(c("Effect", "BootSE", "BootLLCI", "BootULCI"))
wiersz("skut", c(a * b, sd(bt[, "ab"]), quantile(bt[, "ab"], c(.025, .975))))
cat("\nCompletely standardized indirect effect(s) of X on Y:\n"); naglowek(c("Effect", "BootSE", "BootLLCI", "BootULCI"))
wiersz("skut", c(a * b * sd(dane$wsparcie) / sd(dane$zaang), sd(bt[, "ab_std"]), quantile(bt[, "ab_std"], c(.025, .975))))
# Kontrola: c = c' + ab
round(c(c = unname(coef(mc)["wsparcie"]), c_prim = unname(coef(my)["wsparcie"]), ab = unname(a * b)), 4)
# Zmienność bootstrapu: te same dane, inne ziarno
bt2 <- bootstrap(dane, ind, B = 5000, seed = 7)
round(quantile(bt2[, "ab"], c(.025, .975)), 4)
Wynik w R
OUTCOME VARIABLE:
 skut

Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .2785      .0776    21.1561    20.0181     1.0000   238.0000      .0000

Model
                 coeff         se          t          p       LLCI       ULCI
constant       20.6718     1.1894    17.3799      .0000    18.3287    23.0150
wsparcie        1.1346      .2536     4.4742      .0000      .6351     1.6342

OUTCOME VARIABLE:
 zaang

Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .6077      .3693      .6699    69.3932     2.0000   237.0000      .0000

Model
                 coeff         se          t          p       LLCI       ULCI
constant        1.2866      .3188     4.0355      .0001      .6585     1.9147
wsparcie         .0561      .0470     1.1930      .2341     -.0365      .1486
skut             .1260      .0115    10.9241      .0000      .1033      .1487

************************** TOTAL EFFECT MODEL ****************************
Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .2275      .0518     1.0029    12.9914     1.0000   238.0000      .0004

Model
                 coeff         se          t          p       LLCI       ULCI
constant        3.8912      .2590    15.0258      .0000     3.3811     4.4014
wsparcie         .1990      .0552     3.6044      .0004      .0902      .3078

************** TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y **************

Total effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .1990      .0552     3.6044      .0004      .0902      .3078

Direct effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .0561      .0470     1.1930      .2341     -.0365      .1486

Indirect effect(s) of X on Y:
                Effect     BootSE   BootLLCI   BootULCI
skut             .1430      .0310      .0840      .2058

Completely standardized indirect effect(s) of X on Y:
                Effect     BootSE   BootLLCI   BootULCI
skut             .1634      .0339      .0968      .2302
     c c_prim     ab 
0.1990 0.0561 0.1430 
  2.5%  97.5% 
0.0853 0.2085 

3. Model 1: interakcja, R2-chng, efekty warunkowe i granica Johnsona–Neymana

Dane wejściowe: plik CSV z przepisu 1; wsparcie i lęk wycentrowane (odpowiednik center=1).

Co odczytać: współczynnik Int_1, przyrost R², efekty warunkowe przy 16., 50. i 84. percentylu oraz przy M ± 1 SD, wartości lęku na skali surowej i granicę Johnsona–Neymana.

R
# Model 1 (moderacja): czy związek wsparcia z zaangażowaniem zależy od lęku przed pisaniem?
# Odpowiednik opcji center=1: X i W wycentrowane przed utworzeniem iloczynu (korzysta z funkcji z przepisu 2)
dane <- read.csv("../mediacja-moderacja-process-dane.csv")
d <- transform(dane, wsparcie = wsparcie - mean(wsparcie), lek = lek - mean(lek))
m1 <- lm(zaang ~ wsparcie * lek, data = d)
m0 <- lm(zaang ~ wsparcie + lek, data = d)
cat("OUTCOME VARIABLE:\n zaang\n\n"); model_summary(m1); cat("\n"); model_coef(m1)
r2 <- summary(m1)$r.squared - summary(m0)$r.squared; an <- anova(m0, m1)
cat("\nTest(s) of highest order unconditional interaction(s):\n"); naglowek(c("R2-chng", "F", "df1", "df2", "p"))
wiersz(" X*W", c(r2, an$F[2], an$Df[2], an$Res.Df[2], an$`Pr(>F)`[2]))
# Efekty warunkowe X: theta = b1 + b3 * W, SE z wariancji i kowariancji współczynników
efekt_warunkowy <- function(m, w) {
  b <- coef(m); V <- vcov(m); df <- m$df.residual
  th <- b["wsparcie"] + b["wsparcie:lek"] * w
  se <- sqrt(V["wsparcie", "wsparcie"] + w^2 * V["wsparcie:lek", "wsparcie:lek"] + 2 * w * V["wsparcie", "wsparcie:lek"])
  t <- th / se; q <- qt(.975, df)
  cbind(w, th, se, t, 2 * pt(-abs(t), df), th - q * se, th + q * se)
}
pokaz <- function(tab) { naglowek(c("lek", "Effect", "se", "t", "p", "LLCI", "ULCI"))
  for (i in seq_len(nrow(tab))) cat(formatC("", width = 11), paste(f4(tab[i, ]), collapse = ""), "\n", sep = "") }
cat("\nConditional effects of the focal predictor at values of the moderator(s):\n")
pokaz(efekt_warunkowy(m1, quantile(d$lek, c(.16, .50, .84))))           # domyślnie: 16., 50. i 84. percentyl W
cat("\nTo samo przy M - 1 SD, M i M + 1 SD (odpowiednik moments=1):\n")
pokaz(efekt_warunkowy(m1, c(-1, 0, 1) * sd(d$lek)))
# Wartości W na skali surowej (dodaj średnią lęku)
round(c(srednia_lek = mean(dane$lek), quantile(dane$lek, c(.16, .50, .84)), M_minus_SD = mean(dane$lek) - sd(dane$lek), M_plus_SD = mean(dane$lek) + sd(dane$lek)), 2)
# Granica Johnsona–Neymana: wartość W, przy której p efektu warunkowego = .05 (skala surowa)
jn <- function(w) { e <- efekt_warunkowy(m1, w); e[, 4]^2 - qt(.975, m1$df.residual)^2 }
siatka <- seq(min(d$lek), max(d$lek), by = .001); zm <- which(diff(sign(jn(siatka))) != 0)
gr <- sapply(zm, function(i) uniroot(jn, c(siatka[i], siatka[i + 1]))$root)
round(c(granica_JN = gr + mean(dane$lek), procent_ponizej = 100 * mean(d$lek < gr)), 2)
Wynik w R
OUTCOME VARIABLE:
 zaang

Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .3132      .0981      .9620     8.5550     3.0000   236.0000      .0000

Model
                 coeff         se          t          p       LLCI       ULCI
constant        4.8015      .0634    75.7820      .0000     4.6767     4.9263
wsparcie         .2064      .0543     3.8020      .0002      .0995      .3134
lek             -.1745      .0827    -2.1089      .0360     -.3375     -.0115
Int_1            .2129      .0818     2.6022      .0098      .0517      .3741

Test(s) of highest order unconditional interaction(s):
               R2-chng          F        df1        df2          p
 X*W             .0259     6.7714     1.0000   236.0000      .0098

Conditional effects of the focal predictor at values of the moderator(s):
                   lek     Effect         se          t          p       LLCI       ULCI
                -.6967      .0581      .0754      .7698      .4422     -.0905      .2067
                -.0967      .1858      .0542     3.4273      .0007      .0790      .2926
                 .7033      .3562      .0823     4.3287      .0000      .1941      .5183

To samo przy M - 1 SD, M i M + 1 SD (odpowiednik moments=1):
                   lek     Effect         se          t          p       LLCI       ULCI
                -.7695      .0426      .0797      .5341      .5938     -.1145      .1996
                 .0000      .2064      .0543     3.8020      .0002      .0995      .3134
                 .7695      .3703      .0864     4.2837      .0000      .2000      .5405
srednia_lek         16%         50%         84%  M_minus_SD   M_plus_SD 
       2.90        2.20        2.80        3.60        2.13        3.67 
     granica_JN procent_ponizej 
           2.49           30.83 

4. Model 7: warunkowe efekty pośrednie i indeks moderowanej mediacji

Dane wejściowe: plik CSV z przepisu 1; wsparcie i lęk wycentrowane; bootstrap 5000 prób.

Co odczytać: równanie mediatora z interakcją, efekt bezpośredni, warunkowe efekty pośrednie z percentylowym 95% CI, indeks moderowanej mediacji oraz jego granice przy innym ziarnie.

R
# Model 7 (moderowana mediacja): lęk moderuje ścieżkę a (wsparcie -> skut); korzysta z funkcji z przepisów 2–3
dane <- read.csv("../mediacja-moderacja-process-dane.csv")
d <- transform(dane, wsparcie = wsparcie - mean(wsparcie), lek = lek - mean(lek))   # center=1
ma <- lm(skut ~ wsparcie * lek, data = d)
my <- lm(zaang ~ wsparcie + skut, data = d)
cat("OUTCOME VARIABLE:\n skut\n\n"); model_summary(ma); cat("\n"); model_coef(ma)
r2 <- summary(ma)$r.squared - summary(lm(skut ~ wsparcie + lek, data = d))$r.squared
cat("\nR2-chng dla Int_1:", f4(r2), "\n")
cat("\nOUTCOME VARIABLE:\n zaang\n\n"); model_summary(my); cat("\n"); model_coef(my)
wq <- quantile(d$lek, c(.16, .50, .84))
stat7 <- function(x) {
  a <- coef(lm(skut ~ wsparcie * lek, data = x)); b <- coef(lm(zaang ~ wsparcie + skut, data = x))["skut"]
  c(unname((a["wsparcie"] + a["wsparcie:lek"] * wq) * b), indeks = unname(a["wsparcie:lek"] * b))
}
est <- stat7(d)
bt <- bootstrap(d, stat7, B = 5000, seed = 2941)
cat("\n****************** DIRECT AND INDIRECT EFFECTS OF X ON Y *****************\n")
cat("\nDirect effect of X on Y\n"); naglowek(c("Effect", "se", "t", "p", "LLCI", "ULCI"))
wiersz("", c(coef(summary(my))["wsparcie", ], confint(my)["wsparcie", ]))
cat("\nConditional indirect effects of X on Y:\n\nINDIRECT EFFECT:\n wsparcie    ->    skut    ->    zaang\n\n")
naglowek(c("lek", "Effect", "BootSE", "BootLLCI", "BootULCI"))
for (i in 1:3) cat(formatC("", width = 11), paste(f4(c(wq[i], est[i], sd(bt[, i]), quantile(bt[, i], c(.025, .975)))), collapse = ""), "\n", sep = "")
cat("\nIndex of moderated mediation:\n"); naglowek(c("Index", "BootSE", "BootLLCI", "BootULCI"))
wiersz("lek", c(est[4], sd(bt[, 4]), quantile(bt[, 4], c(.025, .975))))
# Inne ziarno: granice przesuwają się w trzecim miejscu po kropce
bt2 <- bootstrap(d, stat7, B = 5000, seed = 7)
round(quantile(bt2[, 4], c(.025, .975)), 4)
Wynik w R
OUTCOME VARIABLE:
 skut

Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .4650      .2163    18.1277    21.7074     3.0000   236.0000      .0000

Model
                 coeff         se          t          p       LLCI       ULCI
constant       25.8514      .2750    93.9931      .0000    25.3096    26.3933
wsparcie        1.1362      .2357     4.8210      .0000      .6719     1.6004
lek            -2.0671      .3591    -5.7558      .0000    -2.7746    -1.3596
Int_1            .8854      .3552     2.4928      .0134      .1857     1.5852

R2-chng dla Int_1:       .0206 

OUTCOME VARIABLE:
 zaang

Model Summary
                     R       R-sq        MSE          F        df1        df2          p
                 .6077      .3693      .6699    69.3932     2.0000   237.0000      .0000

Model
                 coeff         se          t          p       LLCI       ULCI
constant        1.5412      .3025     5.0944      .0000      .9452     2.1371
wsparcie         .0561      .0470     1.1930      .2341     -.0365      .1486
skut             .1260      .0115    10.9241      .0000      .1033      .1487

****************** DIRECT AND INDIRECT EFFECTS OF X ON Y *****************

Direct effect of X on Y
                Effect         se          t          p       LLCI       ULCI
                 .0561      .0470     1.1930      .2341     -.0365      .1486

Conditional indirect effects of X on Y:

INDIRECT EFFECT:
 wsparcie    ->    skut    ->    zaang

                   lek     Effect     BootSE   BootLLCI   BootULCI
                -.6967      .0654      .0359     -.0014      .1400
                -.0967      .1324      .0298      .0769      .1928
                 .7033      .2216      .0444      .1406      .3147

Index of moderated mediation:
                 Index     BootSE   BootLLCI   BootULCI
lek              .1116      .0379      .0388      .1884
  2.5%  97.5% 
0.0405 0.1911 

Bibliografia oprogramowania

Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3; rysunek przygotowano w pakietach ggplot2 i svglite. W pracy podaj wersje faktycznie użytych programów i pakietów (w R: sessionInfo()), a dla PROCESS – numer wersji makra.

  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. haven (wersja 2.5.5): Wickham, H., Miller, E., & Smith, D. (2025). haven: Import and export 'SPSS', 'Stata' and 'SAS' files (R package version 2.5.5) [Computer software]. https://CRAN.R-project.org/package=haven
  3. ggplot2 (wersja 4.0.2): Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2.tidyverse.org
  4. svglite (wersja 2.2.2): Wickham, H., Henry, L., Pedersen, T. L., Luciani, T. J., Decorde, M., & Lise, V. (2025). svglite: An ‘SVG’ graphics device [R package]. https://doi.org/10.32614/CRAN.package.svglite

Najczęstsze błędy z PROCESS w SPSS

  • Numer modelu dobrany po obejrzeniu wyników – to ukryte wielokrotne testowanie.
  • Szukanie p dla efektu pośredniego albo wnioskowanie z testu Sobela. Wnioskuj z przedziału bootstrapowego.
  • Moderowana mediacja z porównania przedziałów („przy niskim W nieistotny, przy wysokim istotny”) zamiast z indeksu.
  • Przepisanie wartości W z kolumny po centrowaniu jako surowych („lęk = −0.70”). Dodaj średnią.
  • Brak ziarna i liczby prób w opisie.
  • Dzielenie ciągłego moderatora medianą zamiast modelu 1 z ciągłym W (zob. dzielenie medianą).

Jeśli chcesz, żeby ktoś sprawdził wybór modelu PROCESS i opis wyników w Twojej pracy, zajrzyj do oferty analizy statystyczne dla studentów.

Najczęstsze pytania

Skąd pobrać makro PROCESS do SPSS i czy jest darmowe?

Tylko ze strony autora, afhayes.com – dawna domena processmacro.org została tam przeniesiona. Makro jest bezpłatne do użytku w niezmienionej postaci, ale użycie komercyjne wymaga zgody autora. Nie wolno też udostępniać kopii makra na publicznych stronach i serwerach (Hayes, b.d.). W listopadzie 2026 r. aktualna była wersja 5.1, wymagająca SPSS 26 lub nowszego.

Dlaczego po instalacji nie widzę PROCESS w menu SPSS?

Na Windows najczęstszą przyczyną jest instalacja okna dialogowego bez uprawnień administratora (Hayes, b.d.). Uruchom SPSS jako administrator i zainstaluj okno ponownie przez Extensions → Utilities → Install Custom Dialog (Compatibility mode) (IBM Corp., b.d.). PROCESS powinien pojawić się w Analyze → Regression. Jeśli nie masz uprawnień, uruchom makro ze składni – okno dialogowe nie jest do tego potrzebne.

Dlaczego BootLLCI i BootULCI w moim wydruku PROCESS różnią się od wyniku kolegi?

Bo przedział bootstrapowy powstaje z losowania osób ze zwracaniem, a każde uruchomienie losuje inne próby. Różnice zwykle dotyczą trzeciego miejsca po kropce. Żeby uzyskać ten sam wynik przy ponownym uruchomieniu, ustaw ziarno generatora (opcja seed) i podaj je w pracy razem z liczbą prób (Hayes, b.d.).

Model 7 czy model 14 w PROCESS – jak wybrać przy moderowanej mediacji w SPSS?

Ten, który odpowiada Twojej hipotezie. Jeśli moderator zmienia związek X z mediatorem (ścieżkę a), to model 7. Jeśli zmienia związek mediatora z Y (ścieżkę b), to model 14. Numer wybierz z rysunku modelu przed analizą, korzystając z katalogu modeli w podręczniku Hayesa (2022), a nie po obejrzeniu wyników.

Jak zacytować makro PROCESS w pracy dyplomowej?

Według FAQ autora jedynym właściwym źródłem jest podręcznik: Hayes (2022), Introduction to mediation, moderation, and conditional process analysis (3rd ed.). W metodzie podaj też wersję makra, numer modelu, liczbę prób bootstrap, rodzaj przedziału (domyślnie percentylowy) i ziarno.

Powiązane hasła

Przeczytaj też

Masz wydruk z PROCESS i nie wiesz, co z niego przepisać?

Sprawdzimy dobór modelu, ustawienia bootstrapu i centrowania oraz opis wyników i wyjaśnimy je tak, żebyś umiał(a) samodzielnie je opisać i obronić.

Oferta dla studentówWyceń analizę

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Hayes, A. F. (2015). An index and test of linear moderated mediation. Multivariate Behavioral Research, 50(1), 1–22. https://doi.org/10.1080/00273171.2014.962683
  2. Hayes, A. F. (2022). Introduction to mediation, moderation, and conditional process analysis: A regression-based approach (3rd ed.). Guilford Press.
  3. Hayes, A. F. (b.d.). The PROCESS macro for SPSS, SAS, and R: Download, FAQ and version history. afhayes.com. Pobrano 1 listopada 2026 z https://www.afhayes.com/download.html ● Otwarty dostęp
  4. Hayes, A. F., & Rockwood, N. J. (2017). Regression-based statistical mediation and moderation analysis in clinical research: Observations, recommendations, and implementation. Behaviour Research and Therapy, 98, 39–57. https://doi.org/10.1016/j.brat.2016.11.001
  5. IBM Corp. (b.d.). Managing custom dialogs in compatibility mode. IBM SPSS Statistics 32.0.0 documentation. Pobrano 1 listopada 2026 z https://www.ibm.com/docs/en/spss-statistics/32.0.0?topic=dialogs-managing-custom-in-compatibility-mode ● Otwarty dostęp
  6. Preacher, K. J., & Hayes, A. F. (2008). Asymptotic and resampling strategies for assessing and comparing indirect effects in multiple mediator models. Behavior Research Methods, 40(3), 879–891. https://doi.org/10.3758/BRM.40.3.879 ● Otwarty dostęp
  7. Rohrer, J. M., Hünermund, P., Arslan, R. C., & Elson, M. (2022). That’s a lot to process! Pitfalls of popular path models. Advances in Methods and Practices in Psychological Science, 5(2), Article 25152459221095827. https://doi.org/10.1177/25152459221095827 ● Otwarty dostęp

Cytowania BibTeX

@article{hayes2015index, author={Hayes, Andrew F.}, title={{An index and test of linear moderated mediation}}, journal={Multivariate Behavioral Research}, year={2015}, volume={50}, number={1}, pages={1--22}, doi={10.1080/00273171.2014.962683}}
@book{hayes2022introduction, author={Hayes, Andrew F.}, title={{Introduction to mediation, moderation, and conditional process analysis: A regression-based approach (3rd ed.)}}, year={2022}, publisher={Guilford Press}, url={https://www.guilford.com/books/Introduction-to-Mediation-Moderation-and-Conditional-Process-Analysis/Andrew-Hayes/9781462549030}}
@misc{hayesndprocessmacro, author={Hayes, Andrew F.}, title={{The PROCESS macro for SPSS, SAS, and R: Download, FAQ and version history}}, howpublished={afhayes.com}, url={https://www.afhayes.com/download.html}}
@article{hayes2017regression, author={Hayes, Andrew F. and Rockwood, Nicholas J.}, title={{Regression-based statistical mediation and moderation analysis in clinical research: Observations, recommendations, and implementation}}, journal={Behaviour Research and Therapy}, year={2017}, volume={98}, pages={39--57}, doi={10.1016/j.brat.2016.11.001}}
@misc{ibmnd32customdialogs, author={{IBM Corp.}}, title={{Managing custom dialogs in compatibility mode}}, howpublished={IBM SPSS Statistics 32.0.0 documentation}, publisher={IBM}, url={https://www.ibm.com/docs/en/spss-statistics/32.0.0?topic=dialogs-managing-custom-in-compatibility-mode}}
@article{preacher2008asymptotic, author={Preacher, Kristopher J. and Hayes, Andrew F.}, title={{Asymptotic and resampling strategies for assessing and comparing indirect effects in multiple mediator models}}, journal={Behavior Research Methods}, year={2008}, volume={40}, number={3}, pages={879--891}, doi={10.3758/brm.40.3.879}}
@article{rohrer2022process, author={Rohrer, Julia M. and Hünermund, Paul and Arslan, Ruben C. and Elson, Malte}, title={{That’s a lot to process! Pitfalls of popular path models}}, journal={Advances in Methods and Practices in Psychological Science}, year={2022}, volume={5}, number={2}, eid={25152459221095827}, doi={10.1177/25152459221095827}}
R