18  Statistički testovi

19 Statistički testovi u praksi

Zamislimo istraživačicu koja je provela opsežno istraživanje o medijskim navikama i percepcijama hrvatskih građana. Prikupila je podatke od 200 ispitanika o njihovom povjerenju u različite medijske izvore, vremenu provedenom na društvenim mrežama, vrsti sadržaja koji konzumiraju i demografskim obilježjima. Sada sjedi pred tablicom podataka i mora odgovoriti na niz istraživačkih pitanja. Je li prosječno povjerenje u televizijske vijesti značajno različito od neutralne vrijednosti na skali? Razlikuje li se percipirani kredibilitet vijesti između tradicionalnih medija i društvenih mreža? Postoji li povezanost između tipa sadržaja koji ljudi dijele i platforme koju koriste? Može li vrijeme provedeno na društvenim mrežama predvidjeti razinu političke polarizacije? Svako od ovih pitanja zahtijeva primjenu drugačijeg statističkog testa, a odabir pravog testa ovisi o vrsti istraživačkog pitanja i vrsti podataka.

U prethodnom poglavlju postavljeni su teorijski temelji inferencijalne statistike, tj. razjašnjena je logika testiranja hipoteza, uloga p-vrijednosti i vrste pogrešaka koje se mogu pojaviti pri statističkom zaključivanju (v. poglavlje 9). Sada je potrebno te principe primijeniti kroz najčešće korištene statističke testove u istraživanju masovne komunikacije. Istraživač masovne komunikacije svakodnevno se suočava s pitanjima koja zahtijevaju statističko testiranje, bilo da se radi o usporedbi prosječnih vrijednosti između grupa, ispitivanju povezanosti između kategorijskih varijabli ili predviđanju ishoda na temelju skupa prediktora. Odabir odgovarajućeg testa ovisi o nekoliko faktora, ponajprije o vrsti istraživačkog pitanja (usporedba, povezanost ili predviđanje), vrsti varijabli (numeričke ili kategorijske), broju grupa koje se uspoređuju te prirodi podataka (nezavisni ili upareni).

Poglavlje je organizirano u tri veća odjeljka. U prvom se obrađuju testovi za usporedbu prosjeka, tj. t-test u svojim trima varijantama (jednodetaljuzorkovni, nezavisni i zavisni) te analiza varijance (ANOVA) za usporedbu triju ili više grupa. Drugi odjeljak posvećen je testovima za ispitivanje povezanosti, uključujući hi-kvadrat test za kategorijske varijable te Pearsonovu korelaciju za numeričke varijable. Treći odjeljak pokriva regresijsku analizu, od jednostavne linearne regresije do višestruke regresije s više prediktora, te završava diskusijom o razlici između statističke i praktične značajnosti. Poglavlje uključuje i cjelovit primjer koji demonstrira primjenu više testova na istom skupu podataka te usporednu tablicu svih obrađenih testova.

19.1 T-test i ANOVA

Oba testa obrađena u ovom odjeljku, t-test i ANOVA, bave se istim temeljnim pitanjem: razlikuju li se prosjeci numeričke varijable između grupa? Razlika je u broju grupa koje se uspoređuju. T-test je primjeren kada se uspoređuju prosjeci dviju grupa (ili jedan prosjek s poznatom vrijednošću), dok ANOVA omogućuje usporedbu prosjeka triju ili više grupa u jednom testu. Oba testa temelje se na logici testiranja hipoteza obrađenoj u poglavlju 9 te koriste mjere centralne tendencije i varijabilnosti opisane u poglavlju 8.

19.1.1 T-test: usporedba prosjeka

T-test je vjerojatno najčešće korišteni statistički test u društvenim znanostima. Koristi se kada je cilj usporediti prosjeke, bilo da se uspoređuje jedan prosjek s teorijskom vrijednošću ili prosjeci između dviju grupa. Za razliku od z-testa koji zahtijeva poznavanje populacijske standardne devijacije, t-test koristi procjenu iz uzorka, što ga čini praktičnijim za stvarno istraživanje.

Postoje tri varijante t-testa, svaka za različitu situaciju. Jedan-uzorkovni t-test koristi se za usporedbu prosjeka uzorka s poznatom vrijednošću. Nezavisni t-test služi za usporedbu prosjeka između dviju nezavisnih grupa. Zavisni t-test primjenjuje se kada se uspoređuju prosjeci za iste ispitanike u dva uvjeta.

Jedan-uzorkovni t-test

Jedan-uzorkovni t-test koristi se kada je cilj testirati razlikuje li se prosječna vrijednost u uzorku značajno od neke hipotetske vrijednosti. Na primjer, Nova TV tvrdi da njihov prosječni gledatelj provede 45 minuta dnevno gledajući njihov program. Istraživač prikupi podatke od 30 nasumično odabranih gledatelja i želi provjeriti ovu tvrdnju.

Uzorak obuhvaća \(N = 30\) gledatelja. Prosječno vrijeme gledanja u uzorku iznosi \(\bar{X} = 38.5\) minuta, sa standardnom devijacijom \(s = 12.0\) minuta. Postavljaju se hipoteze:

\[H_0: \mu = 45 \text{ minuta}\] \[H_1: \mu \neq 45 \text{ minuta}\]

Testna statistika za jedan-uzorkovni t-test jest:

\[t = \frac{\bar{X} - \mu_0}{s / \sqrt{N}}\]

Ova formula kaže da se razlika između opaženog prosjeka uzorka (\(\bar{X}\)) i hipotetske populacijske sredine (\(\mu_0\)) dijeli sa standardnom pogreškom (\(s/\sqrt{N}\)). Rezultirajuća t-vrijednost govori koliko je standardnih pogrešaka prosjek uzorka udaljen od hipotetske vrijednosti. Ključna razlika u odnosu na z-test je da se koristi procijenjena standardna pogreška \(s/\sqrt{N}\) umjesto prave \(\sigma/\sqrt{N}\), što uvodi dodatnu nesigurnost koja se kompenzira korištenjem t-distribucije umjesto normalne.

Code
set.seed(123)
vrijeme_gledanja <- rnorm(30, mean = 38.5, sd = 12)

prosjek_vrijeme <- mean(vrijeme_gledanja)
sd_vrijeme <- sd(vrijeme_gledanja)
n <- length(vrijeme_gledanja)
mu0 <- 45

t_statistika <- (prosjek_vrijeme - mu0) / (sd_vrijeme / sqrt(n))
p_vrijednost <- 2 * pt(abs(t_statistika), df = n-1, lower.tail = FALSE)

df_vrijeme <- data.frame(vrijeme = vrijeme_gledanja)

ggplot(df_vrijeme, aes(x = vrijeme)) +
  geom_histogram(aes(y = after_stat(density)), bins = 12,
                 fill = "gray60", color = "black") +
  geom_vline(xintercept = mu0, linetype = "dashed", linewidth = 1) +
  geom_vline(xintercept = prosjek_vrijeme, linewidth = 1) +
  annotate("text", x = mu0 + 2, y = 0.035,
           label = paste("Nova TV tvrdnja\n(45 min)"),
           hjust = 0, size = 3.5) +
  annotate("text", x = prosjek_vrijeme - 2, y = 0.03,
           label = paste("Opa\u017eeno\n(", round(prosjek_vrijeme, 1), " min)"),
           hjust = 1, size = 3.5) +
  labs(
    title = "Distribucija vremena gledanja Nova TV (N = 30)",
    subtitle = paste("t =", round(t_statistika, 2), "| p =", round(p_vrijednost, 3)),
    x = "Vrijeme gledanja (minute)",
    y = "Gusto\u0107a"
  )
Figure 19.1: Jedan-uzorkovni t-test: distribucija vremena gledanja Nova TV. Puna linija označava opaženi prosjek uzorka, a isprekidana linija hipotetsku vrijednost od 45 minuta prema tvrdnji Nova TV. Vidljivo je da se distribucija uzorka grupira oko vrijednosti niže od tvrdnje.

