Słownik metodologiczny · Wielkość efektu

Wykres lejkowy (funnel plot) – jak ocenić asymetrię wyników metaanalizy?

Wykres lejkowy zestawia efekt każdego badania z jego błędem standardowym. Pokazujemy, jak czytać asymetrię, po co dodawać kontury istotności i dlaczego asymetria nie dowodzi błędu publikacji.

Strona główna / Słownik / Wykres lejkowy
W skrócie: Wykres lejkowy pokazuje efekt każdego badania z metaanalizy na tle jego błędu standardowego. Bez zniekształceń punkty tworzą symetryczny lejek. Asymetria sugeruje efekt małych badań, np. błąd publikacji, ale ma też inne przyczyny, więc dodaj kontury istotności i test formalny.

Co to jest wykres lejkowy?

Wykres lejkowy (ang. funnel plot) to wykres rozrzutu, na którym każdy punkt to jedno badanie z metaanalizy. Na osi poziomej leży wielkość efektu, a na pionowej jego precyzja, najczęściej błąd standardowy na odwróconej osi, tak by najdokładniejsze badania były na górze. Gdy nic nie zniekształca literatury, punkty tworzą symetryczny, odwrócony lejek: duże badania skupiają się blisko efektu łącznego, a małe rozrzucają się szerzej po obu jego stronach.

Jak go czytać?

  • Szukaj asymetrii. Brak małych badań po jednej stronie, zwykle przy słabych lub ujemnych wynikach, to sygnał tzw. efektu małych badań.
  • Asymetria to nie dowód. Może wynikać z błędu publikacji, ale też z heterogeniczności, słabszej jakości małych badań albo przypadku (Sterne i in., 2011).
  • Dodaj kontury istotności. Jeśli brakujące badania leżałyby w strefie wyników nieistotnych, przemawia to za błędem publikacji. Jeśli w strefie istotnej, przyczyna jest raczej inna (Peters i in., 2008).
  • Oceń asymetrię formalnie. Służy do tego test Eggera, a korektę pokazuje metoda trim-and-fill.

Przykład

Wykres lejkowy 50 symulowanych badań o prawdziwym efekcie g = 0.20 z konturami istotności wokół zera. Czerwone punkty to 20 badań opublikowanych, puste to 30 pominiętych. Efekt łączny opublikowanych badań wynosi g = 0.29. Opublikowane małe badania leżą po prawej stronie, w szarej strefie istotności, a lewy dolny róg jest prawie pusty.
Rysunek 1. Wykres lejkowy z konturami istotności. Czerwone punkty to badania „opublikowane”, puste – pominięte. Niebieska linia to efekt łączny opublikowanych badań, a linie przerywane wyznaczają lejek 95%. Obliczenia: R (dane symulowane).

W symulacji przeprowadzono 50 badań o tym samym prawdziwym efekcie g = 0.20. Do literatury trafiły wszystkie wyniki istotne i dodatnie, a z pozostałych losowo mniej więcej co czwarty – razem 20 badań. Metaanaliza wszystkich 50 daje g = 0.21, 95% CI [0.16, 0.26], a samych opublikowanych już g = 0.29, 95% CI [0.21, 0.37]. Lejek jest wyraźnie asymetryczny: z 19 małych badań (SE > 0.25) opublikowano 7, ze średnim g = 0.63, a pominięte miały średnio g = 0.07. Lewy dolny róg wykresu jest prawie pusty.

Jak opisać w pracy

Możliwy błąd publikacji oceniono na wykresie lejkowym z konturami istotności (Peters i in., 2008). Małe badania leżały głównie po prawej stronie lejka, często w strefie p < .05, a małych badań z efektami bliskimi zera lub ujemnymi brakowało. Taka asymetria może wskazywać na błąd publikacji, ale też na inne efekty małych badań, dlatego sprawdzono ją dodatkowo testem regresyjnym Eggera.

Na co uważać

  • Mało badań to mało informacji. Egger i in. (1997) ostrzegają, że gdy metaanaliza obejmuje niewiele małych badań, zdolność wykrycia błędu jest ograniczona.
  • Na osi pionowej daj błąd standardowy, a nie liczebność próby, bo to on wyznacza kształt lejka.
  • Symetria nie oczyszcza wyników. Brak asymetrii nie wyklucza błędu publikacji.

Jak włączyć wykres lejkowy do całej analizy, pokazuje wpis Metaanaliza krok po kroku.

Przykład reprodukowalny

Wykres lejkowy w R

Kod symuluje 50 badań, „publikuje” część z nich według istotności wyniku i porównuje metaanalizę wszystkich i opublikowanych badań. Rysunek 1 powstał w ggplot2 w dalszej części skryptu; szybki wykres daje też funnel() z pakietu metafor.

Opublikowane badania i strefy istotności

Dane wejściowe: 50 badań z prawdziwym efektem g = 0.20 i liczebnością 10–200 osób w grupie (dane symulowane, set.seed(3011)).

Co odczytać: liczbę opublikowanych badań, efekt łączny dla wszystkich i opublikowanych oraz liczbę opublikowanych wyników w każdej strefie istotności oraz średnie g małych i dużych badań.

