1 Yol Analizinin Mantığı

Yol analizi, yapısal eşitlik modellemesinin (YEM) yalnızca gözlenen değişkenlerle çalışan biçimidir; her yapının tek bir göstergesi olduğu durumlarda kullanılır. Amaç, gözlenen değişkenler arasındaki kovaryans örüntüsünü bir modelle açıklamaktır.

Temel kavramlar:

  • Dışsal (exogenous) değişken: nedenleri modelde gösterilmeyen değişken (burada X = Bilinçli Farkındalık).
  • İçsel (endogenous) değişken: nedenleri modelde gösterilen değişken (burada iki aracı;Bilişsel Yeniden Düzenleme, Bastırma ve Y = Ruminasyon). Her içsel değişkenin bir bozukluğu (disturbance, D) vardır — yani açıklanamayan varyansı.
  • Doğrudan etki (yol): bir okun temsil ettiği etki; istatistiksel kestirimi yol katsayısıdır ve regresyon katsayısı gibi yorumlanır.
  • Dolaylı (arabulucu) etki: bir değişkenin etkisinin bir aracı (mediator) üzerinden sonraki değişkene iletilmesi. Aracı değişken hem bağımlı hem bağımsız rol oynar.

Model uyumu mantığı: Sıfır hipotezi, modelin ürettiği kovaryans matrisinin gözlenen kovaryans matrisine eşit olduğudur (Σ = Σ̂). Yol analizinde bu hipotezin reddedilmesi istenmez; yani ki-kare testinin p değerinin yüksek (anlamsız) olması iyi uyum işaretidir.

Test edilen model (X → M → Y):

  • X = Bilinçli Farkındalık (Sporcu Mindfulness Ölçeği toplam puanı)
  • M = Duygu Düzenleme — iki alt boyut toplanmadan, ayrı ayrı aracı: M1 = Bilişsel Yeniden Düzenleme (3-5-6-8), M2 = Bastırma (1-2-4-7)
  • Y = Ruminasyon (tek faktör)

Ölçeğin kuramsal yapısı iki alt boyutu toplamaya izin vermediği için, tek aracılı testler (Baron-Kenny, Sobel, mediate) her alt boyut için ayrı, lavaan paralel modeli ise ikisini aynı anda çalıştırılır.


2 Gerekli Paketler

library(readxl); library(stringr); library(dplyr); library(knitr); library(kableExtra)
library(psych);  library(lavaan);  library(semPlot); library(semptools)
library(GGally);  library(broom);   library(DT);     library(stargazer)
library(multilevel); library(bda);  library(mediation); library(gvlma)
library(rockchalk);  library(car);  library(naniar); library(outliers)
library(MVN);        library(olsrr)
library(semoutput)

3 Verinin Okunması ve Hazırlanması

veri_yolu <- "KAĞITTAN VE FORMSDAN ALINAN VERİLER (TEZ).xlsx"
ham <- read_excel(veri_yolu)

dat <- ham
names(dat)[13:27] <- paste0("M",  1:15)   # Mindfulness 1-15
names(dat)[28:33] <- paste0("R",  1:6)    # Ruminasyon 1-6
names(dat)[34:41] <- paste0("ER", 1:8)    # Duygu Düzenleme 1-8
cat("N =", nrow(dat), "\n")
## N = 689

** Veri seti N = 689 katılımcıdan oluşuyor.

3.1 Veri Temizleme

metin_to_sayi <- function(x) as.numeric(str_extract(as.character(x), "^\\s*\\d+"))

dat <- dat %>%
  mutate(across(R1:R6, metin_to_sayi)) %>%
  mutate(
    across(M1:M15, ~ ifelse(.x < 1 | .x > 6, NA, .x)),  # Mindfulness 1-6
    across(R1:R6,  ~ ifelse(.x < 1 | .x > 5, NA, .x)),  # Ruminasyon 1-5
    across(ER1:ER8,~ ifelse(.x < 1 | .x > 7, NA, .x))   # Duygu Düzenleme 1-7
  )

3.2 Ters Puanlama (yalnızca Mindfulness 6-10)

dat <- dat %>% mutate(across(paste0("M", 6:10), ~ 7 - .x))

3.3 Bileşik Puanlar ve Analiz Veri Seti

** Yol analizinde her yapı tek bir gözlenen ölçümle (göstergeyle) temsil edilir; bu yüzden maddelerin ortalamasını alıp ölçek puanları oluşturuyoruz.

ort <- function(df, cols) rowMeans(df[, cols, drop = FALSE], na.rm = TRUE)

dat <- dat %>% mutate(
  BF_toplam       = ort(., paste0("M", 1:15)),          # X (dışsal değişken)
  BF_farkindalik  = ort(., paste0("M", 1:5)),
  BF_yargilamama  = ort(., paste0("M", 6:10)),
  BF_yeniden_odak = ort(., paste0("M", 11:15)),
  M_bilissel      = ort(., paste0("ER", c(3,5,6,8))),   # M1 (içsel/arabulucu)
  M_bastirma      = ort(., paste0("ER", c(1,2,4,7))),   # M2 (içsel/arabulucu)
  RUM             = ort(., paste0("R", 1:6))            # Y (içsel değişken)
)

araci_full <- dat %>%
  transmute(X = BF_toplam, M_bilissel, M_bastirma, Y = RUM) %>%
  as.data.frame()
araci_full <- na.omit(araci_full)
cat("Analize giren tam veri (listwise) N =", nrow(araci_full), "\n")
## Analize giren tam veri (listwise) N = 689
head(araci_full)

Analize giren katılımcı sayısı yine N = 689 — yani hiçbir katılımcıda eksik veri yok.