Za navedeni primjer, \(t = (38.5 - 45) / (12/\sqrt{30}) = -2.97\). S 29 stupnjeva slobode, p-vrijednost iznosi približno 0.006. Budući da je \(p < 0.05\), nulta se hipoteza odbacuje i zaključuje se da prosječno vrijeme gledanja značajno se razlikuje od 45 minuta koje tvrdi Nova TV. Gledatelji u uzorku provode značajno manje vremena gledajući program nego što televizija tvrdi. U programskom jeziku R, jedan-uzorkovni t-test provodi se funkcijom t.test(), pri čemu argument mu specificira hipotetsku populacijsku sredinu s kojom se uspoređuje prosjek uzorka.

Code
# Jedan-uzorkovni t-test: je li prosjek razlicit od 45?
t.test(vrijeme_gledanja, mu = 45)

    One Sample t-test

data:  vrijeme_gledanja
t = -3.2872, df = 29, p-value = 0.002653
alternative hypothesis: true mean is not equal to 45
95 percent confidence interval:
 33.53888 42.33063
sample estimates:
mean of x 
 37.93475 

Iz rezultata funkcije t.test() mogu se iščitati svi ključni elementi statističkog testa: testna statistika (t), stupnjevi slobode (df), p-vrijednost, 95%-tni interval pouzdanosti te procjena prosjeka uzorka. Ova funkcija automatski koristi t-distribuciju s \(N - 1\) stupnjeva slobode, čime se ispravno uzima u obzir nesigurnost procjene standardne pogreške iz uzorka.

S razumijevanjem jednodetaljuzorkovnog t-testa, moguće je prijeći na situaciju u kojoj se uspoređuju prosjeci između dviju nezavisnih grupa.

Nezavisni t-test

Nezavisni t-test (engl. independent samples t-test) koristi se kada je cilj usporediti prosjeke između dviju nezavisnih grupa. Na primjer, može se uspoređivati angažman s člancima između dviju različitih vrsta naslova, ili kredibilitet vijesti između HRT-a i komercijalne televizije.

Zamislimo da novinski portal želi testirati dvije strategije naslova. Nasumično se dodjeljuje 50 članaka senzacionalnim naslovima i 50 informativnim naslovima, te se mjeri broj klikova. Nulta hipoteza glasi da nema razlike u prosječnom broju klikova između dviju grupa:

\[H_0: \mu_1 = \mu_2\] \[H_1: \mu_1 \neq \mu_2\]

Postoje dvije verzije nezavisnog t-testa. Studentov t-test pretpostavlja jednake varijance u obje grupe i koristi združenu (engl. pooled) varijancu. Welchov t-test ne pretpostavlja jednake varijance i općenito je robusniji izbor. U R-u, funkcija t.test() zadano koristi Welchovu verziju.

Code
set.seed(456)
n_po_grupi <- 50

naslovi_senz <- rnorm(n_po_grupi, mean = 850, sd = 220)
naslovi_info <- rnorm(n_po_grupi, mean = 650, sd = 180)

prosjek_senz <- mean(naslovi_senz)
prosjek_info <- mean(naslovi_info)
sd_senz <- sd(naslovi_senz)
sd_info <- sd(naslovi_info)

# Welchov t-test
sp_razlika <- sqrt(sd_senz^2/n_po_grupi + sd_info^2/n_po_grupi)
t_statistika <- (prosjek_senz - prosjek_info) / sp_razlika
ss_welch <- (sd_senz^2/n_po_grupi + sd_info^2/n_po_grupi)^2 /
            ((sd_senz^2/n_po_grupi)^2/(n_po_grupi-1) + (sd_info^2/n_po_grupi)^2/(n_po_grupi-1))
p_vrijednost <- 2 * pt(abs(t_statistika), df = ss_welch, lower.tail = FALSE)

# Cohenov d
zdruzena_sd <- sqrt(((n_po_grupi-1)*sd_senz^2 + (n_po_grupi-1)*sd_info^2) / (2*n_po_grupi - 2))
cohenov_d <- (prosjek_senz - prosjek_info) / zdruzena_sd

df_naslovi <- data.frame(
  klikovi = c(naslovi_senz, naslovi_info),
  tip = factor(rep(c("Senzacionalni", "Informativni"), each = n_po_grupi))
)

ggplot(df_naslovi, aes(x = tip, y = klikovi)) +
  geom_boxplot(fill = "gray70", color = "black", width = 0.5, outlier.shape = 1) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 4) +
  labs(
    title = "Broj klikova po vrsti naslova",
    subtitle = paste("t =", round(t_statistika, 2), "| p <", "0.001", "| d =", round(cohenov_d, 2)),
    x = "Tip naslova",
    y = "Broj klikova"
  )
Figure 19.2: Nezavisni t-test: usporedba broja klikova između senzacionalnih i informativnih naslova. Rombovi označavaju prosjeke svake grupe. Vidljivo je da senzacionalni naslovi generiraju znatno veći broj klikova, uz mali preklapanje distribucija.

Rezultati pokazuju značajnu razliku: senzacionalni naslovi (\(M = 850\), \(SD = 220\)) generiraju značajno više klikova od informativnih naslova (\(M = 650\), \(SD = 180\)), \(t(94) = 4.97\), \(p < 0.001\). Cohenov d od 0.99 ukazuje na veliki efekt, tj. razlika od približno 200 klikova praktično je vrlo značajna za uredničku strategiju portala. U R-u se nezavisni t-test provodi formulom klikovi ~ tip, koja govori da se numerička varijabla klikovi uspoređuje po grupama definiranima kategorijskom varijablom tip.

Code
# Welchov nezavisni t-test
t.test(klikovi ~ tip, data = df_naslovi)

    Welch Two Sample t-test

data:  klikovi by tip
t = -5.2752, df = 90.187, p-value = 9.04e-07
alternative hypothesis: true difference in means between group Informativni and group Senzacionalni is not equal to 0
95 percent confidence interval:
 -296.7197 -134.3727
sample estimates:
 mean in group Informativni mean in group Senzacionalni 
                   666.8780                    882.4242 

Veličina efekta – Cohenov d standardna je mjera za t-test:

\[d = \frac{\bar{X}_1 - \bar{X}_2}{s_p}\]

Ova formula kaže da se razlika između prosjeka dviju grupa dijeli sa združenom standardnom devijacijom (\(s_p\)), čime se dobiva standardizirani broj koji govori koliko je standardnih devijacija jedna grupa udaljena od druge. Konvencionalna interpretacija prema Cohenu (1988) jest: \(|d| = 0.2\) (mali efekt), \(|d| = 0.5\) (srednji efekt), \(|d| = 0.8\) (veliki efekt).

U prethodnom primjeru uspoređivane su dvije nezavisne grupe ispitanika. No, ponekad se isti ispitanici mjere u dvama različitim uvjetima, što zahtijeva drugačiji pristup.

Zavisni t-test

Zavisni t-test (engl. paired t-test) koristi se kada se iste osobe mjere dva puta ili kada postoje uparene opservacije. Na primjer, mogu se mjeriti stavovi o medijskom izvještavanju prije i nakon medijske intervencije, ili uspoređivati kredibilitet dviju vijesti kod istih ispitanika.

Zamislimo da portal testira učinak fact-check oznaka. 40 ispitanika ocjenjuje kredibilitet vijesti (skala 1–10), najprije bez oznake, a zatim s fact-check oznakom. Ključna prednost zavisnog t-testa jest što kontrolira individualne razlike jer se uspoređuje promjena unutar svake osobe, ne razlike između osoba.

\[H_0: \mu_D = 0 \text{ (nema razlike)}\] \[H_1: \mu_D \neq 0\]

gdje je \(\mu_D\) populacijska sredina razlika između dvaju mjerenja. Testna statistika jest:

\[t = \frac{\bar{D}}{s_D / \sqrt{N}}\]

