Zeichnen von Konfidenzintervallbalken aus zusammenfassenden Statistiken

8

Ein bisschen wie ein Boxplot. Ich meine nicht unbedingt das Standard-obere Konfidenzintervall, das untere Konfidenzintervall, den Mittelwert und die Box-Plots, die den Datenbereich anzeigen, aber ich meine wie ein Box-Plot mit nur den drei Daten: dem 95% -Konfidenzintervall und dem Mittelwert .

Dies ist ein Screenshot eines Zeitschriftenartikels, der genau das hatte, was ich wollte: Geben Sie hier die Bildbeschreibung ein

Ich würde auch gerne wissen, wie ich die vom Antwortenden erwähnte Software verwenden würde, um eine solche Handlung zu erstellen.

BH2017
quelle
7
Was Sie als "Standard-Oberes Konfidenzintervall, Unteres Konfidenzintervall, Mittelwert und Box-Plots mit Datenbereich" bezeichnen, sind überhaupt keine Standard-Box-Plots. Das Standard-Box-Diagramm zeigt Median, Quartile, Minimum und Maximum sowie häufig andere Details.
Nick Cox
1
@ Nick Richtig: aber wie heißen solche Grafiken eigentlich? (Ich bin nicht sicher.)
whuber
6
Diese Art von Plot ist Standard (es ist jedoch kein Box-Plot) und kann von allen wichtigen Statistikpaketen erstellt werden: Stata, SAS, R , MATLAB. Ich denke, Sie könnten es auch mit Excel tun.
COOLSerdash
1
@ COOLSerdash großartig! Könnten Sie eine Antwort für MATLAB schreiben, da ich MATLAB bereits habe?
BH2017
6
Ich würde diese Konfidenzintervall-Diagramme nennen, aber nicht jedes Diagramm benötigt wirklich einen eigenen Namen. Jede Handlung verdient jedoch eine Textunterschrift ....
Nick Cox

Antworten:

9

In MATLAB möchten Sie möglicherweise die Fehlerbalkenfunktion ausprobieren : http://www.mathworks.de/de/help/matlab/ref/errorbar.html

Alternativ können Sie dies auch dumm und manuell tun. Bei einer Matrix von Datenpunkten "a" können Sie beispielsweise Ihre Mittelwerte mit der Funktion m = Mittelwert (a) berechnen, Ihre CIs berechnen (je nachdem, welches CI Sie benötigen) und die Ergebnisse von Hand zeichnen.

Demonstration, wenn Sie den Mittelwert und den CI bereits kennen, vorausgesetzt, CIs befinden sich in einer Matrix CI (erste und zweite Spalte) und Mittelwerte befinden sich in einer Matrix a :

plot(1:length(CI),a,'o','markersize', 10)           % plot the mean
hold on;
plot(1:length(CI),CI(1,:),'v','markersize', 6)              % plot lower CI boundary
hold on;
plot(1:length(CI),CI(2,:),'^','markersize', 6)              % plot upper CI boundary
hold on;

for I = 1:length(CI)                                        % connect upper and lower bound with a line
line([I I],[CI(1,I) CI(2,I)])
hold on;
end;

axis([0 length(CI)+1 min(CI(1,:))*0.75 max(CI(2,:))*1.25])  % scale axis

Demonstration in dem Fall, in dem Sie Einzelmessungen kennen, für ein Experiment mit wiederholten Messungen 3+ Bedingungen, eine Bedingung pro Spalte, ein Subjekt pro Zeile in Matrix a, keine fehlenden Proben, 95% CI wie nach MATLABs ttest () :

[H,P,CI] = ttest(a);                                        % calculate 95% CIs for every column in matrix a
                                                            % CIs are now in the matrix CI!

plot(1:length(CI),[mean(a)],'o','markersize', 10)           % plot the mean
hold on;
plot(1:length(CI),CI(1,:),'v','markersize', 6)              % plot lower CI boundary
hold on;
plot(1:length(CI),CI(2,:),'^','markersize', 6)              % plot upper CI boundary
hold on;