4 Güvenirlik ve Betimsel İstatistikler

alfa <- function(cols, ad) {
  a <- psych::alpha(dat[, cols], check.keys = FALSE, warnings = FALSE)$total$raw_alpha
  data.frame(Olcek = ad, Madde = length(cols), Alpha = round(a, 3))
}
bind_rows(
  alfa(paste0("M", 1:15),        "Bilinçli Farkındalık (Toplam)"),
  alfa(paste0("ER", c(3,5,6,8)), "Bilişsel Yeniden Düzenleme"),
  alfa(paste0("ER", c(1,2,4,7)), "Bastırma"),
  alfa(paste0("R", 1:6),         "Ruminasyon")
) %>% kable(caption = "Cronbach Alfa") %>% kable_styling(full_width = FALSE)
Cronbach Alfa
Olcek Madde Alpha
Bilinçli Farkındalık (Toplam) 15 0.613
Bilişsel Yeniden Düzenleme 4 0.789
Bastırma 4 0.737
Ruminasyon 6 0.858

Elde edilen güvenirlikler: Ruminasyon α = .858 (iyi), Bilişsel Yeniden Düzenleme α = .789 (iyi), Bastırma α = .737 (kabul edilebilir) ve Bilinçli Farkındalık toplam α = .613. İlk üç ölçek güvenilirdir. Bilinçli Farkındalık toplamının α’sı .70 ölçütünün altındadır; bu, ölçeğin 15 madde ve üç farklı alt boyuttan (biri ters puanlanan “Yargılamama”) oluşan çok boyutlu yapısıyla açıklanabilir.

psych::describe(araci_full)[, c("n","mean","sd","min","max","skew","kurtosis")] %>%
  round(3) %>% kable(caption = "Betimsel İstatistikler") %>% kable_styling(full_width = FALSE)
Betimsel İstatistikler
n mean sd min max skew kurtosis
X 689 4.09 0.534 2.13 5.8 0.006 0.415
M_bilissel 689 4.89 1.218 1.00 7.0 -0.284 0.021
M_bastirma 689 4.39 1.335 1.00 7.0 -0.096 -0.398
Y 689 3.59 0.891 1.00 5.0 -0.265 -0.417
# GGally ile değişkenler arası ilişki
GGally::ggpairs(araci_full)

Ortalamalar: Bilinçli Farkındalık 4.09, Bilişsel Yeniden Düzenleme 4.89 ve Bastırma 4.39 , Ruminasyon 3.59. Tüm değişkenlerin çarpıklık değerleri −0.28 ile 0.01, basıklık değerleri −0.42 ile 0.42 arasındadır. Hepsi ±2 sınırının çok içinde olduğundan tek değişkenli normallik varsayımı karşılanmaktadır. ggpairs grafiğindeki saçılımlar da doğrusal ilişkileri desteklemektedir.


5 Eksik Veri ve Varsayım Kontrolleri

Aracılık analizi için; eksik verinin yapısı, hata bağımsızlığı, doğrusallık, eşvaryanslılık, normallik, uç değer yokluğu ve çoklu bağlantının olmaması incelenir.

any_na(araci_full)            # kayıp veri var mı?
## [1] FALSE
n_miss(araci_full)            # toplam eksik
## [1] 0
prop_miss(araci_full)         # eksik oranı
## [1] 0
miss_var_summary(araci_full)  # değişken bazında

analiz veri setinde hiç eksik veri yoktur.

model <- lm(Y ~ X + M_bilissel + M_bastirma, data = araci_full)
summary(model)
## 
## Call:
## lm(formula = Y ~ X + M_bilissel + M_bastirma, data = araci_full)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1455 -0.5229 -0.0279  0.6331  2.1259 
## 
## Coefficients:
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)   2.8181     0.2623   10.75 < 0.0000000000000002 ***
## X            -0.1091     0.0664   -1.64               0.1010    
## M_bilissel    0.1753     0.0333    5.26            0.0000002 ***
## M_bastirma    0.0819     0.0282    2.91               0.0038 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.851 on 685 degrees of freedom
## Multiple R-squared:  0.0918, Adjusted R-squared:  0.0878 
## F-statistic: 23.1 on 3 and 685 DF,  p-value: 0.0000000000000303

Tam modelde (Y ~ X + iki aracı) sabit terim 2.82 (p<.001). Yordayıcılar arasında iki aracı anlamlıyken, Bilinçli Farkındalığın (X) doğrudan katsayısı negatif ve sınırda (≈ −0.11) çıkmaktadır.

5.1 Bağımsızlık (Durbin-Watson)

durbinWatsonTest(model)
##  lag Autocorrelation D-W Statistic p-value
##    1         -0.0434          2.08    0.29
##  Alternative hypothesis: rho != 0

D-W = 2.08, p = .252. İstatistik 2’ye çok yakın ve p > .05 olduğundan hata terimleri bağımsızdır, bağımsızlık varsayımı karşılanmaktadır.

5.2 Doğrusallık ve Eşvaryanslılık

plot(model, 1)   

plot(model, 3)   

5.3 Normallik (kalıntılar ve çok değişkenli)

plot(model, 2)   # Normal Q-Q

# Çok değişkenli normallik (Mardia)
psych::mardia(araci_full, plot = FALSE)
## Call: psych::mardia(x = araci_full, plot = FALSE)
## 
## Mardia tests of multivariate skew and kurtosis
## Use describe(x) the to get univariate tests
## n.obs = 689   num.vars =  4 
## b1p =  0.98   skew =  113  with probability  <=  0.0000000000000057
##  small sample skew =  114  with probability <=  0.0000000000000043
## b2p =  27.5   kurtosis =  6.56  with probability <=  0.000000000053

