Zusammenfassende Statistik mit Mittelwert, SD, Min und Max zeichnen?

10

Ich habe einen wirtschaftswissenschaftlichen Hintergrund und normalerweise werden in der Disziplin die zusammenfassenden Statistiken der Variablen in einer Tabelle angegeben. Ich möchte sie jedoch zeichnen.

Ich könnte ein Box-Diagramm so ändern, dass es den Mittelwert, die Standardabweichung, das Minimum und das Maximum anzeigt, aber ich möchte dies nicht tun, da Box-Diagramme traditionell zur Anzeige von Medianen und Q1 und Q3 verwendet werden.

Alle meine Variablen haben unterschiedliche Maßstäbe. Es wäre großartig, wenn jemand einen sinnvollen Weg vorschlagen könnte, wie ich diese zusammenfassenden Statistiken zeichnen könnte. Ich kann mit R oder Stata arbeiten.

Ridhima
quelle
1
Willkommen in der Liste. Wenn Sie nach RBefehlen fragen, ist diese Frage hier nicht zum Thema. Aber anscheinend fragen Sie sich in erster Linie, wie eine gute Handlung aussehen würde, und in zweiter Linie, wie man sie erstellt. Wenn ja, schlage ich vor, "mit R" aus Ihrem Titel zu streichen und möglicherweise im Text anzugeben, dass Sie Rverfügbar sind.
Peter Flom - Reinstate Monica

Antworten:

16

Es gibt einen Grund, warum Tukeys Boxplot universell ist. Es kann auf Daten angewendet werden, die aus verschiedenen Verteilungen stammen, von Gauß bis Poisson usw. Median, MAD (mittlere absolute Abweichung) oder IQR (Interquartilbereich) sind robustere Messgrößen, wenn Daten abweichen Normalität. Mittelwert und SD sind jedoch anfälliger für Ausreißer und sollten in Bezug auf die zugrunde liegende Verteilung interpretiert werden. Die folgende Lösung eignet sich besser für normale oder logarithmisch normale Daten. Sie können durch eine Auswahl an robusten Maßnahmen sehen hier , und die WRS R Paket erkunden hier .

# simulating dataset
set.seed(12)
d1 <- rnorm(100, sd=30)
d2 <- rnorm(100, sd=10)
d <- data.frame(value=c(d1,d2), condition=rep(c("A","B"),each=100))

# function to produce summary statistics (mean and +/- sd), as required for ggplot2
data_summary <- function(x) {
   mu <- mean(x)
   sigma1 <- mu-sd(x)
   sigma2 <- mu+sd(x)
   return(c(y=mu,ymin=sigma1,ymax=sigma2))
}

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_crossbar(stat="summary", fun.y=data_summary, fun.ymax=max, fun.ymin=min)

Zusätzlich können Sie durch Hinzufügen + geom_jitter()oder Hinzufügen + geom_point()des obigen Codes gleichzeitig die Rohdatenwerte visualisieren.


Vielen Dank an @Roland für den Hinweis auf die Geigenhandlung . Es hat einen Vorteil bei der Visualisierung der Wahrscheinlichkeitsdichte gleichzeitig mit der zusammenfassenden Statistik:

# require(ggplot2)
ggplot(data=d, aes(x=condition, y=value, fill=condition)) + 
geom_violin() + stat_summary(fun.data=data_summary)

Beide Beispiele sind unten gezeigt.

Geben Sie hier die Bildbeschreibung ein