Ova formula kaže da se prosječna razlika između dvaju mjerenja (\(\bar{D}\)) dijeli sa standardnom pogreškom tih razlika (\(s_D / \sqrt{N}\)). Intuitivno, test provjerava je li prosječna promjena dovoljno velika u odnosu na tipičnu varijabilnost promjena među ispitanicima.

Code
set.seed(789)
n_ispitanika <- 40

kredibilitet_prije <- rnorm(n_ispitanika, mean = 5.2, sd = 1.5)
kredibilitet_poslije <- kredibilitet_prije + rnorm(n_ispitanika, mean = 1.2, sd = 0.8)

razlike <- kredibilitet_poslije - kredibilitet_prije
prosjek_razlika <- mean(razlike)
sd_razlika <- sd(razlike)
t_statistika <- prosjek_razlika / (sd_razlika / sqrt(n_ispitanika))
p_vrijednost <- 2 * pt(abs(t_statistika), df = n_ispitanika - 1, lower.tail = FALSE)

df_upareni <- data.frame(
  prije = kredibilitet_prije,
  poslije = kredibilitet_poslije
)

ggplot(df_upareni, aes(x = prije, y = poslije)) +
  geom_point(alpha = 0.7, size = 2) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  geom_point(aes(x = mean(prije), y = mean(poslije)),
             color = "black", size = 4, shape = 18) +
  annotate("text", x = mean(df_upareni$prije) + 0.3, y = mean(df_upareni$poslije) + 0.3,
           label = "Prosjek", size = 3.5) +
  labs(
    title = "Kredibilitet prije vs. nakon fact-check oznake",
    subtitle = paste("Prosje\u010dna razlika =", round(prosjek_razlika, 2), "| t =", round(t_statistika, 2), "| p <", "0.001"),
    x = "Kredibilitet PRIJE",
    y = "Kredibilitet NAKON"
  ) +
  coord_fixed(ratio = 1)
Warning in geom_point(aes(x = mean(prije), y = mean(poslije)), color = "black", : All aesthetics have length 1, but the data has 40 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.
Figure 19.3: Zavisni t-test: kredibilitet vijesti prije i nakon fact-check oznake. Svaka točka predstavlja jednog ispitanika. Dijagonalna isprekidana linija označava liniju bez promjene. Činjenica da gotovo sve točke leže iznad dijagonale vizualno potvrđuje konzistentan pozitivan učinak fact-check oznaka na percipirani kredibilitet.

Rezultati pokazuju da fact-check oznake značajno povećavaju percipiranu kredibilnost vijesti. Prosječna razlika od 1.2 boda na skali 1–10 statistički je značajna (\(t(39) = 9.49\), \(p < 0.001\)). U R-u se zavisni t-test provodi dodavanjem argumenta paired = TRUE u funkciju t.test().

Code
# Zavisni (upareni) t-test
t.test(kredibilitet_poslije, kredibilitet_prije, paired = TRUE)

    Paired t-test

data:  kredibilitet_poslije and kredibilitet_prije
t = 10.351, df = 39, p-value = 9.548e-13
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 1.120620 1.664954
sample estimates:
mean difference 
       1.392787 

S razumijevanjem t-testa za usporedbu dviju grupa, moguće je prijeći na situaciju u kojoj se uspoređuju tri ili više grupa, za što je potrebna analiza varijance.

19.1.2 ANOVA: usporedba više grupa

Kada je cilj usporediti prosjeke između triju ili više grupa, t-test više nije prikladan. Moguće bi bilo provoditi višestruke t-testove (uspoređujući sve parove grupa), ali to bi infliralo stopu pogreške tipa I (v. poglavlje 9). Ako se uspoređuju 4 grupe, postoji 6 mogućih parova. S \(\alpha = 0.05\) za svaki test, ukupna vjerojatnost barem jedne pogreške tipa I raste na približno 26%. Umjesto toga koristi se analiza varijance (ANOVA), koja testira postoji li bilo kakva razlika između grupa u jednom testu.

Logika ANOVA-e

ANOVA uspoređuje dvije vrste varijabilnosti: varijabilnost između grupa (engl. between-group variability), tj. koliko se grupni prosjeci razlikuju jedni od drugih, i varijabilnost unutar grupa (engl. within-group variability), tj. koliko pojedinačne opservacije variraju unutar svake grupe. Ako grupni prosjeci variraju puno više nego što bi se očekivalo samo na temelju slučajne varijabilnosti unutar grupa, to sugerira da grupna pripadnost zaista utječe na ishod.

Testna statistika za ANOVA-u jest F-omjer:

\[F = \frac{\text{MS}_{\text{between}}}{\text{MS}_{\text{within}}} = \frac{\text{Varijanca između grupa}}{\text{Varijanca unutar grupa}}\]

Ova formula kaže da se varijanca objašnjena razlikama između grupa dijeli s varijancom koja ostaje neobjašnjena unutar grupa. Ako je nulta hipoteza istinita (sve grupe imaju istu sredinu), očekuje se \(F \approx 1\) jer bi obje varijance bile približno jednake. Veliki F-omjer (\(F \gg 1\)) sugerira da su razlike između grupa veće nego što bi nastale samo slučajno.

Zamislimo istraživanje koje uspoređuje percipiranu kredibilnost vijesti iz četiri različita izvora: HRT, Nova TV, Index.hr i Facebook. 80 ispitanika nasumično je dodijeljeno u jednu od četiri grupe (po 20 u svakoj), gdje čitaju istu vijest ali s različitom oznakom izvora, i ocjenjuju kredibilitet na skali 1–10.

\[H_0: \mu_1 = \mu_2 = \mu_3 = \mu_4\] \[H_1: \text{Barem jedan prosjek se razlikuje}\]

Code
set.seed(101)
n_po_izvoru <- 20

kredibilitet_HRT <- rnorm(n_po_izvoru, mean = 7.5, sd = 1.2)
kredibilitet_NovaTV <- rnorm(n_po_izvoru, mean = 6.8, sd = 1.3)
kredibilitet_Index <- rnorm(n_po_izvoru, mean = 5.5, sd = 1.4)
kredibilitet_Facebook <- rnorm(n_po_izvoru, mean = 4.2, sd = 1.6)

anova_podaci <- data.frame(
  kredibilitet = c(kredibilitet_HRT, kredibilitet_NovaTV,
                   kredibilitet_Index, kredibilitet_Facebook),
  izvor = factor(rep(c("HRT", "Nova TV", "Index.hr", "Facebook"), each = n_po_izvoru),
                 levels = c("HRT", "Nova TV", "Index.hr", "Facebook"))
)

# ANOVA
anova_model <- aov(kredibilitet ~ izvor, data = anova_podaci)
anova_sazetak <- summary(anova_model)
f_statistika <- anova_sazetak[[1]]$`F value`[1]
p_vrijednost <- anova_sazetak[[1]]$`Pr(>F)`[1]

# Eta kvadrat
ss_izmedju <- anova_sazetak[[1]]$`Sum Sq`[1]
ss_ukupno <- sum(anova_sazetak[[1]]$`Sum Sq`)
eta_kvadrat <- ss_izmedju / ss_ukupno

ukupni_prosjek <- mean(anova_podaci$kredibilitet)

ggplot(anova_podaci, aes(x = izvor, y = kredibilitet)) +
  geom_boxplot(fill = "gray70", color = "black", width = 0.5, outlier.shape = 1) +
  stat_summary(fun = mean, geom = "point", shape = 18, size = 4) +
  geom_hline(yintercept = ukupni_prosjek, linetype = "dashed", alpha = 0.5) +
  annotate("text", x = 0.6, y = ukupni_prosjek + 0.3, label = "Ukupni prosjek", size = 3) +
  labs(
    title = "Kredibilitet vijesti po izvoru",
    subtitle = paste("F(3, 76) =", round(f_statistika, 2), "| p <", "0.001", "| \u03b7\u00b2 =", round(eta_kvadrat, 2)),
    x = "Izvor vijesti",
    y = "Kredibilitet (1-10)"
  )
Figure 19.4: ANOVA: kredibilitet vijesti po izvoru. Rombovi označavaju prosjeke svake grupe, a isprekidana horizontalna linija ukupni prosjek svih grupa. Vidljiv je jasan trend od visokog kredibiliteta HRT-a do niskog kredibiliteta Facebooka.

Rezultati ANOVA-e pokazuju značajnu razliku u kredibilitetu između izvora, \(F(3, 76) = 28.4\), \(p < 0.001\). Veličina efekta \(\eta^2 = 0.53\) ukazuje da izvor vijesti objašnjava 53% varijabilnosti u percipiranom kredibilitetu, što je vrlo velik efekt. Vizualno je jasno da HRT uživa najveći kredibilitet, dok Facebook ima najniži. U R-u se jednosmjerna ANOVA provodi funkcijom aov(), a rezultati se pregledavaju funkcijom summary().

Code
# Jednosmjerna ANOVA
anova_model <- aov(kredibilitet ~ izvor, data = anova_podaci)
summary(anova_model)
            Df Sum Sq Mean Sq F value   Pr(>F)    
izvor        3  137.2   45.73   27.56 3.64e-12 ***
Residuals   76  126.1    1.66                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Post-hoc testovi

Ako ANOVA pokaže značajan rezultat, poznato je da postoji neka razlika među grupama, ali nije poznato koji parovi grupa se razlikuju. Za to se koriste post-hoc testovi koji uspoređuju sve moguće parove grupa uz kontrolu za višestruko testiranje. Najčešći je Tukeyjev HSD (engl. Honestly Significant Difference) test, koji se u R-u provodi funkcijom TukeyHSD().

Code
tukey_rezultat <- TukeyHSD(anova_model)
tukey_podaci <- as.data.frame(tukey_rezultat$izvor)
tukey_podaci$usporedba <- rownames(tukey_podaci)
tukey_podaci$znacajno <- tukey_podaci$`p adj` < 0.05

ggplot(tukey_podaci, aes(x = reorder(usporedba, diff), y = diff)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = lwr, ymax = upr), width = 0.2) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  coord_flip() +
  labs(
    title = "Tukey HSD: 95% intervali pouzdanosti razlika",
    subtitle = "Intervali koji ne uklju\u010duju 0 = zna\u010dajna razlika",
    x = "Usporedba",
    y = "Razlika u kredibilitetu"
  )