Mardia testinde çok değişkenli çarpıklık istatistiği çok büyük (skew ≈ 113) ve p < .0001 çıkmıştır; yani çok değişkenli normallik SAĞLANMAMAKTADIR. Bu nedenle aşağıdaki mediate ve lavaan analizlerinde bootstrap güven aralıkları kullandık; bootstrap dağılım varsayımına ihtiyaç duymadığından, normallik ihlaline rağmen kullanılabilir.

5.4 Uç Değerler

boxplot(araci_full$X, ylab = "Bilinçli Farkındalık")

boxplot(araci_full$Y, ylab = "Ruminasyon")

z.scores <- scores(araci_full, type = "z")
round(head(z.scores), 2)
# Mahalanobis uzaklığı (çok değişkenli uç değer)
md <- mahalanobis(araci_full, center = colMeans(araci_full), cov = cov(araci_full))
alpha  <- .001
cutoff <- qchisq(p = 1 - alpha, df = ncol(araci_full))
ucdegerler <- which(md > cutoff)
ucdegerler
##   8 204 
##   8 204

Mahalanobis uzaklığı (p < .001 eşiği), 8 ve 204 numaralı olmak üzere iki satırı çok değişkenli uç değer olarak işaretledi. 689 katılımcıda yalnızca 2 gözlem olduğundan etkileri ihmal edilebilir düzeydedir. Bu iki gözlemi çıkarmadan analşize devam ettim.

5.5 Çoklu Bağlantı (Multicollinearity)

round(cor(araci_full), 2)   # korelasyon matrisi
##               X M_bilissel M_bastirma    Y
## X          1.00       0.39       0.12 0.04
## M_bilissel 0.39       1.00       0.50 0.28
## M_bastirma 0.12       0.50       1.00 0.23
## Y          0.04       0.28       0.23 1.00
ols_vif_tol(model)          # VIF ve Tolerans

Korelasyon matrisi: X–Bilişsel = .39, X–Bastırma = .12, Bilişsel–Bastırma = .50, Bilişsel–Y = .28, Bastırma–Y = .23 ve X–Y = .04. Yordayıcılar arası en yüksek korelasyon .50’dir; hepsi .80–.90 ölçütünün çok altında olduğundan çoklu bağlantı sorunu yoktur (VIF değerleri 1’e yakın beklenir). Bilinçli Farkındalık ile Ruminasyon arasındaki basit korelasyon ≈ 0’dır.


6 ARACILIK ANALİZİ — Yöntem 1: Baron-Kenny, Sobel ve mediate

Baron-Kenny adım adım mantığı; Sobel dolaylı etkinin anlamlılığını tek testle; mediate ise dolaylı etkiyi bootstrap ile (dağılım varsayımı olmadan) verir. Tek aracı varsaydıkları için her alt boyut için ayrı çalıştırılır.

6.1 Aracı = Bilişsel Yeniden Düzenleme

araci <- araci_full %>% transmute(X, M = M_bilissel, Y) %>% as.data.frame()

6.1.1 Baron-Kenny (regresyon adımları + stargazer)

  1. X→Y toplam etki, (2) X→M (a yolu), (3) M ve X birlikte → Y (b yolu ve doğrudan etki c′),
fit  <- lm(Y ~ X,     data = araci)   # 1. toplam etki (c)
fita <- lm(M ~ X,     data = araci)   # 2. yol a (X -> M)
fitb <- lm(Y ~ M + X, data = araci)   # 3. yol b ve doğrudan etki c'

stargazer(fit, fita, fitb, type = "html",
          title = "Baron-Kenny Yöntemi — Bilişsel Yeniden Düzenleme",
          digits = 2)
Baron-Kenny Yöntemi — Bilişsel Yeniden Düzenleme
Dependent variable:
Y M Y
(1) (2) (3)
M 0.22***
(0.03)
X 0.07 0.90*** -0.13*
(0.06) (0.08) (0.07)
Constant 3.29*** 1.22*** 3.02***
(0.26) (0.33) (0.25)
Observations 689 689 689
R2 0.002 0.15 0.08
Adjusted R2 0.0005 0.15 0.08
Residual Std. Error 0.89 (df = 687) 1.12 (df = 687) 0.86 (df = 686)
F Statistic 1.31 (df = 1; 687) 126.00*** (df = 1; 687) 30.10*** (df = 2; 686)
Note: p<0.1; p<0.05; p<0.01

a yolu (Model 2, X→M) = 0.90, p < .001 → anlamlı: bilinçli farkındalık, bilişsel yeniden düzenlemeyi güçlü biçimde yorduyor. b yolu (Model 3, M→Y) = 0.22, p < .001 → anlamlı. Toplam etki (Model 1, X→Y) = 0.07, anlamsız. Ancak aracı kontrol edilince doğrudan etki (Model 3, X→Y) = −0.13, p < .05 olup anlamlı ve NEGATİF hale geliyor. Burada dolaylı etki pozitif (≈ 0.90 × 0.22 = +0.20), doğrudan etki ise negatiftir. Bu, klasik aracılıktan farklı olarak baskılayıcı (suppression) aracılık** görülmektedir.

6.1.2 Sobel Testi

Dolaylı etkinin (a×b) sıfırdan farklı olup olmadığını tek z testiyle sınar.