for I = 1:length(CI)                                        % connect upper and lower bound with a line
line([I I],[CI(1,I) CI(2,I)])
hold on;
end;

axis([0 length(CI)+1 min(CI(1,:))*0.75 max(CI(2,:))*1.25])  % scale axis
jona
quelle
Lesen Sie meine letzte Bearbeitung, es tut mir leid, aber einige Leute, die mich verdammt nerven, haben die Tatsache herausgearbeitet, dass ich nur den 95% CI kenne und keine zusätzlichen Daten meine.
BH2017
@BrentonHorne hat der Link zur Fehlerbalkenfunktion nicht geholfen? Es scheint genau das zu sein, was Sie wollen.
Peter Ellis
Wie Peter sagte, benutze dann errorbar () . Oder verwenden Sie das Skript, das ich geschrieben habe, aber ignorieren Sie die erste Zeile mit dem ttest und geben Sie es einfach mean und CI direkt ein. Ich werde es in bearbeiten, denke ich.
Jona
@BrentonHorne Um fair zu sein, haben Sie den Punkt nie ausführlich besprochen oder im Hauptteil der Frage überhaupt erwähnt. Es wurde durch den Titel impliziert, aber dieser Titel erwähnte auch fälschlicherweise Box-Plots, was das Problem ist, das die Bearbeitung zu beheben versuchte. Es ist bedauerlich, dass das Wort „nur“ dabei verschwunden ist, aber niemand hat es absichtlich einen großen Teil Ihrer Frage herausgearbeitet. Außerdem enthielt die Antwort eine Lösung und der Rest des Textes könnte für andere Leser interessant sein.
Gala
Ich habe den Code ausgeführt, der gut gelaufen ist. Das Problem ist, dass es mir gefallen würde, wenn es Mittel gäbe, mit denen ich das obere und untere CI mit einer Zeile wie im Screenshot in meiner Frage verbinden könnte.
BH2017
13

Schauen Sie, ob dies Ihnen hilft. R-Lösung:

par(mfrow=c(2,1)) # to stack the charts on column

#Dataset 1

upperlimit = c(10,12,8,14)
lowerlimit = c(5,9,4,7)
mean = c(8,10,6,12)

df = data.frame(cbind(upperlimit,lowerlimit,mean))

plot(df$mean, ylim = c(0,30), xlim = c(1,4))

install.packages("plotrix")
require(plotrix)
plotCI(df$mean,y=NULL, uiw=df$upperlimit-df$mean, liw=df$mean-df$lowerlimit, err="y",      pch=20, slty=3, scol = "black", add=TRUE)

#Dataset 2

upperlimit_2 = upperlimit*1.5
lowerlimit_2 = lowerlimit*0.8
mean_2 = upperlimit_2-lowerlimit_2

df_2 = data.frame(cbind(upperlimit_2,lowerlimit_2,mean_2))

plot(df$mean_2, ylim = c(0,30), xlim = c(1,4))

plotCI(df_2$mean_2,y=NULL, uiw=df_2$upperlimit_2-df_2$mean_2, liw=df_2$mean_2-   df_2$lowerlimit_2, err="y", pch=20, slty=3, scol = "black", add=TRUE)

rm(upperlimit,lowerlimit,mean,df,upperlimit_2,lowerlimit_2,mean_2,df_2) #remove the objects stored from workspace

par(mfrow=c(1,1)) # go back to default (one graph at a time)

Geben Sie hier die Bildbeschreibung ein