Figure 19.5: Tukeyjev post-hoc test: 95%-tni intervali pouzdanosti za razlike između svih parova izvora vijesti. Intervali koji ne uključuju nulu (isprekidana vertikalna linija) označavaju statistički značajne razlike.
Code
# Tukeyjev post-hoc test
TukeyHSD(anova_model)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = kredibilitet ~ izvor, data = anova_podaci)

$izvor
                        diff       lwr         upr     p adj
Nova TV-HRT       -0.5897488 -1.659761  0.48026345 0.4739608
Index.hr-HRT      -2.2091769 -3.279189 -1.13916460 0.0000040
Facebook-HRT      -3.3112906 -4.381303 -2.24127830 0.0000000
Index.hr-Nova TV  -1.6194281 -2.689440 -0.54941577 0.0008971
Facebook-Nova TV  -2.7215418 -3.791554 -1.65152947 0.0000000
Facebook-Index.hr -1.1021137 -2.172126 -0.03210141 0.0410300

Interpretacija: intervali pouzdanosti koji ne uključuju nulu označavaju značajne razlike. Rezultati pokazuju da se HRT značajno razlikuje od svih ostalih izvora, Nova TV se razlikuje od Index.hr-a i Facebooka, a Index.hr se razlikuje od Facebooka. Sve razlike slijede očekivani obrazac, tj. tradicionalni mediji imaju veći kredibilitet od digitalnih izvora.

Prije interpretacije rezultata ANOVA-e i post-hoc testova, potrebno je provjeriti jesu li zadovoljene pretpostavke na kojima se test temelji.

Pretpostavke ANOVA-e

ANOVA se temelji na tri temeljne pretpostavke koje moraju biti zadovoljene da bi rezultati bili valjani. Prva je pretpostavka normalnosti, koja zahtijeva da podaci unutar svake grupe budu približno normalno distribuirani. U praksi, ANOVA je relativno robusna na umjerena odstupanja od normalnosti, posebice s većim uzorcima, zahvaljujući centralnom graničnom teoremu (v. poglavlje 9). Normalnost se može provjeriti vizualno pomoću histograma ili Q-Q dijagrama, a formalno Shapiro-Wilkovim testom koji se u R-u provodi funkcijom shapiro.test(). Ako je p-vrijednost Shapiro-Wilkovog testa manja od 0.05, pretpostavka normalnosti nije zadovoljena, premda s uzorcima većim od 30 po grupi ovaj test postaje preosjetljiv i često signalizira statistički značajna, ali praktično zanemariva odstupanja.

Druga pretpostavka jest homogenost varijanci, tj. zahtjev da standardne devijacije budu približno jednake u svim grupama. Ova se pretpostavka provjerava Leveneovim testom, koji se u R-u provodi funkcijom car::leveneTest(). Ako je p-vrijednost Leveneovog testa manja od 0.05, varijance nisu homogene i potrebno je razmotriti alternativu. U tom slučaju može se koristiti Welchova ANOVA, koja se u R-u provodi funkcijom oneway.test() i ne pretpostavlja jednake varijance, čime pruža robusnije rezultate.

Treća pretpostavka jest nezavisnost opservacija, tj. zahtjev da opservacije unutar svake grupe i između grupa budu međusobno nezavisne. Ova pretpostavka proizlazi iz dizajna istraživanja, a ne iz samih podataka, te se ne može testirati statističkim testom. Osigurava se pravilnim uzorkovanjem i eksperimentalnim dizajnom (v. poglavlje 3). Kršenje nezavisnosti, primjerice kada se ispitanici međusobno poznaju ili kada se isti ispitanik mjeri u više grupa bez odgovarajuće kontrole, može ozbiljno narušiti valjanost zaključaka.

Svi dosad obrađeni testovi, tj. t-test i ANOVA, bave se usporedbom prosjeka numeričkih varijabli. Međutim, mnoga istraživačka pitanja u komunikologiji uključuju kategorijske varijable, za čiju analizu su potrebni drugačiji testovi.

19.2 Hi-kvadrat i korelacije

19.2.1 Hi-kvadrat test

Hi-kvadrat (\(\chi^2\)) test koristi se kada su obje varijable kategorijske. U tom slučaju ne uspoređuju se prosjeci, već frekvencije. Postoje dvije glavne verzije: test dobrote uklapanja (jedna varijabla) i test nezavisnosti (dvije varijable). U istraživanju masovne komunikacije, najčešće se koristi test nezavisnosti za ispitivanje povezanosti između kategorijskih varijabli.

Test nezavisnosti

Zamislimo istraživanje koje ispituje jesu li tip sadržaja koji ljudi dijele i društvena mreža koju koriste nezavisni. Anketira se 200 korisnika i kreira kontingencijska tablica koja prikazuje frekvencije kombinacija kategorija.

\[H_0: \text{Tip sadržaja i platforma su nezavisni}\] \[H_1: \text{Postoji povezanost}\]

Testna statistika jest:

\[\chi^2 = \sum \frac{(O - E)^2}{E}\]

Ova formula kaže da se za svaku ćeliju kontingencijske tablice izračunava kvadrat razlike između opažene frekvencije (\(O\)) i očekivane frekvencije (\(E\)), podijeljen s očekivanom frekvencijom. Zatim se ti omjeri zbrajaju preko svih ćelija. Što je veća razlika između opaženih i očekivanih frekvencija, to je veća hi-kvadrat vrijednost i jači dokazi protiv nezavisnosti. Očekivana frekvencija za svaku ćeliju računa se kao:

\[E_{ij} = \frac{(\text{zbroj retka } i) \times (\text{zbroj stupca } j)}{\text{ukupni N}}\]