multilevel::sobel(araci$X, araci$M, araci$Y)
## $`Mod1: Y~X`
##             Estimate Std. Error t value                             Pr(>|t|)
## (Intercept)   3.2914     0.2623   12.55 0.0000000000000000000000000000000114
## pred          0.0728     0.0636    1.14 0.2527012425422869856816987521597184
## 
## $`Mod2: Y~X+M`
##             Estimate Std. Error t value                          Pr(>|t|)
## (Intercept)    3.018     0.2544   11.86 0.0000000000000000000000000000116
## pred          -0.127     0.0665   -1.92 0.0555986687391976791561276627363
## med            0.223     0.0291    7.66 0.0000000000000616614355415956601
## 
## $`Mod3: M~X`
##             Estimate Std. Error t value                        Pr(>|t|)
## (Intercept)    1.223     0.3300    3.71 0.00022768734100848885232130925
## pred           0.897     0.0801   11.21 0.00000000000000000000000000681
## 
## $Indirect.Effect
## [1] 0.2
## 
## $SE
## [1] 0.0317
## 
## $z.value
## [1] 6.33
## 
## $N
## [1] 689
bda::mediation.test(araci$M, araci$X, araci$Y)

Sobel testinde dolaylı etki = 0.20, SE = 0.032, z ≈ 6.3 (p < .001) → dolaylı etki anlamlıdır. (

6.1.3 mediation::mediate (Bootstrap)

fitM <- lm(M ~ X,     data = araci)   # X -> M
fitY <- lm(Y ~ X + M, data = araci)   # X + M -> Y

gvlma(fitM); gvlma(fitY)              # regresyon varsayımları
## 
## Call:
## lm(formula = M ~ X, data = araci)
## 
## Coefficients:
## (Intercept)            X  
##       1.223        0.897  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = fitM) 
## 
##                     Value   p-value                   Decision
## Global Stat        24.771 0.0000559 Assumptions NOT satisfied!
## Skewness            6.559 0.0104331 Assumptions NOT satisfied!
## Kurtosis            1.935 0.1642064    Assumptions acceptable.
## Link Function      15.531 0.0000812 Assumptions NOT satisfied!
## Heteroscedasticity  0.746 0.3877562    Assumptions acceptable.
## 
## Call:
## lm(formula = Y ~ X + M, data = araci)
## 
## Coefficients:
## (Intercept)            X            M  
##       3.018       -0.127        0.223  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = fitY) 
## 
##                    Value p-value                   Decision
## Global Stat         9.26  0.0549    Assumptions acceptable.
## Skewness            6.61  0.0101 Assumptions NOT satisfied!
## Kurtosis            1.15  0.2837    Assumptions acceptable.
## Link Function       0.99  0.3197    Assumptions acceptable.
## Heteroscedasticity  0.51  0.4752    Assumptions acceptable.
set.seed(2025)
fitMed     <- mediate(fitM, fitY, treat = "X", mediator = "M")
summary(fitMed)
## 
## Causal Mediation Analysis 
## 
## Quasi-Bayesian Confidence Intervals
## 
##                Estimate 95% CI Lower 95% CI Upper             p-value    
## ACME             0.2008       0.1399       0.2682 <0.0000000000000002 ***
## ADE             -0.1280      -0.2690       0.0088               0.066 .  
## Total Effect     0.0728      -0.0480       0.2034               0.248    
## Prop. Mediated   2.2016     -18.3830      28.9852               0.248    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 689 
## 
## 
## Simulations: 1000
set.seed(2025)
fitMedBoot <- mediate(fitM, fitY, boot = TRUE, sims = 999,
                      treat = "X", mediator = "M")
summary(fitMedBoot)
## 
## Causal Mediation Analysis 
## 
## Nonparametric Bootstrap Confidence Intervals with the Percentile Method
## 
##                 Estimate 95% CI Lower 95% CI Upper             p-value    
## ACME             0.20031      0.13354      0.26947 <0.0000000000000002 ***
## ADE             -0.12746     -0.25924      0.00148               0.054 .  
## Total Effect     0.07285     -0.07189      0.20636               0.308    
## Prop. Mediated   2.74961    -29.27799     35.24470               0.308    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 689 
## 
## 
## Simulations: 999

Bootstrap sonuçları: ACME (dolaylı etki) = 0.200, %95 GA [0.134, 0.269], p < .001güçlü ve anlamlı bir aracılık. ADE (doğrudan etki) = −0.128, %95 GA [−0.259, 0.001], p = .054 → sıfırı sınırda içeren, anlamsız/negatif doğrudan etki. Toplam etki = 0.073, GA sıfırı içeriyor, p ≈ .31 → anlamsız. Bilinçli farkındalık, ruminasyona bilişsel yeniden düzenleme üzerinden anlamlı ve pozitif bir dolaylı etki göstermektedir.

6.2 Aracı = Bastırma

İki alt boyut toplanamadığı için ; her birinin aracılık rolü ayrı ayrı sınanmaktadır.

araci <- araci_full %>% transmute(X, M = M_bastirma, Y) %>% as.data.frame()

6.2.1 Baron-Kenny

fit  <- lm(Y ~ X,     data = araci)
fita <- lm(M ~ X,     data = araci)
fitb <- lm(Y ~ M + X, data = araci)
stargazer(fit, fita, fitb, type = "html",
          title = "Baron-Kenny Yöntemi — Bastırma", digits = 2)
Baron-Kenny Yöntemi — Bastırma
Dependent variable:
Y M Y
(1) (2) (3)
M 0.16***
(0.02)
X 0.07 0.30*** 0.03
(0.06) (0.09) (0.06)
Constant 3.29*** 3.16*** 2.80***
(0.26) (0.39) (0.27)
Observations 689 689 689
R2 0.002 0.01 0.06
Adjusted R2 0.0005 0.01 0.05
Residual Std. Error 0.89 (df = 687) 1.33 (df = 687) 0.87 (df = 686)
F Statistic 1.31 (df = 1; 687) 10.10*** (df = 1; 687) 20.00*** (df = 2; 686)
Note: p<0.1; p<0.05; p<0.01

a yolu (X→M) = 0.30, p < .001 → anlamlı ama Bilişsel boyuta (0.90) kıyasla çok daha zayıf. b yolu (M→Y) = 0.16, p < .001 → anlamlı. Toplam etki (X→Y) = 0.07, anlamsız ve aracı kontrol edilince doğrudan etki = 0.03, anlamsız. Burada her iki yol da pozitif ve doğrudan etki sıfıra yakın olduğundan Bastırma için “dolaylı” aracılık söz konusudur.

6.2.2 Sobel Testi

multilevel::sobel(araci$X, araci$M, araci$Y)
## $`Mod1: Y~X`
##             Estimate Std. Error t value                             Pr(>|t|)
## (Intercept)   3.2914     0.2623   12.55 0.0000000000000000000000000000000114
## pred          0.0728     0.0636    1.14 0.2527012425422869856816987521597184
## 
## $`Mod2: Y~X+M`
##             Estimate Std. Error t value                     Pr(>|t|)
## (Intercept)   2.8006     0.2673  10.478 0.00000000000000000000000625
## pred          0.0261     0.0624   0.418 0.67621861023447282779130774
## med           0.1552     0.0250   6.221 0.00000000085997785526222920
## 
## $`Mod3: M~X`
##             Estimate Std. Error t value            Pr(>|t|)
## (Intercept)    3.162     0.3905    8.10 0.00000000000000256
## pred           0.301     0.0947    3.18 0.00153554682613081
## 
## $Indirect.Effect
## [1] 0.0468
## 
## $SE
## [1] 0.0165
## 
## $z.value
## [1] 2.83
## 
## $N
## [1] 689
bda::mediation.test(araci$M, araci$X, araci$Y)

6.2.3 mediation::mediate (Bootstrap)

fitM <- lm(M ~ X,     data = araci)
fitY <- lm(Y ~ X + M, data = araci)
set.seed(2025)
fitMed     <- mediate(fitM, fitY, treat = "X", mediator = "M")
summary(fitMed)
## 
## Causal Mediation Analysis 
## 
## Quasi-Bayesian Confidence Intervals
## 
##                Estimate 95% CI Lower 95% CI Upper p-value   
## ACME             0.0473       0.0168       0.0821   0.002 **
## ADE              0.0255      -0.1024       0.1494   0.660   
## Total Effect     0.0728      -0.0485       0.2004   0.258   
## Prop. Mediated   0.4924      -5.8824       4.8702   0.256   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 689 
## 
## 
## Simulations: 1000
set.seed(2025)
fitMedBoot <- mediate(fitM, fitY, boot = TRUE, sims = 999,
                      treat = "X", mediator = "M")
summary(fitMedBoot)
## 
## Causal Mediation Analysis 
## 
## Nonparametric Bootstrap Confidence Intervals with the Percentile Method
## 
##                Estimate 95% CI Lower 95% CI Upper p-value   
## ACME             0.0468       0.0134       0.0871   0.006 **
## ADE              0.0261      -0.1078       0.1521   0.695   
## Total Effect     0.0728      -0.0719       0.2064   0.308   
## Prop. Mediated   0.6420      -6.1323       7.7858   0.310   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 689 
## 
## 
## Simulations: 999

Bootstrap sonuçları: ACME (dolaylı etki) = 0.047, %95 GA [0.013, 0.087], p = .006anlamlı, ancak Bilişsel boyutun dolaylı etkisine (0.200) göre küçük. ADE (doğrudan etki) = 0.026, p = .70** → anlamsız. Toplam etki = 0.073 → anlamsız. Sonuç: Bastırma da bilinçli farkındalık–ruminasyon ilişkisinde anlamlı ama zayıf bir aracı rol oynamaktadır; aracılığın büyük bölümü bilişsel yeniden düzenlemeden gelmektedir.


7 YOL ANALİZİ — Yöntem 2: lavaan ile Paralel Çoklu Aracılık

Neden ayrıca lavaan? Tek aracılı yöntem her boyutu yalnız ele alır. lavaan iki aracıyı aynı modelde tutarak her birinin diğeri kontrol edilerek dolaylı etkisini verir; doğrudan/dolaylı/toplam etkileri tek çerçevede bootstrap güven aralıklarıyla hesaplar. Paralel çoklu aracılık için uygundur.

Model denkleminde: ~ doğrudan etki (yol), ~~ kovaryans, := ise tanımlı (hesaplanan) parametredir (dolaylı/toplam etkiler).

yol_model <- '
  # a yolları (X -> M) : dışsal değişkenin aracılara doğrudan etkisi
  M_bilissel ~ a1*X
  M_bastirma ~ a2*X

  # b yolları (M -> Y) ve doğrudan etki c\'  (X -> Y)
  Y ~ b1*M_bilissel + b2*M_bastirma + cp*X

  # aracılar (bozuklukları) arası kovaryans
  M_bilissel ~~ M_bastirma

  # Doğrudan etki
  dir := cp

  # Dolaylı (aracılık) etkileri
  ind_bilissel := a1*b1
  ind_bastirma := a2*b2

  # Toplam dolaylı ve toplam etki
  tot_ind := (a1*b1) + (a2*b2)
  tot     := cp + (a1*b1) + (a2*b2)
'

set.seed(2025)
fsem <- sem(yol_model, data = araci_full,
            se = "bootstrap", bootstrap = 1000)
summary(fsem, standardized = TRUE, rsquare = TRUE, ci = TRUE)
## lavaan 0.6-21 ended normally after 12 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           689
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Parameter Estimates:
## 
##   Standard errors                            Bootstrap
##   Number of requested bootstrap draws             1000
##   Number of successful bootstrap draws             998
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##   M_bilissel ~                                                          
##     X         (a1)    0.897    0.095    9.450    0.000    0.716    1.089
##   M_bastirma ~                                                          
##     X         (a2)    0.301    0.107    2.822    0.005    0.090    0.505
##   Y ~                                                                   
##     M_bilissl (b1)    0.175    0.034    5.170    0.000    0.113    0.250
##     M_bastirm (b2)    0.082    0.032    2.551    0.011    0.013    0.142
##     X         (cp)   -0.109    0.071   -1.534    0.125   -0.254    0.023
##    Std.lv  Std.all
##                   
##     0.897    0.393
##                   
##     0.301    0.120
##                   
##     0.175    0.240
##     0.082    0.123
##    -0.109   -0.065
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##  .M_bilissel ~~                                                         
##    .M_bastirma        0.734    0.069   10.587    0.000    0.598    0.872
##    Std.lv  Std.all
##                   
##     0.734    0.495
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##    .M_bilissel        1.252    0.070   17.812    0.000    1.112    1.393
##    .M_bastirma        1.753    0.086   20.285    0.000    1.581    1.917
##    .Y                 0.720    0.038   18.828    0.000    0.646    0.794
##    Std.lv  Std.all
##     1.252    0.845
##     1.753    0.985
##     0.720    0.908
## 
## R-Square:
##                    Estimate
##     M_bilissel        0.155
##     M_bastirma        0.015
##     Y                 0.092
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|) ci.lower ci.upper
##     dir              -0.109    0.071   -1.534    0.125   -0.254    0.023
##     ind_bilissel      0.157    0.034    4.611    0.000    0.097    0.233
##     ind_bastirma      0.025    0.014    1.797    0.072    0.002    0.056
##     tot_ind           0.182    0.036    5.059    0.000    0.116    0.258
##     tot               0.073    0.072    1.017    0.309   -0.069    0.214
##    Std.lv  Std.all
##    -0.109   -0.065
##     0.157    0.094
##     0.025    0.015
##     0.182    0.109
##     0.073    0.044

