Otázka:
Jak nakreslit trychtýřový plot pomocí ggplot2 v R?
lokheart
2010-12-07 07:29:37 UTC
view on stackexchange narkive permalink

Jako nadpis potřebuji nakreslit něco takového:

alt text

Může být použit ggplot nebo jiné balíčky, pokud ggplot není schopen, nakreslit něco takového ?

Mám několik nápadů, jak to udělat a implementovat, ale ocenil bych, kdybych měl k dispozici některá data. Nějaké nápady na to?
Ano, ggplot může snadno nakreslit graf, který se skládá z bodů a čar;) geom_smooth vám získá 95% cesty - pokud chcete více rad, budete muset poskytnout více podrobností.
Toto není spiklenecká zápletka. Místo toho jsou řádky evidentně konstruovány z odhadů standardních chyb na základě počtu vstupů. Zdá se, že mají v úmyslu uzavřít specifikovaný * podíl * dat, což by z nich udělalo * meze tolerance. * Pravděpodobně mají formu y = základní linie + konstanta / Sqrt (# přijetí * f (základní linie)). Můžete upravit kód v existujících odpovědích, aby se grafy řádků vykreslily, ale pravděpodobně budete muset zadat svůj vlastní vzorec pro jejich výpočet: příklady, které jsem viděl, vykreslují * intervaly spolehlivosti * pro * samotný řádek *. Proto vypadají tak odlišně.
@whuber (+1) To je opravdu velmi dobrá věc. Doufám, že to stejně může poskytnout dobrý výchozí bod (i když můj R kód není tak optimalizovaný).
Ggplot stále poskytuje program „stat_quantile ()“ pro umístění podmíněných kvantilů na bodový graf. Potom můžete řídit funkční formu kvantilní regrese pomocí parametru vzorce. Navrhuji věci jako formula = `y ~ ns (x, 4)`, abyste získali hladké spline uložení.
čtyři odpovědi:
Bernd Weiss
2010-12-07 19:19:27 UTC
view on stackexchange narkive permalink

Pokud hledáte tento (metaanalýzový) typ grafu trychtýře, může být výchozím bodem následující:

  knihovna (ggplot2) sada .seed (1) p <- runif (100) number <- sample (1: 1000, 100, replace = TRUE) p.se <- sqrt ((p * (1-p)) / (number)) df < - data.frame (p, number, p.se) ## společný efekt (model s pevným efektem) p.fem <- weighted.mean (p, 1 / p.se ^ 2) ## dolní a horní hranice pro 95% a 99,9% CI, na základě odhadovaného počtu FEM. seq <- seq (0,001, max (number), 0,1) number.ll95 <- p.fem - 1,96 * sqrt ((p.fem * (1-p.fem)) / (number.seq)) number.ul95 <- p.fem + 1,96 * sqrt ((p.fem * (1-p.fem)) / (number.seq)) number.ll999 <- p.fem - 3,29 * sqrt ((p.fem * (1-p.fem)) / (number.seq)) number.ul999 <- p.fem + 3,29 * sqrt ((p.fem * (1-p.fem)) / (number.seq)) dfCI <- data.frame (number.ll95, number.ul95, number.ll999, number.ul999, number.seq, p.fem) ## draw plotfp <- ggplot (a es (x = číslo, y = p), data = df) + geom_point (tvar = 1) + geom_line (aes (x = number.seq, y = number.ll95), data = dfCI) + geom_line (aes (x = number.seq, y = number.ul95), data = dfCI) + geom_line (aes (x = number.seq, y = number.ll999), linetype = "dashed", data = dfCI) + geom_line (aes (x = number.seq, y = number.ul999), linetype = "dashed", data = dfCI) + geom_hline (aes (yintercept = p.fem), data = dfCI) + scale_y_continuous (limity = c (0,1.1)) + xlab ("number") + ylab ("p") + theme_bw () fp  

alt text

Přítomnost argumentu `linetype = 2` uvnitř závorek` aes () `- vykreslení 99% řádků - vede k chybě„ průběžná proměnná nemůže být mapována na typ čáry “s aktuálním ggplot2 (0.9.3.1). Změna`geom_line (aes (x = number.seq, y = number.ll999, typ čáry = 2), data = dfCI) `na`geom_line (aes (x = number.seq, y = number.ll999), typ čáry = 2 , data = dfCI) `funguje pro mě. Nebojte se upravit původní odpověď a přijít o ni.
chl
2010-12-07 17:38:08 UTC
view on stackexchange narkive permalink

Ačkoli existuje prostor pro zlepšení, zde je malý pokus se simulovanými (heteroscedastickými) daty:

  knihovna (ggplot2) set.seed (101) x <- runif (100, min = 1, max = 10) y <- rnorm (délka (x), průměr = 5, sd = 0,1 * x) df <- data.frame (x = x * 70, y = y) m <- lm (y ~ x, data = df) fit95 <- předpovědět (m, interval = "conf", úroveň = 0,95) fit99 <- předpovědět (m, interval = "conf", úroveň = 0,999) df <- cbind.data.frame (df, lwr95 = fit95 [, "lwr"], upr95 = fit95 [, "upr"], lwr99 = fit99 [, "lwr"], upr99 = fit99 [, "upr"]) p <- ggplot (df, aes (x, y)) p + geom_point () + geom_smooth (metoda = "lm", barva = "černá", lwd = 1,1, se = FALSE) + geom_line (aes (y = upr95), barva = "černá" , typ čáry = 2) + geom_line (aes (y = lwr95), barva = "černá", typ čáry = 2) + geom_line (aes (y = upr99), barva = "červená", typ čáry = 3) + geom_line (aes ( y = lwr99), color = "red", typ čáry = 3) + anotace ("text", 100, 6,5, štítek = "95% limit ", color =" black ", size = 3, hjust = 0) + anotace (" text ", 100, 6,4, label =" 99,9% limit ", color =" red ", size = 3, hjust = 0) + laboratoře (x = "Ne. přijetí ... ", y =" Procento pacientů ... ") + theme_bw () 

alt text

Berry
2014-06-20 18:32:12 UTC
view on stackexchange narkive permalink

Viz také balíček jeřábů berryFunctions, který má funnelPlot pro proporce bez použití ggplot2, pokud to někdo potřebuje v základní grafice. http://cran.r-project.org/web/packages/berryFunctions/index .html

Existuje také balíček extfunnel, který jsem nezkoumal.

jsakaluk
2016-02-13 05:37:36 UTC
view on stackexchange narkive permalink

Kód Bernda Weissa je velmi užitečný. Níže jsem provedl několik pozměňovacích návrhů, abych změnil / přidal několik funkcí:

  1. Použitá standardní chyba jako míra přesnosti, což je více typické pro grafy trychtýřů, které vidím (v psychologii)
  2. Zaměnili osy, takže přesnost (standardní chyba) je na ose y a velikost efektu na ose x
  3. Použito geom_segment místo geom_line pro čáru ohraničující metaanalytický průměr, takže by měla stejnou výšku jako čáry ohraničující oblasti spolehlivosti 95% a 99%
  4. Místo vykreslování metaanalytické průměr, vynesl jsem 95% interval spolehlivosti

Můj kód používá jako příklad metaanalytický průměr 0,0892 (se = 0,0035), ale můžete nahradit své vlastní hodnoty.

  odhad = 0,0892se = 0,0035 # Uložte ve své datové sadě vektor hodnot, který zahrnuje rozsah od 0 # do maximální hodnoty zobrazení (standardní chyba). # Proveďte přírůstek (konečný hodnota) dostatečně malý (zvolím 0,001) # aby bylo zajištěno, že bude zachycen celý váš rozsah dat se.seq = seq (0, max (dat $ corr_zi_se), 0,001) # výpočetní vektory dolní a horní mezní hodnoty pro # 95% CI regionll95 = odhad- (1,96 * se.seq) ul95 = odhad + (1,96 * se.seq) # Udělejte to pro 99% CI region tooll99 = odhad- (3,29 * se.seq) ul99 = odhad + (3,29 * se.seq) # A konečně vypočítejte interval spolehlivosti pro váš metaanalytický odhad meanll95 = odhad- (1,96 * se) průměrný95 = odhad + (1,96 * se) # Vložte všechny vypočítané hodnoty do jednoho datového rámce # Může se zobrazit varování o '... názvy řádků byly nalezeny z krátké proměnné ...' # Můžete to ignorovat. dfCI = data.frame (ll95, ul95, ll99, ul99, se.seq, odhad, meanll95, meanul95) #Draw Plotfp = ggplot (aes (x = se, y = Zr), data = dat) + geom_point (tvar = 1) + xlab ('Sta ndard Error ') + ylab (' Zr ') + geom_line (aes (x = se.seq, y = ll95), linetype =' dotted ', data = dfCI) + geom_line (aes (x = se.seq, y = ul95), typ čáry = 'tečkovaný', data = dfCI) +
geom_line (aes (x = se.seq, y = ll99), typ čáry = 'přerušovaný', data = dfCI) + geom_line (aes (x = se.seq, y = ul99), typ řádku = 'přerušovaný', data = dfCI ) + geom_segment (aes (x = min (se.seq), y = meanll95, xend = max (se.seq), yend = meanll95), typ čáry = 'tečkovaný', data = dfCI) + geom_segment (aes (x = min (se.seq), y = meanul95, xend = max (se.seq), yend = meanul95), typ čáry = 'tečkovaný', data = dfCI) + scale_x_reverse () + scale_y_continuous (break = seq (-1,25,2 , 0,25)) + coord_flip () + theme_bw () fp  

enter image description here



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 2.0, pod kterou je distribuován.
Loading...