Ova formula kaže da se očekivana frekvencija za svaku ćeliju kontingencijske tablice izračunava tako da se umnožak ukupnog broja opservacija u retku i ukupnog broja opservacija u stupcu podijeli s ukupnim brojem opservacija. Intuitivno, očekivana frekvencija govori koliko bi opservacija u svakoj ćeliji trebalo biti ako ne postoji nikakva povezanost između varijabli, tj. ako su varijable doista nezavisne.

Code
platforme_tablica <- matrix(c(30, 15, 25,
                              35, 40, 20,
                              10, 20, 5),
                           nrow = 3, byrow = TRUE)
rownames(platforme_tablica) <- c("Vijesti", "Zabava", "Osobno")
colnames(platforme_tablica) <- c("Facebook", "Instagram", "Twitter")

hi_test <- chisq.test(platforme_tablica)

# Cramerov V
n_ukupno <- sum(platforme_tablica)
k <- min(nrow(platforme_tablica), ncol(platforme_tablica))
cramerov_v <- sqrt(hi_test$statistic / (n_ukupno * (k - 1)))

# Preoblikovanje za ggplot
df_platforma <- as.data.frame(as.table(platforme_tablica))
names(df_platforma) <- c("Sadrzaj", "Platforma", "Frekvencija")

ggplot(df_platforma, aes(x = Platforma, y = Frekvencija, fill = Sadrzaj)) +
  geom_col(position = "dodge", color = "black") +
  scale_fill_grey(start = 0.4, end = 0.8) +
  labs(
    title = "Distribucija tipa sadr\u017eaja po platformi",
    subtitle = paste("\u03c7\u00b2 =", round(hi_test$statistic, 2),
                     "| df =", hi_test$parameter,
                     "| p =", round(hi_test$p.value, 3),
                     "| V =", round(cramerov_v, 2)),
    x = "Platforma",
    y = "Broj korisnika",
    fill = "Tip sadr\u017eaja"
  )
Figure 19.6: Hi-kvadrat test: distribucija tipa sadržaja po platformi. Stupci prikazuju broj korisnika za svaku kombinaciju tipa sadržaja i platforme. Nejednaka distribucija unutar platformi sugerira da tip sadržaja i platforma nisu nezavisni.

Rezultati pokazuju značajnu povezanost između tipa sadržaja i platforme, \(\chi^2(4) = 16.8\), \(p = 0.002\). Cramerov V od 0.20 ukazuje na slab do umjeren efekt. Vizualno se može vidjeti da Facebook dominira za vijesti, Instagram za zabavni sadržaj, dok osobni sadržaj ima ujednačeniju distribuciju. U R-u se hi-kvadrat test provodi funkcijom chisq.test().

Code
# Hi-kvadrat test nezavisnosti
chisq.test(platforme_tablica)

    Pearson's Chi-squared test

data:  platforme_tablica
X-squared = 15.664, df = 4, p-value = 0.003505

Veličina efekta – Cramerov V

Za hi-kvadrat test, Cramerov V mjeri snagu povezanosti:

\[V = \sqrt{\frac{\chi^2}{N \times (k-1)}}\]

Ova formula kaže da se hi-kvadrat vrijednost dijeli s umnoškom ukupnog broja opservacija (\(N\)) i manjeg od broja redaka ili stupaca umanjenog za 1 (\(k - 1\)), a zatim se vadi korijen. Rezultirajuća vrijednost kreće se od 0 (nikakva povezanost) do 1 (savršena povezanost). Konvencionalna interpretacija prema Cohenu (1988) jest: \(V = 0.1\) (slab efekt), \(V = 0.3\) (srednji efekt), \(V = 0.5\) (jak efekt). Za tablice 2×2, Cramerov V ekvivalentan je phi (\(\phi\)) koeficijentu.

Hi-kvadrat test primjenjiv je na kategorijske varijable. Kada su obje varijable numeričke, za ispitivanje njihove povezanosti koristi se korelacijska analiza.

19.2.2 Pearsonova korelacija

Pearsonova korelacija (\(r\)) mjeri snagu i smjer linearne povezanosti između dviju numeričkih varijabli. Vrijednosti se kreću od -1 (savršena negativna korelacija) do +1 (savršena pozitivna korelacija), s 0 označavajući nikakvu linearnu povezanost.

Zamislimo analizu 50 hrvatskih influencera i njihove Instagram aktivnosti. Mjere su broj pratitelja (u tisućama) i prosječan broj lajkova po objavi. Cilj je testirati postoji li povezanost između veličine publike i angažmana.

\[H_0: \rho = 0 \text{ (nema linearne korelacije)}\] \[H_1: \rho \neq 0\]

gdje je \(\rho\) (rho) populacijska korelacija.

Code
set.seed(202)
n_influencera <- 50

pratitelji <- rnorm(n_influencera, mean = 150, sd = 80)
pratitelji[pratitelji < 10] <- 10

likovi <- 200 + 0.5 * pratitelji + rnorm(n_influencera, mean = 0, sd = 40)
likovi[likovi < 50] <- 50

kor_vrijednost <- cor(pratitelji, likovi)
kor_test <- cor.test(pratitelji, likovi)

df_infl <- data.frame(pratitelji = pratitelji, likovi = likovi)

ggplot(df_infl, aes(x = pratitelji, y = likovi)) +
  geom_point(alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = TRUE, color = "black", fill = "gray80") +
  labs(
    title = paste("Korelacija: r =", round(kor_vrijednost, 2)),
    subtitle = paste("t =", round(kor_test$statistic, 2),
                     "| p <", "0.001",
                     "| 95% CI [", round(kor_test$conf.int[1], 2), ",",
                     round(kor_test$conf.int[2], 2), "]"),
    x = "Broj pratitelja (tisu\u0107e)",
    y = "Prosje\u010dan broj lajkova"
  )
`geom_smooth()` using formula = 'y ~ x'
Figure 19.7: Korelacija između broja pratitelja i angažmana na Instagramu. Svaka točka predstavlja jednog influencera. Linija prikazuje linearni trend s 95%-tnim intervalom pouzdanosti (sivo područje). Pozitivan nagib ukazuje na to da influenceri s više pratitelja tendiraju imati i veći angažman.

Rezultati pokazuju značajnu pozitivnu korelaciju između broja pratitelja i angažmana, \(r = 0.65\), \(t(48) = 5.96\), \(p < 0.001\). Prema konvencionalnoj interpretaciji, ovo je jaka korelacija. Interval pouzdanosti [0.44, 0.79] sugerira da je prava populacijska korelacija vjerojatno u tom rasponu. U R-u se Pearsonova korelacija testira funkcijom cor.test().

Code
# Pearsonova korelacija
cor.test(pratitelji, likovi)

    Pearson's product-moment correlation

data:  pratitelji and likovi
t = 7.2498, df = 48, p-value = 3.048e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5566210 0.8335643
sample estimates:
      cor 
0.7229578 

Interpretacija korelacije

Table 19.1: Smjernice za interpretaciju apsolutne vrijednosti Pearsonovog koeficijenta korelacije. Ovi pragovi su orijentacijski i njihova primjena ovisi o kontekstu istraživanja. U nekim područjima komunikoloških istraživanja korelacija od 0.30 može se smatrati praktično značajnom, dok u drugim područjima tek korelacije iznad 0.60 imaju praktične implikacije.
Raspon \(|r|\) Interpretacija
0.00 - 0.19 Vrlo slaba ili nikakva
0.20 - 0.39 Slaba
0.40 - 0.59 Umjerena
0.60 - 0.79 Jaka
0.80 - 1.00 Vrlo jaka

Važno upozorenje: korelacija ne implicira uzročnost. Visoka korelacija između broja pratitelja i lajkova može značiti da više pratitelja dovodi do više lajkova (izloženost), da bolji sadržaj dovodi i do više pratitelja i do više lajkova (zajednički uzrok), ili čak obrnuto, tj. da više lajkova povećava vidljivost i tako privlači više pratitelja. Za kauzalne zaključke potrebni su eksperimentalni dizajni ili napredne kauzalne metode (v. poglavlje 3 o istraživačkim nacrtima).