** Model 9 parametreyle, N = 689’da sorunsuz çalıştı; test istatistiği 0.000 ve df = 0 (ancak tanımlanmış model)). Standartlaştırılmış yol katsayıları: X→Bilişsel β = .39 (p<.001), X→Bastırma β = .12 (p=.004), Bilişsel→Y β = .24 (p<.001), Bastırma→Y β = .12 (p=.011), doğrudan X→Y β = −.065 (p=.124, anlamsız). Tüm a ve b yolları anlamlı, doğrudan yol anlamsızdır.

7.1 Uyum İndeksleri ve Serbestlik Derecesi

serbestlik derecesi (sd) = gözlem sayısı − kestirilen parametre sayısı. Bu modelde:

  • Gözlenen değişken sayısı v = 4 → gözlem sayısı = v(v+1)/2 = 10
  • Kestirilen parametreler: dışsal X varyansı (1) + doğrudan etkiler a1,a2,b1,b2,cp (5) + bozukluk varyansları M_bilissel,M_bastirma,Y (3) + aracılar arası kovaryans (1) = 10
  • sd = 10 − 10 = 0

Yani model ancak tanımlanmıştır (just-identified ). Ancak tanımlanmış modelde model veriyi kusursuz yeniden ürettiği için artık kovaryans matrisi sıfırdır; ki-kare ≈ 0, CFI = 1, RMSEA = 0 tanımsal olarak çıkar. Bu bir “mükemmel uyum bulgusu” değildir — test edilecek kısıtlama olmadığı için bu değerler zorunlu olarak çıkmaktadır.

