Tracciare statistiche riassuntive con media, sd, min e max?


10

Vengo da un background economico e di solito nella disciplina le statistiche riassuntive delle variabili sono riportate in una tabella. Tuttavia, desidero tracciarli.

Potrei modificare un diagramma a riquadri per consentirgli di visualizzare la media, la deviazione standard, il minimo e il massimo, ma non desidero farlo poiché i diagrammi a riquadri vengono tradizionalmente utilizzati per visualizzare mediane e Q1 e Q3.

Tutte le mie variabili hanno scale diverse. Sarebbe bello se qualcuno potesse suggerire un modo significativo con cui posso tracciare queste statistiche riassuntive. Posso lavorare con R o Stata.


1
Benvenuti nella lista. Se stai chiedendo dei Rcomandi, questa domanda è fuori tema qui. Ma sembra che tu ti stia chiedendo principalmente come sarebbe una buona trama e secondariamente su come crearla. In tal caso, ti suggerisco di eliminare "con R" dal tuo titolo e magari dichiarando, nel corpo, che hai a Rdisposizione.
Peter Flom

Risposte:


16

C'è un motivo per cui il diagramma a scatole di Tukey è universale, può essere applicato a dati derivati ​​da diverse distribuzioni, da gaussiano a Poisson, ecc. Mediana, MAD (deviazione assoluta mediana) o IQR (intervallo interquartile) sono misure più solide quando i dati si discostano da normalità. Tuttavia, media e DS sono più inclini a valori anomali e dovrebbero essere interpretati rispetto alla distribuzione sottostante. La soluzione seguente è più adatta per dati normali o log-normali. Puoi sfogliare una selezione di misure efficaci qui ed esplorare il pacchetto WRS R qui .

# 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)

Inoltre aggiungendo + geom_jitter()o + geom_point()al codice sopra puoi visualizzare simultaneamente i valori dei dati grezzi.


Grazie a @Roland per aver sottolineato la trama del violino . Ha un vantaggio nel visualizzare la densità di probabilità contemporaneamente alla statistica riassuntiva:

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

Entrambi gli esempi sono mostrati di seguito.

inserisci qui la descrizione dell'immagine


2
Preferirei una trama di violino su questo.
Roland,

1
A seconda dello scopo dell'analisi, la deviazione media e standard è esattamente ciò di cui hai bisogno. Non capisco tuttavia l'incoerenza nel riepilogo.data.frame di R. Mostra mezzi ma non sds. Non riesco a pensare a molte situazioni in cui i mezzi sono utili ma deviazioni standard fuorvianti.
Michael M,

Anzi, a volte devi vedere la media e la SD in modo da poter giudicare se sono utili ....
Nick Cox,

1
@TWL: l'argomento è troppo vasto per essere discusso qui. Prendiamo ad esempio le valutazioni economiche dei farmaci: per il paziente, forse è importante conoscere la durata media del trattamento, mentre per la compagnia di assicurazione sanitaria è la durata media del trattamento perché devono pagare per ogni paziente. Un fatto curioso: nel caso della distribuzione esponenziale, la media +/- 1 deviazione standard copre il 68% di tutta la massa, la media +/- 2 sds copre circa il 95% di tutta la massa. Per quanto riguarda il normale. (Ma è pura possibilità;))
Michael M,

1
Grazie a tutti, mi piacciono le trame di violino proposte, quindi proseguirò con questa scelta :-)
Ridhima,

9

Ci sono una miriade di possibilità.

Un'opzione che ho visto usata che evita la confusione con i grafici a scatole (supponendo che tu abbia mediane o dati originali disponibili) è quella di tracciare un diagramma a scatole e aggiungere un simbolo che segna la media (si spera con una legenda per renderlo esplicito). Questa versione del diagramma a scatole che aggiunge un marcatore per la media è menzionata, ad esempio in Frigge et al (1989) [1]:

Anche i grafici a scatole che mostrano la media sono contrassegnati

La trama di sinistra mostra un simbolo + come marcatore medio e la trama di destra usa un triangolo sul bordo, adattando il marcatore medio dal diagramma trave e fulcro di Doane & Tracy [2].

Vedi anche questo post SO e questo

Se non hai (o davvero non vuoi mostrare) la mediana sarà necessaria una nuova trama e sarebbe bene che sia visivamente distinto da un diagramma a scatole.

Forse qualcosa del genere:

inserisci qui la descrizione dell'immagine

... che traccia il minimo, il massimo, la media e la media sd per ogni campione usando simboli diversi e quindi disegna un rettangolo, o forse meglio, qualcosa del genere:±

inserisci qui la descrizione dell'immagine

... che traccia il minimo, il massimo, la media e la media sd per ogni campione usando simboli diversi e quindi traccia una linea (in effetti attualmente è un rettangolo come prima, ma disegnato stretto; dovrebbe essere cambiato in un linea)±

Se i tuoi numeri sono su scale molto diverse, ma sono tutti positivi, potresti considerare di lavorare con i log o potresti fare piccoli multipli con scale diverse (ma chiaramente contrassegnate)

Codice (attualmente non particolarmente "carino", ma al momento si tratta solo di esplorare idee, non è un tutorial per scrivere un buon codice R):

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 e B. Iglewicz (1989),
"Alcune implementazioni della trama della scatola".
Statistico americano , 43 (febbraio): 50-54.

[2] Doane DP e RL Tracy (2000),
"Utilizzo dei display Beam e Fulcrum per esplorare i dati"
American Statistician , 54 (4): 289–290, novembre

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.