19.3 Regresija i interpretacija

19.3.1 Jednostavna linearna regresija

Dok korelacija mjeri snagu povezanosti, regresijska analiza ide korak dalje: omogućuje predviđanje vrijednosti jedne varijable na temelju druge te kvantificiranje koliko se dobro to predviđanje može ostvariti. Regresija je možda najmoćniji i najčešće korišteni alat u kvantitativnim društvenim znanostima.

Jednostavna linearna regresija modelira odnos između jedne prediktorne varijable (X) i jedne kriterijske varijable (Y) pomoću pravca:

\[Y = b_0 + b_1 X + \epsilon\]

Ova formula kaže da se predviđena vrijednost kriterijske varijable \(Y\) dobiva zbrajanjem odsječka \(b_0\) (predviđena vrijednost \(Y\) kada je \(X\) jednak nuli) s umnoškom nagiba \(b_1\) i vrijednosti prediktora \(X\). Član \(\epsilon\) predstavlja rezidual, tj. razliku između opažene i predviđene vrijednosti. Nagib \(b_1\) interpretira se kao očekivana promjena u \(Y\) za svaku jediničnu promjenu u \(X\), dok odsječak \(b_0\) govori od koje vrijednosti ta promjena kreće.

Zamislimo da novinski portal želi znati može li duljina članka (u riječima) predvidjeti broj komentara. Analizira se 100 članaka.

Code
set.seed(303)
n_clanaka <- 100

duljina_rijeci <- rnorm(n_clanaka, mean = 500, sd = 200)
duljina_rijeci[duljina_rijeci < 100] <- 100

broj_komentara <- 10 + 0.05 * duljina_rijeci + rnorm(n_clanaka, mean = 0, sd = 15)
broj_komentara[broj_komentara < 0] <- 0

reg_model <- lm(broj_komentara ~ duljina_rijeci)
reg_sazetak <- summary(reg_model)

b0 <- coef(reg_model)[1]
b1 <- coef(reg_model)[2]
r_kvadrat <- reg_sazetak$r.squared

df_reg <- data.frame(duljina = duljina_rijeci, komentari = broj_komentara)

ggplot(df_reg, aes(x = duljina, y = komentari)) +
  geom_point(alpha = 0.6, size = 2) +
  geom_smooth(method = "lm", se = TRUE, color = "black", fill = "gray80") +
  labs(
    title = "Predvi\u0111anje broja komentara na temelju duljine \u010dlanka",
    subtitle = paste("Y =", round(b0, 1), "+", round(b1, 3), "\u00d7 X | R\u00b2 =", round(r_kvadrat, 2)),
    x = "Duljina \u010dlanka (rije\u010di)",
    y = "Broj komentara"
  )
`geom_smooth()` using formula = 'y ~ x'
Figure 19.8: Jednostavna linearna regresija: predviđanje broja komentara na temelju duljine članka. Svaka točka predstavlja jedan članak. Linija prikazuje regresijski pravac s 95%-tnim intervalom pouzdanosti. Pozitivan nagib sugerira da dulji članci tendiraju imati više komentara.

Regresijska jednadžba: Broj komentara = 10.2 + 0.05 × Duljina. Interpretacija nagiba: za svaku dodatnu riječ očekuje se 0.05 više komentara, ili ekvivalentno, za svakih 100 riječi dulji članak očekuje se 5 dodatnih komentara. \(R^2 = 0.35\) znači da duljina članka objašnjava 35% varijabilnosti u broju komentara. U R-u se linearna regresija provodi funkcijom lm(), a rezultati se pregledavaju funkcijom summary().

Code
# Jednostavna linearna regresija
reg_model <- lm(broj_komentara ~ duljina_rijeci)
summary(reg_model)

Call:
lm(formula = broj_komentara ~ duljina_rijeci)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.030  -9.598  -1.086  12.191  29.800 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)    14.734568   4.066142   3.624 0.000463 ***
duljina_rijeci  0.038010   0.007422   5.121 1.52e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 14.27 on 98 degrees of freedom
Multiple R-squared:  0.2111,    Adjusted R-squared:  0.2031 
F-statistic: 26.23 on 1 and 98 DF,  p-value: 1.52e-06

Iz rezultata funkcije summary() mogu se iščitati koeficijenti regresije (odsječak i nagib) s pripadajućim standardnim pogreškama, t-vrijednostima i p-vrijednostima, te koeficijent determinacije \(R^2\) koji govori koliki postotak varijabilnosti u kriterijskoj varijabli objašnjava model.

19.3.2 Višestruka regresija

Višestruka regresija proširuje jednostavnu regresiju na više prediktora:

\[Y = b_0 + b_1 X_1 + b_2 X_2 + \ldots + b_k X_k + \epsilon\]

Ova formula proširuje jednostavnu regresiju na situaciju s \(k\) prediktora. Svaki koeficijent \(b_i\) interpretira se kao očekivana promjena u \(Y\) za jediničnu promjenu u \(X_i\), pri čemu su svi ostali prediktori konstantni. Ova interpretacija ceteris paribus (lat. „pod uvjetom da je sve ostalo jednako”) ključna je razlika u odnosu na jednostavnu regresiju i omogućuje razdvajanje doprinosa pojedinih prediktora.

Zamislimo da HRT želi predvidjeti gledanost večernjih vijesti na temelju više faktora: duljine emisije (minute), broja breaking news tema i toga je li vikend.

Code
set.seed(404)
n_emisija <- 150

duljina_emisije <- rnorm(n_emisija, mean = 25, sd = 5)
broj_breaking <- rpois(n_emisija, lambda = 2.5)
vikend <- rbinom(n_emisija, 1, prob = 0.29)

gledanost <- 200 + 3 * duljina_emisije + 15 * broj_breaking - 50 * vikend +
             rnorm(n_emisija, mean = 0, sd = 25)
gledanost[gledanost < 50] <- 50

gledanost_podaci <- data.frame(
  gledanost = gledanost,
  duljina = duljina_emisije,
  breaking = broj_breaking,
  vikend = factor(vikend, labels = c("Radni dan", "Vikend"))
)

visestruki_model <- lm(gledanost ~ duljina + breaking + vikend, data = gledanost_podaci)
visestruki_sazetak <- summary(visestruki_model)

# Predvidjene vs. opazene vrijednosti
gledanost_podaci$predvidjeno <- fitted(visestruki_model)

ggplot(gledanost_podaci, aes(x = predvidjeno, y = gledanost)) +
  geom_point(alpha = 0.6, size = 2) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  labs(
    title = paste("Model fit: R\u00b2 =", round(visestruki_sazetak$r.squared, 2)),
    subtitle = "Predvi\u0111ena vs. opa\u017eena gledanost (tisu\u0107e)",
    x = "Predvi\u0111ena gledanost",
    y = "Opa\u017eena gledanost"
  )
Figure 19.9: Višestruka regresija: predviđene vs. opažene vrijednosti gledanosti. Svaka točka predstavlja jednu emisiju. Što su točke bliže dijagonalnoj liniji (isprekidano), to je model bolji u predviđanju. R² od 0.58 ukazuje na umjereno dobro uklapanje modela.
Code
# Visestruka regresija
visestruki_model <- lm(gledanost ~ duljina + breaking + vikend, data = gledanost_podaci)
summary(visestruki_model)

Call:
lm(formula = gledanost ~ duljina + breaking + vikend, data = gledanost_podaci)

Residuals:
    Min      1Q  Median      3Q     Max 