fitmeasures(fsem, fit.measures = c("chisq","df","pvalue",
                                   "cfi","tli","rmsea",
                                   "rmsea.ci.lower","rmsea.ci.upper","srmr"))
##          chisq             df         pvalue            cfi            tli 
##              0              0             NA              1              1 
##          rmsea rmsea.ci.lower rmsea.ci.upper           srmr 
##              0              0              0              0

chisq = 0, df = 0, CFI = 1, TLI = 1, RMSEA = 0, SRMR = 0 (p-değeri NA). Yukarıda sd = 10 − 10 = 0 hesabıyla gösterildiği üzere model tam tanımlanmıştır; bu değerler model iyi olduğu için değil, test edilecek kısıtlama olmadığı için tanımsal olarak** bu hâli alır.

7.2 Standartlaştırılmış Çözüm ve Parametreler

standardizedsolution(fsem)
parameterEstimates(fsem, standardized = TRUE)
inspect(fsem, "rsquare")
## M_bilissel M_bastirma          Y 
##      0.155      0.015      0.092

** R² değerleri: Bilişsel Yeniden Düzenleme = .155 (bilinçli farkındalık, bu boyutun varyansının %15.5’ini açıklıyor), Bastırma = .015 (yalnızca %1.5 — yani bilinçli farkındalık bastırmayı çok az açıklıyor) ve Ruminasyon = .092 (model, ruminasyon varyansının %9.2’sini açıklıyor). Bu, X’in Bilişsel boyutla güçlü, Bastırma ile çok zayıf ilişkili olduğunu doğrular.

7.3 Dolaylı/Toplam Etki Tablosu (Bootstrap %95 GA)

parameterEstimates(fsem, boot.ci.type = "bca.simple") %>%
  dplyr::filter(op == ":=") %>%
  dplyr::select(Etki = label, Tahmin = est, SH = se, z, p = pvalue,
                "%95 Alt" = ci.lower, "%95 Üst" = ci.upper) %>%
  kable(digits = 3,
        caption = "Dolaylı / Toplam Etkiler (Bootstrap BCa %95 GA)") %>%
  kable_styling(full_width = FALSE)