R
suppressPackageStartupMessages(library(metafor))
set.seed(3011)
k   <- 50
n   <- round(exp(runif(k, log(10), log(200))))                         # osób w grupie
vi  <- 2 / n + 0.2^2 / (4 * n)                          # wariancja g przy dwóch równych grupach
yi  <- rnorm(k, 0.20, sqrt(vi))                         # prawdziwy efekt g = 0.20 we wszystkich badaniach
p   <- 2 * pnorm(-abs(yi / sqrt(vi)))
publ <- (p < .05 & yi > 0) | runif(k) < 0.25           # wynik istotny albo 25% szans dla pozostałych
c(wszystkie = k, opublikowane = sum(publ))
wszystkie <- rma(yi, vi, method = "REML")
opubl     <- rma(yi, vi, method = "REML", subset = publ)
round(rbind(wszystkie = c(g = wszystkie$b[1], lo = wszystkie$ci.lb, hi = wszystkie$ci.ub),
            opublikowane = c(g = opubl$b[1], lo = opubl$ci.lb, hi = opubl$ci.ub)), 2)
se <- sqrt(vi)
# ile opublikowanych badań leży w każdej strefie istotności (kontury wokół zera)
z  <- yi[publ] / se[publ]
table(cut(abs(z), c(0, 1.96, 2.576, Inf), right = FALSE,
          labels = c("p >= .05", ".01 <= p < .05", "p < .01")))
male <- se > 0.25                                       # małe badania (SE > 0.25, ok. 30 osób w grupie i mniej)
round(tapply(yi, list(ifelse(male, "male", "duze"), ifelse(publ, "opublikowane", "pominiete")), mean), 2)  # średnie g
table(ifelse(male, "male", "duze"), publ)
Wynik w R
   wszystkie opublikowane 
          50           20 
                g   lo   hi
wszystkie    0.20 0.15 0.24
opublikowane 0.29 0.21 0.37

      p >= .05 .01 <= p < .05        p < .01 
             8              9              3 
     opublikowane pominiete
duze         0.29      0.14
male         0.63      0.07
      publ
       FALSE TRUE
  duze    18   13
  male    12    7

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiety metafor i ggplot2).

  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. metafor (wersja 5.0.1): Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1–48. https://doi.org/10.18637/jss.v036.i03
  3. ggplot2 (wersja 4.0.2): Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer. https://ggplot2.tidyverse.org

Najczęstsze pytania

Co oznacza asymetria wykresu lejkowego?

Że małe badania dają inne wyniki niż duże, najczęściej większe efekty. Przyczyną może być błąd publikacji, ale też heterogeniczność, słabsza jakość małych badań albo przypadek.

Co jest na osiach wykresu lejkowego?

Na osi poziomej wielkość efektu (np. g Hedgesa albo logarytm OR), a na pionowej błąd standardowy na odwróconej skali, tak że najprecyzyjniejsze badania są na górze.

Od ilu badań ma sens wykres lejkowy?

Przy kilku badaniach kształtu lejka nie da się ocenić. Egger i in. (1997) ostrzegają, że przy niewielu małych badaniach zdolność wykrycia błędu jest ograniczona.

Powiązane hasła

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

Potrzebujesz wsparcia w analizie danych?

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

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Egger, M., Davey Smith, G., Schneider, M., & Minder, C. (1997). Bias in meta-analysis detected by a simple, graphical test. BMJ, 315(7109), 629–634. https://doi.org/10.1136/bmj.315.7109.629 ● Otwarty dostęp: pełny tekst
  2. Peters, J. L., Sutton, A. J., Jones, D. R., Abrams, K. R., & Rushton, L. (2008). Contour-enhanced meta-analysis funnel plots help distinguish publication bias from other causes of asymmetry. Journal of Clinical Epidemiology, 61(10), 991–996. https://doi.org/10.1016/j.jclinepi.2007.11.010
  3. Sterne, J. A. C., Sutton, A. J., Ioannidis, J. P. A., Terrin, N., Jones, D. R., Lau, J., Carpenter, J., Rücker, G., Harbord, R. M., Schmid, C. H., Tetzlaff, J., Deeks, J. J., Peters, J., Macaskill, P., Schwarzer, G., Duval, S., Altman, D. G., Moher, D., & Higgins, J. P. T. (2011). Recommendations for examining and interpreting funnel plot asymmetry in meta-analyses of randomised controlled trials. BMJ, 343, Article d4002. https://doi.org/10.1136/bmj.d4002 ● Otwarty dostęp

Cytowania BibTeX

@article{egger1997bias, author={Egger, Matthias and Davey Smith, George and Schneider, Martin and Minder, Christoph}, title={{Bias in meta-analysis detected by a simple, graphical test}}, journal={BMJ}, year={1997}, volume={315}, number={7109}, pages={629--634}, doi={10.1136/bmj.315.7109.629}}
@article{peters2008contour, author={Peters, Jaime L. and Sutton, Alex J. and Jones, David R. and Abrams, Keith R. and Rushton, Lesley}, title={{Contour-enhanced meta-analysis funnel plots help distinguish publication bias from other causes of asymmetry}}, journal={Journal of Clinical Epidemiology}, year={2008}, volume={61}, number={10}, pages={991--996}, doi={10.1016/j.jclinepi.2007.11.010}}
@article{sterne2011recommendations, author={Sterne, Jonathan A. C. and Sutton, Alex J. and Ioannidis, John P. A. and Terrin, Norma and Jones, David R. and Lau, Joseph and Carpenter, James and Rücker, Gerta and Harbord, Roger M. and Schmid, Christopher H. and Tetzlaff, Jennifer and Deeks, Jonathan J. and Peters, Jaime and Macaskill, Petra and Schwarzer, Guido and Duval, Sue and Altman, Douglas G. and Moher, David and Higgins, Julian P. T.}, title={{Recommendations for examining and interpreting funnel plot asymmetry in meta-analyses of randomised controlled trials}}, journal={BMJ}, year={2011}, volume={343}, eid={d4002}, doi={10.1136/bmj.d4002}}
R