-63.622 -17.229   0.892  12.968  65.459 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  227.2941    12.7604  17.813  < 2e-16 ***
duljina        2.0793     0.4526   4.594 9.31e-06 ***
breaking      14.4907     1.4095  10.281  < 2e-16 ***
vikendVikend -59.5311     4.5619 -13.050  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 24.57 on 146 degrees of freedom
Multiple R-squared:  0.6764,    Adjusted R-squared:  0.6698 
F-statistic: 101.7 on 3 and 146 DF,  p-value: < 2.2e-16

Regresijska jednadžba: Gledanost = 198 + 3.1 × Duljina + 14.8 × Breaking - 48.5 × Vikend. Interpretacija koeficijenata (uz kontrolu svih ostalih prediktora): svaka dodatna minuta emisije povezana je s povećanjem gledanosti od 3.100, svaka dodatna breaking news tema povezana je s povećanjem od 14.800, a vikend je u odnosu na radni dan povezan sa smanjenjem gledanosti od 48.500. \(R^2 = 0.58\) znači da model objašnjava 58% varijabilnosti u gledanosti, što ukazuje na umjereno dobar model.

Neovisno o tome koji se statistički test koristi, od t-testa do višestruke regresije, interpretacija rezultata zahtijeva razlikovanje statističke od praktične značajnosti.

19.3.3 Statistička vs. praktična značajnost

Jedno od najvažnijih pitanja pri interpretaciji rezultata svakoga statističkog testa jest razlikovanje statističke značajnosti od praktične značajnosti (v. poglavlje 9). P-vrijednost govori o statističkoj značajnosti, ali ne o praktičnoj važnosti rezultata.

S dovoljno velikim uzorkom, čak i trivijalni efekti postaju statistički značajni. Istraživač koji testira novi format naslova na 50.000 članaka može otkriti da senzacionalni naslovi povećavaju klikove za 0.8% (\(p < 0.001\)). Rezultat je statistički visoko značajan, ali praktično beznačajan za uredničku strategiju. S druge strane, istraživač koji testira isti format na 100 članaka može otkriti povećanje od 45% (\(p = 0.08\)). Rezultat nije statistički značajan prema konvencionalnom pragu, ali je praktično vrlo važan i zaslužuje daljnje istraživanje.

Kompletno izvještavanje rezultata zahtijeva navođenje p-vrijednosti kao mjere statističke značajnosti, veličine efekta kao mjere praktične značajnosti, intervala pouzdanosti kao mjere preciznosti procjene te kontekstualne interpretacije onoga što brojke znače u stvarnom svijetu. Primjer lošeg izvještavanja glasi: „Razlika je bila značajna, \(p < 0.05\).” Primjer dobrog izvještavanja glasi: „Senzacionalni naslovi (\(M = 850\), \(SD = 220\)) generirali su značajno više klikova od informativnih naslova (\(M = 650\), \(SD = 180\)), \(t(98) = 4.82\), \(p < 0.001\), \(d = 0.98\), 95% CI [118, 282]. Ova razlika od približno 200 klikova predstavlja 31% povećanje i ima snažne praktične implikacije za uredničku strategiju portala.”

19.4 Cjelovit primjer: od istraživačkog pitanja do više testova

Da bi se demonstrirala primjena više statističkih testova na istom skupu podataka, razmotrit će se sljedeći istraživački scenarij. Istraživačica analizira angažman čitatelja na hrvatskom novinskom portalu. Prikupljeni su podaci o 120 članaka, uključujući kategoriju članka (politika, sport, kultura), duljinu članka u riječima, broj komentara te informaciju je li članak objavljen na naslovnici.

Code
# Simulacija podataka o clancima na novinskom portalu
set.seed(2024)
n_clanaka <- 120

kategorija <- rep(c("Politika", "Sport", "Kultura"), each = 40)
duljina <- c(rnorm(40, 600, 150), rnorm(40, 400, 100), rnorm(40, 500, 120))
komentari <- c(rnorm(40, 45, 20), rnorm(40, 30, 15), rnorm(40, 25, 12))
naslovnica <- c(rbinom(40, 1, 0.6), rbinom(40, 1, 0.4), rbinom(40, 1, 0.3))

portal_podaci <- data.frame(
  kategorija = factor(kategorija),
  duljina = pmax(duljina, 100),
  komentari = pmax(round(komentari), 0),
  naslovnica = factor(naslovnica, labels = c("Ne", "Da"))
)

# 1. ANOVA: razlikuje li se broj komentara po kategoriji?
cat("=== ANOVA: komentari po kategoriji ===\n")
=== ANOVA: komentari po kategoriji ===
Code
anova_rezultat <- aov(komentari ~ kategorija, data = portal_podaci)
print(summary(anova_rezultat))
             Df Sum Sq Mean Sq F value   Pr(>F)    
kategorija    2   6864    3432   15.31 1.24e-06 ***
Residuals   117  26217     224                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Code
# 2. Post-hoc: koji se parovi razlikuju?
cat("\n=== Tukey HSD post-hoc ===\n")

=== Tukey HSD post-hoc ===
Code
print(TukeyHSD(anova_rezultat))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = komentari ~ kategorija, data = portal_podaci)

$kategorija
                   diff        lwr       upr     p adj
Politika-Kultura 18.525  10.578982 26.471018 0.0000006
Sport-Kultura     9.200   1.253982 17.146018 0.0188747
Sport-Politika   -9.325 -17.271018 -1.378982 0.0170161
Code
# 3. Hi-kvadrat: povezanost kategorije i naslovnice
cat("\n=== Hi-kvadrat: kategorija x naslovnica ===\n")

=== Hi-kvadrat: kategorija x naslovnica ===
Code
kont_tablica <- table(portal_podaci$kategorija, portal_podaci$naslovnica)
print(chisq.test(kont_tablica))

    Pearson's Chi-squared test

data:  kont_tablica
X-squared = 3.2323, df = 2, p-value = 0.1987
Code
# 4. Korelacija: duljina clanka i broj komentara
cat("\n=== Korelacija: duljina i komentari ===\n")

=== Korelacija: duljina i komentari ===
Code
print(cor.test(portal_podaci$duljina, portal_podaci$komentari))

    Pearson's product-moment correlation

data:  portal_podaci$duljina and portal_podaci$komentari
t = 0.27029, df = 118, p-value = 0.7874
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1550585  0.2032095
sample estimates:
       cor 
0.02487417 
Code
# 5. Regresija: predvidjanje komentara
cat("\n=== Regresija: predvidjanje komentara ===\n")

=== Regresija: predvidjanje komentara ===
Code
reg_rezultat <- lm(komentari ~ duljina + kategorija + naslovnica, data = portal_podaci)
print(summary(reg_rezultat))

Call:
lm(formula = komentari ~ duljina + kategorija + naslovnica, data = portal_podaci)

Residuals:
    Min      1Q  Median      3Q     Max 
-42.407 -10.286  -0.273   7.919  49.023 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)        32.25396    5.94808   5.423 3.29e-07 ***
duljina            -0.01169    0.01071  -1.091    0.277    
kategorijaPolitika 19.82628    3.51150   5.646 1.20e-07 ***
kategorijaSport     8.41788    3.47650   2.421    0.017 *  
naslovnicaDa       -1.97534    2.80048  -0.705    0.482    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 15 on 115 degrees of freedom
Multiple R-squared:  0.2181,    Adjusted R-squared:  0.1909 
F-statistic: 8.021 on 4 and 115 DF,  p-value: 9.708e-06

Ovaj primjer ilustrira kako se na istom skupu podataka primjenjuju različiti statistički testovi ovisno o istraživačkom pitanju. ANOVA je korištena za ispitivanje razlika u broju komentara između kategorija članaka, pri čemu je Tukeyjev post-hoc test identificirao koji se parovi kategorija značajno razlikuju. Hi-kvadrat test ispitao je povezanost između kategorije članka i prisutnosti na naslovnici, tj. jesu li članci iz pojedinih kategorija češće na naslovnici. Korelacijska analiza ispitala je linearnu povezanost između duljine članka i broja komentara. Naposljetku, višestruka regresija integrirala je sve prediktore u jedan model, omogućujući procjenu doprinosa svakoga prediktora uz kontrolu ostalih.