Dolaylı / Toplam Etkiler (Bootstrap BCa %95 GA)
Etki Tahmin SH z p %95 Alt %95 Üst
dir -0.109 0.071 -1.53 0.125 -0.254 0.026
ind_bilissel 0.157 0.034 4.61 0.000 0.099 0.235
ind_bastirma 0.025 0.014 1.80 0.072 0.006 0.063
tot_ind 0.182 0.036 5.06 0.000 0.118 0.263
tot 0.073 0.072 1.02 0.309 -0.055 0.232
  • Bilişsel Yeniden Düzenleme üzerinden dolaylı etki = 0.157, %95 GA [0.099, 0.235] → GA sıfırı içermiyor → anlamlı (en güçlü aracılık yolu).
  • Bastırma üzerinden dolaylı etki = 0.025, %95 GA [0.006, 0.063] → GA sıfırı içermiyor → anlamlı (zayıf). Not: z-temelli p = .072 olsa da bootstrap’ta ölçüt güven aralığıdır; GA sıfırı içermediğinden etki anlamlı kabul edilir.
  • Toplam dolaylı etki = 0.182, %95 GA [0.118, 0.263]anlamlı.
  • Doğrudan etki (dir) = −0.109, %95 GA [−0.254, 0.026] → GA sıfırı içeriyor → anlamsız.
  • Toplam etki (tot) ≈ 0.073anlamsız.

Genel değerlendirme: Doğrudan etki anlamsız + dolaylı etkiler anlamlı → duygu düzenleme, bilinçli farkındalık ile ruminasyon ilişkisinde aracı rol üstlenmektedir; üstelik basit X–Y korelasyonu ≈ 0 olduğu için bu bir “dolaylı aracılık” durumudur. Ayrıca doğrudan etki (−0.109) ile toplam dolaylı etki (+0.182) zıt işaretli olduğundan, bu aynı zamanda bir baskılama (suppression) aracılık söz konusudur: pozitif dolaylı yol ile negatif doğrudan eğilim birbirini götürdüğü için toplam etki sıfıra yakındır. Bu nedenle “bilinçli farkındalık ile ruminasyon arasında ilişki yok” demek yanlış olur; ilişki büyük ölçüde bilişsel yeniden düzenleme aracılığıyla işlemektedir.

Bilişsel yeniden düzenleme → ruminasyon yolu pozitiftir (β = .24). Yani bu örneklemde daha fazla bilişsel yeniden düzenleme daha fazla ruminasyonla birlikte gidiyor.

7.4 Standartlaştırılmış Yol Katsayıları Tablosu

standardizedsolution(fsem) %>%
  dplyr::filter(op == "~") %>%
  dplyr::select('Bağımlı Değişken' = lhs, 'Yordayıcı' = rhs,
                B = est.std, SE = se, Z = z, 'p' = pvalue) %>%
  knitr::kable(digits = 3, caption = "Standartlaştırılmış Yol Katsayıları")
Standartlaştırılmış Yol Katsayıları
Bağımlı Değişken Yordayıcı B SE Z p
M_bilissel X 0.393 0.038 10.23 0.000
M_bastirma X 0.120 0.042 2.85 0.004
Y M_bilissel 0.240 0.046 5.24 0.000
Y M_bastirma 0.123 0.048 2.55 0.011
Y X -0.065 0.042 -1.54 0.124

Standartlaştırılmış yol katsayıları: X→Bilişsel = .393, X→Bastırma = .120, Bilişsel→Y = .240, Bastırma→Y = .123* ve doğrudan X→Y = −.065 (p = .124, anlamsız). bilinçli farkındalığın en güçlü etkisi bilişsel yeniden düzenleme üzerinedir; her iki aracı da ruminasyonu pozitif yordamakta; doğrudan etki ise anlamsızdır.

7.5 Yol Diyagramı

m <- matrix(c(
  NA,            "M_bilissel",  NA,
  "X",            NA,           "Y",
  NA,            "M_bastirma",  NA
), byrow = TRUE, nrow = 3, ncol = 3)

p_pa <- semPaths(fsem, whatLabels = "std",
                 layout = m, curvePivot = TRUE,
                 style = "ram", residuals = FALSE, intercepts = FALSE,
                 sizeMan = 11, edge.label.cex = 1.3,
                 nCharNodes = 0, nCharEdges = 0)

p_pa_2 <- semptools::mark_sig(p_pa, fsem)
plot(p_pa_2)

Diyagramda X (solda) → iki aracı (ortada) → Y (sağda) akışı görülür. Oklar üzerindeki standartlaştırılmış katsayılar: X→Bilişsel .39, X→Bastırma .12, Bilişsel→Y .24, Bastırma→Y .12 (hepsi yıldızlı = anlamlı); X→Y doğrudan oku −.07 (yıldızsız = anlamsız). İki aracı arasındaki çift yönlü eğri ok, aralarındaki kovaryansı (.50) gösterir. Şema, aracılığın esas olarak üst yol (bilişsel yeniden düzenleme) üzerinden işlediğini ve doğrudan yolun zayıf/anlamsız olduğunu görsel olarak özetler.

7.6 Modifikasyon İndeksleri

modindices(fsem, sort = TRUE)
resid(fsem, type = "normalized")