TWL
quelle
2
Ich würde eine Geigenhandlung dieser vorziehen.
Roland
1
Je nach Zweck der Analyse sind Mittelwert und Standardabweichung genau das, was Sie benötigen. Ich verstehe jedoch nicht die Inkonsistenz in Rs summary.data.frame. Es zeigt Mittel aber keine SDS. Ich kann mir nicht viele Situationen vorstellen, in denen Mittel nützlich sind, aber Standardabweichungen irreführend sind.
Michael M
In der Tat müssen Sie manchmal den Mittelwert und die SD sehen, damit Sie beurteilen können, ob sie nützlich sind ...
Nick Cox
1
@ TWL: Das Thema ist viel zu weit gefasst, um hier diskutiert zu werden. Nehmen wir zum Beispiel wirtschaftliche Bewertungen von Medikamenten: Für den Patienten ist es vielleicht wichtig, die mittlere Behandlungsdauer zu kennen, während es für die Krankenkasse die durchschnittliche Behandlungsdauer ist, weil sie diese für jeden Patienten bezahlen muss. Eine merkwürdige Tatsache: Bei der Exponentialverteilung deckt die mittlere +/- 1 Standardabweichung 68% der gesamten Masse ab, die mittlere +/- 2 sds etwa 95% der gesamten Masse. Wie für das normale. (Aber es ist nur Zufall;))
Michael M
1
Vielen Dank an alle, ich mag die vorgeschlagenen
Geigenpläne,
9

Es gibt unzählige Möglichkeiten.

Eine Option, die ich gesehen habe, um Verwechslungen mit Boxplots zu vermeiden (vorausgesetzt, Sie haben Mediane oder Originaldaten verfügbar), besteht darin, ein Boxplot zu zeichnen und ein Symbol hinzuzufügen, das den Mittelwert markiert (hoffentlich mit einer Legende, um dies explizit zu machen). Diese Version des Boxplots, die einen Marker für den Mittelwert hinzufügt, wird beispielsweise in Frigge et al. (1989) [1] erwähnt:

Boxplots mit ebenfalls markiertem Mittelwert

Das linke Diagramm zeigt ein + -Symbol als Mittelwertmarker, und das rechte Diagramm verwendet ein Dreieck am Rand, das den Mittelwertmarker aus Doane & Tracys Strahl-Drehpunkt-Diagramm anpasst [2].

Siehe auch diesen SO-Beitrag und diesen

Wenn Sie den Median nicht haben (oder wirklich nicht anzeigen möchten), wird ein neues Diagramm benötigt, und dann wäre es gut, wenn es sich visuell von einem Boxplot unterscheidet.

Vielleicht so etwas:

Geben Sie hier die Bildbeschreibung ein

±

Geben Sie hier die Bildbeschreibung ein

±

Wenn Ihre Zahlen sehr unterschiedliche Maßstäbe haben, aber alle positiv sind, können Sie mit Protokollen arbeiten oder kleine Vielfache mit unterschiedlichen (aber deutlich gekennzeichneten) Maßstäben erstellen

Code (derzeit kein besonders "netter" Code, aber im Moment werden nur Ideen untersucht, es ist kein Tutorial zum Schreiben von gutem R-Code):

fivenum.ms=function(x) {r=range(x);m=mean(x);s=sd(x);c(r[1],m-s,m,m+s,r[2])}
eps=.015

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-1.2*eps,fivenum.ms(A)[2],1+1.4*eps,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-1.2*eps,fivenum.ms(B)[2],2+1.4*eps,fivenum.ms(B)[4],lwd=2,col=4,den=0)

plot(factor(c(1,2)),range(c(A,B)),type="n",border=0)
points((rep(c(1,2),each=5)),c(fivenum.ms(A),fivenum.ms(B)),col=rep(c(2,4),each=5),pch=rep(c(1,16,9,16,1),2),ylim=c(range(A,B)),cex=1.2,lwd=2,xlim=c(0.5,2.5),ylab="",xlab="")
rect(1-eps/9,fivenum.ms(A)[2],1+eps/3,fivenum.ms(A)[4],lwd=2,col=2,den=0)
rect(2-eps/9,fivenum.ms(B)[2],2+eps/3,fivenum.ms(B)[4],lwd=2,col=4,den=0)

[1] Frigge, M., DC Hoaglin und B. Iglewicz (1989),
"Einige Implementierungen des Boxplots ".
American Statistician , 43 (Februar): 50-54.

[2] Doane DP und RL Tracy (2000),
"Verwenden von Beam und Fulcrum Zeigt Daten zu entdecken"
amerikanische Statistiker , 54 (4): 289-290, November

Glen_b - Monica neu starten
quelle