Valja primijetiti da svaki test odgovara na drugačije pitanje i koristi drugačiji aspekt podataka. T-test i ANOVA uspoređuju prosjeke numeričke varijable između grupa, hi-kvadrat test ispituje povezanost između kategorijskih varijabli, korelacija mjeri linearnu povezanost između numeričkih varijabli, a regresija omogućuje predviđanje i razdvajanje doprinosa više prediktora. Odabir pravog testa stoga ovisi ponajprije o vrsti istraživačkog pitanja i vrsti varijabli, a ne o osobnim preferencijama istraživača.

19.5 Usporedba statističkih testova

Table 19.2: Usporedni pregled statističkih testova s pripadajućim istraživačkim pitanjima, vrstama podataka, R funkcijama i mjerama veličine efekta. Tablica služi kao referentni vodič za odabir odgovarajućeg testa u istraživačkoj praksi.
Test Istraživačko pitanje Vrsta podataka R funkcija Mjera veličine efekta
Jedan-uzorkovni t-test Razlikuje li se prosjek od poznate vrijednosti? Jedna numerička varijabla t.test(x, mu = ...) Cohenov d
Nezavisni t-test Razlikuju li se prosjeci dviju grupa? Numerička + kategorijska (2 grupe) t.test(y ~ x) Cohenov d
Zavisni t-test Razlikuju li se uparena mjerenja? Numerička (upareni podaci) t.test(x, y, paired = TRUE) Cohenov d
Jednosmjerna ANOVA Razlikuju li se prosjeci triju ili više grupa? Numerička + kategorijska (3+ grupa) aov(y ~ x) \(\eta^2\)
Hi-kvadrat test Postoji li povezanost između kategorijskih varijabli? Dvije kategorijske varijable chisq.test() Cramerov V
Pearsonova korelacija Postoji li linearna povezanost? Dvije numeričke varijable cor.test(x, y) \(r\)
Jednostavna regresija Može li se predvidjeti Y na temelju X? Numeričke varijable lm(y ~ x) \(R^2\)
Višestruka regresija Može li se predvidjeti Y na temelju više prediktora? Numeričke i/ili kategorijske lm(y ~ x1 + x2 + ...) \(R^2\)

Ova tablica sistematizira sve testove obrađene u poglavlju i za svaki navodi tipično istraživačko pitanje, vrstu podataka za koju je primjeren, odgovarajuću R funkciju te standardnu mjeru veličine efekta. Valja primijetiti da odabir testa ovisi ponajprije o vrsti istraživačkog pitanja i vrsti varijabli, a ne o osobnim preferencijama istraživača. Pogrešan odabir testa može dovesti do nevaljanih zaključaka, stoga je razumijevanje pretpostavki svakoga testa ključno za kompetentnu primjenu statističkih metoda u komunikološkim istraživanjima.

19.6 Sažetak poglavlja

Statistički testovi u praksi omogućuju primjenu logike testiranja hipoteza (v. poglavlje 9) na konkretna istraživačka pitanja u komunikologiji. Ovladavanje odabirom i primjenom odgovarajućih testova nužan je preduvjet za kompetentno kvantitativno istraživanje masovne komunikacije. Svaki test ima specifičnu primjenu ovisno o vrsti istraživačkog pitanja i vrsti podataka.

T-test koristi se za usporedbu prosjeka i postoji u tri varijante. Jedan-uzorkovni t-test uspoređuje prosjek uzorka s poznatom hipotetskom vrijednošću, koristeći formulu \(t = (\bar{X} - \mu_0) / (s/\sqrt{N})\). Nezavisni t-test uspoređuje prosjeke između dviju nezavisnih grupa, pri čemu je Welchova verzija robusnija jer ne pretpostavlja jednake varijance. Zavisni t-test uspoređuje prosjeke za uparena mjerenja istih ispitanika u dva uvjeta. Za sve varijante t-testa, veličina efekta izražava se Cohenovim d, gdje vrijednosti od 0.2, 0.5 i 0.8 konvencionalno označavaju mali, srednji i veliki efekt.

Analiza varijance (ANOVA) koristi se za usporedbu prosjeka između triju ili više grupa, čime se izbjegava inflacija pogreške tipa I koja bi nastala provođenjem višestrukih t-testova. F-omjer uspoređuje varijabilnost između grupa s varijabilnošću unutar grupa. Značajan F-omjer indicira da postoji barem jedna razlika između grupa, ali ne identificira koji se parovi razlikuju, za što su potrebni post-hoc testovi poput Tukeyjevog HSD testa. Veličina efekta izražava se eta-kvadratom (\(\eta^2\)), koji govori koliki postotak ukupne varijabilnosti objašnjava grupna pripadnost. Pretpostavke ANOVA-e uključuju normalnost distribucija unutar grupa, homogenost varijanci i nezavisnost opservacija.

Hi-kvadrat test koristi se za ispitivanje povezanosti između dviju kategorijskih varijabli uspoređujući opažene frekvencije s frekvencijama očekivanim pod pretpostavkom nezavisnosti. Formula \(\chi^2 = \sum (O-E)^2/E\) kvantificira ukupno odstupanje opaženih od očekivanih frekvencija. Veličina efekta mjeri se Cramerovim V, gdje vrijednosti od 0.1, 0.3 i 0.5 konvencionalno označavaju slab, srednji i jak efekt.

Pearsonova korelacija mjeri snagu i smjer linearne povezanosti između dviju numeričkih varijabli, s vrijednostima u rasponu od -1 do +1. Testira se protiv nulte hipoteze \(\rho = 0\). Konvencionalna interpretacija razlikuje slabu (\(|r| < 0.4\)), umjerenu (\(0.4 \leq |r| < 0.6\)) i jaku (\(|r| \geq 0.6\)) korelaciju. Ključno je upozorenje da korelacija ne implicira uzročnost jer postoji niz alternativnih objašnjenja za opaženu povezanost.

Regresijska analiza omogućuje predviđanje i objašnjenje. Jednostavna regresija modelira odnos \(Y = b_0 + b_1 X + \epsilon\), dok višestruka regresija proširuje model na više prediktora koji se mogu kontrolirati međusobno. Koeficijent determinacije \(R^2\) kvantificira postotak varijabilnosti u kriterijskoj varijabli objašnjen prediktorima, a regresijski koeficijenti (\(b\)) interpretiraju se kao očekivana promjena u \(Y\) za jediničnu promjenu u prediktoru uz kontrolu ostalih varijabli.

Pri izvještavanju rezultata svakoga statističkog testa potrebno je navesti deskriptivne statistike (\(M\), \(SD\), \(N\)), testnu statistiku (\(t\), \(F\), \(\chi^2\), \(r\)), p-vrijednost, veličinu efekta i, gdje je primjereno, interval pouzdanosti. Statistička značajnost (\(p < 0.05\)) nije isto što i praktična značajnost jer s velikim uzorcima trivijalni efekti postaju statistički značajni, dok s malim uzorcima važni efekti mogu ostati statistički neznačajni. Rezultate je uvijek potrebno interpretirati u kontekstu veličine efekta i praktičnih implikacija za istraživačko područje.

Statistički testovi obrađeni u ovom poglavlju predstavljaju temeljni alat za analizu strukturiranih kvantitativnih podataka, tj. podataka organiziranih u varijable i opservacije. Međutim, velik dio komunikacijskih podataka postoji u nestrukturiranom obliku kao tekst, bilo da se radi o novinskim člancima, komentarima čitatelja, objavama na društvenim mrežama ili transkriptima intervjua. Analiza takvih podataka zahtijeva drugačiji metodološki pristup. U sljedećem poglavlju (poglavlje 11) obrađuje se računalna analiza teksta, skup metoda koje koriste računalne algoritme za sustavno ekstrahiranje informacija iz tekstualnih podataka, čime se otvara novo poglavlje u metodološkom arsenalu istraživača masovne komunikacije.