sessionInfo()
## R version 4.5.2 (2025-10-31)
## Platform: aarch64-apple-darwin20
## Running under: macOS Sequoia 15.4.1
## 
## Matrix products: default
## BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
## LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## time zone: Europe/Istanbul
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] semoutput_1.0.2   olsrr_0.6.1       MVN_6.3           outliers_0.15    
##  [5] naniar_1.1.0      car_3.1-5         carData_3.0-6     rockchalk_1.8.157
##  [9] gvlma_1.0.0.3     mediation_4.5.1   sandwich_3.1-1    mvtnorm_1.3-3    
## [13] Matrix_1.7-4      bda_19.1.3        BI_1.2.0          boot_1.3-32      
## [17] multilevel_2.8    MASS_7.3-65       nlme_3.1-168      stargazer_5.2.3  
## [21] DT_0.34.0         broom_1.0.13      GGally_2.4.0      ggplot2_4.0.2    
## [25] semptools_0.3.2   semPlot_1.1.8     lavaan_0.6-21     psych_2.6.1      
## [29] kableExtra_1.4.0  knitr_1.51        dplyr_1.2.0       stringr_1.6.0    
## [33] readxl_1.4.5     
## 
## loaded via a namespace (and not attached):
##   [1] RColorBrewer_1.1-3    shape_1.4.6.1         rstudioapi_0.17.1    
##   [4] jsonlite_2.0.0        magrittr_2.0.4        jomo_2.7-6           
##   [7] farver_2.1.2          nloptr_2.2.1          rmarkdown_2.30       
##  [10] vctrs_0.7.1           minqa_1.2.8           base64enc_0.1-3      
##  [13] energy_1.7-12         htmltools_0.5.9       cellranger_1.1.0     
##  [16] Formula_1.2-5         mitml_0.4-5           sass_0.4.10          
##  [19] bslib_0.9.0           htmlwidgets_1.6.4     plyr_1.8.9           
##  [22] plotly_4.12.0         zoo_1.8-15            cachem_1.1.0         
##  [25] igraph_2.2.1          iterators_1.0.14      lifecycle_1.0.5      
##  [28] pkgconfig_2.0.3       R6_2.6.1              fastmap_1.2.0        
##  [31] rbibutils_2.4.1       digest_0.6.39         OpenMx_2.22.10       
##  [34] fdrtool_1.2.18        colorspace_2.1-2      textshaping_1.0.4    
##  [37] Hmisc_5.2-4           labeling_0.4.3        httr_1.4.8           
##  [40] abind_1.4-8           compiler_4.5.2        gsl_2.1-9            
##  [43] withr_3.0.2           glasso_1.11           htmlTable_2.4.3      
##  [46] S7_0.2.1              backports_1.5.0       viridis_0.6.5        
##  [49] ggstats_0.12.0        pan_1.9               corpcor_1.6.10       
##  [52] gtools_3.9.5          tools_4.5.2           pbivnorm_0.6.0       
##  [55] foreign_0.8-90        otel_0.2.0            zip_2.3.3            
##  [58] visdat_0.6.0          goftest_1.2-3         nnet_7.3-20          
##  [61] glue_1.8.0            quadprog_1.5-8        lisrelToR_0.3        
##  [64] grid_4.5.2            checkmate_2.3.3       cluster_2.1.8.1      
##  [67] reshape2_1.4.5        generics_0.1.4        lpSolve_5.6.23       
##  [70] gtable_0.3.6          nortest_1.0-4         tidyr_1.3.1          
##  [73] data.table_1.18.2.1   xml2_1.5.1            sem_3.1-16           
##  [76] foreach_1.5.2         pillar_1.11.1         splines_4.5.2        
##  [79] moments_0.14.1        lattice_0.22-7        survival_3.8-3       
##  [82] kutils_1.73           tidyselect_1.2.1      pbapply_1.7-4        
##  [85] reformulas_0.4.4      gridExtra_2.3         svglite_2.2.2        
##  [88] stats4_4.5.2          xfun_0.55             qgraph_1.9.8         
##  [91] arm_1.14-4            stringi_1.8.7         lazyeval_0.2.2       
##  [94] yaml_2.3.12           codetools_0.2-20      evaluate_1.0.5       
##  [97] mi_1.2                tibble_3.3.0          cli_3.6.6            
## [100] RcppParallel_5.1.11-1 rpart_4.1.24          xtable_1.8-4         
## [103] systemfonts_1.3.1     Rdpack_2.6.6          jquerylib_0.1.4      
## [106] Rcpp_1.1.0            coda_0.19-4.1         png_0.1-8            
## [109] XML_3.99-0.22         parallel_4.5.2        jpeg_0.1-11          
## [112] glmnet_4.1-10         lme4_1.1-38           viridisLite_0.4.2    
## [115] scales_1.4.0          openxlsx_4.2.8.1      purrr_1.2.2          
## [118] rlang_1.2.0           mnormt_2.1.1          mice_3.19.0

7.7 ÖĞRENME GÜNLÜĞÜ

Bu çalışmada yüksek lisans öğrencimin tezi için toplamaya devam ettiği verilerinin bir kısmını kullanarak, Bilinçli farkındalık, ruminasyon ve duygu düzenleme arasındaki ilişkiyi inceledim. Verilerin normal dağılmama durumunda bootstrap kullanmak gerektiğini daha önce başka bir çalışmada da okumuştum, bu anlizde de uygulamasını yapmış oldum. Analizde bilinçli farkındalık ile ruminasyon arasında neredeyse hiç korelasyon yokken, duygu düzenleme üzerinden dolaylı etkiler anlamlı çıktı. Yani “korelasyon yoksa ilişki de yoktur” demenin yanlış olabileceğini öğrendim. Son olarak, model ancak tanımlanmış olduğunda (sd = 0) uyum indekslerinin zaten mükemmel çıktığını, bu yüzden onlara bakıp “modelim çok iyi” dememem gerektiğini öğrendim.