Andre Silva
quelle
und wie führe ich einen solchen Code aus? Ich bin völlig neu in R, also musst du mich durch die Sache führen, weil ich ahnungslos bin.
BH2017
3
Ich kann Ihnen helfen, eine Chance
Andre Silva
@AndreSilva, ich denke du bist die Extrameile dort gegangen. Tolle Unterstützung und Betreuung!
Doug.Numbers
Dies ist, was ich für die Ausführung Ihres Codes i.stack.imgur.com/yrZaJ.png
BH2017
@BrentonHome. Seltsam. Ich habe gerade getestet und es hat funktioniert. Die "Fehler" -Balken werden nicht angezeigt. Haben Sie das plotrixPaket installiert ? Ich habe dem Code eine Programmbefehlszeile hinzugefügt, die das Plotrix-Paket installiert. Bitte versuchen Sie es erneut und lassen Sie es wissen.
Andre Silva
7

Diese Art von Plot in R mit ggplot2, obwohl Sie möglicherweise ein wenig an der Schriftgröße der Achse herumspielen müssen:

library(ggplot2)
data.estimates = data.frame(
  var   = c('1', '2', '3', '4', '5', '6', '7', '8', '9'),
  par = c(1.12210,0.18489,1.22011,1.027446235,0.43521,0.53464,1.93316,-0.43806,-0.12029),
  se = c(0.42569,0.32162,0.58351,0.771608551,0.24803,0.65372,0.92717,0.45939,0.51558))
data.estimates$idr <- exp(data.estimates$par)
data.estimates$upper <- exp(data.estimates$par + (1.96*data.estimates$se))
data.estimates$lower <- exp(data.estimates$par - (1.96*data.estimates$se))

p2 <- ggplot(data.estimates, aes(var,idr, size=10)) + theme_bw(base_size=10)
p2 + geom_point() +geom_errorbar(aes(x = var, ymin = lower, ymax = upper, size=2), width = 0.2) + scale_y_log10(limits=c(0.1, 50), breaks=c(0.1, 0.5, 1, 5, 10, 25, 50)) + xlab("Site") + ylab("RR")

Geben Sie hier die Bildbeschreibung ein

Fomite
quelle
2

Verwenden Sie in Stata serrbaroder ciplot(SSC) oder eclplot(Stata Journal, SSC).

Nick Cox
quelle
2

Angenommen, Sie haben Zugriff auf die Originaldaten, können Sie dies in R mit der Funktion lineplot.CI in der Sciplot-Bibliothek tun

Beispiel mit mtcars-Datensatz:

lineplot.CI(x.factor=gear, response=mpg, group=vs, data=mtcars)

Beachten Sie, dass lineplot.CI standardmäßig SE-Balken zeichnet (es kann geändert werden, indem eine neue Funktion mit dem Argument ci.fun definiert wird, um 95% CI-Intervalle zu zeichnen).

lineplot.CI(x.factor=gear, response=mpg, group=vs, data=mtcars, ci.fun=function(x) c(mean(x)-1.96*se(x), mean(x)+1.96*se(x)))
Aghila
quelle
1

Dies könnte in R mit points()(oder plot(..., type="p")) und erfolgen segments(). Möglicherweise gibt es auch R-Funktionen, mit denen die CIs für Sie erstellt werden können, für die jedoch möglicherweise die Originaldaten erforderlich sind. Die mehreren Panels in derselben Figur erstellt mit par(mfrow=c(4,1)). Wenn Sie kein R kennen, ist dies schwer zu bewerkstelligen (wie in, Sie müssten ein bisschen mehr R lernen oder jemanden bitten, mit Ihrem spezifischen Datensatz zu helfen).

rbatt
quelle
1

GraphPad Prism kann diese Art von Diagramm einfach erstellen und Fehlerbalken aus den von Ihnen eingegebenen Fehlerwerten zeichnen . Erstellen Sie eine gruppierte Tabelle, die für die Eingabe von Mittelwert, - Fehler und + Fehler formatiert ist.

Harvey Motulsky
quelle
Ist es möglich, eine kostenlose Kopie davon zu erhalten, die nicht nur eine 30-Tage-Testversion ist?
BH2017
1
@BrentonHorne: Nein. Es ist keine freie Software.
Harvey Motulsky