Trazar barras de intervalo de confianza a partir de estadísticas resumidas

8

Un poco como un diagrama de caja. Me refiero no necesariamente al intervalo de confianza superior estándar, al intervalo de confianza inferior, a la media y a las gráficas de caja que muestran el rango de datos, pero me refiero a una gráfica de caja con solo los tres datos: el intervalo de confianza del 95% y la media .

Esta es una captura de pantalla de un artículo de revista que tenía exactamente lo que quiero: ingrese la descripción de la imagen aquí

También me gustaría saber cómo usaría el software que el respondedor menciona para crear tal trama.

BH2017
fuente
77
Lo que usted llama "el intervalo de confianza superior estándar, el intervalo de confianza inferior, la media y los gráficos de cuadro que muestran el rango de datos" no son gráficos de cuadro estándar. El diagrama de caja estándar muestra la mediana, cuartiles, mínimo y máximo y, a menudo, otros detalles.
Nick Cox
1
@Nick Right: ¿pero cómo se llaman realmente estos gráficos? (No estoy seguro)
whuber
66
Este tipo de diagrama es estándar (sin embargo, no es un diagrama de caja) y puede ser producido por todos los paquetes estadísticos principales: Stata, SAS, R , MATLAB. Supongo que también podrías hacerlo con Excel.
COOLSerdash
1
@COOLSerdash genial! ¿Podría escribir una respuesta para MATLAB ya que ya tengo MATLAB?
BH2017
66
Llamaría a estos gráficos de intervalos de confianza, pero no todos los gráficos realmente necesitan un nombre distinto. Sin embargo, cada trama merece un título de texto ...
Nick Cox

Respuestas:

9

En MATLAB, es posible que desee probar la función de la barra de error : http://www.mathworks.de/de/help/matlab/ref/errorbar.html

Alternativamente, puede hacerlo de la manera tonta y manual. Por ejemplo, dada una matriz de puntos de datos "a", puede calcular sus medias usando la función m = media (a), calcular sus CI (dependiendo de qué CI necesita) y trazar los resultados a mano.

Demostración si ya conoce la media y el IC, suponiendo que los IC están en una matriz CI (primera y segunda columna) y las medias están en una matriz 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

Demostración en el caso de que conozca mediciones individuales, para un experimento de medidas repetidas, 3+ condiciones, una condición por columna, un sujeto por línea en la matriz a, sin muestras faltantes, IC 95% según la prueba de MATLAB () :

[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
fuente
Lea mi última edición, lo siento, pero algunas personas que me molestan muchísimo, eliminaron el hecho de que solo conozco el IC del 95% y no quiero decir datos adicionales.
BH2017
@BrentonHorne ¿el enlace a la función de barra de error no ayudó? Parece ser exactamente lo que quieres.
Peter Ellis
Como Peter dijo, usa errorbar () entonces. O use la secuencia de comandos que escribí, pero ignore la primera línea con la prueba t y simplemente alimente la media y el CI directamente. Lo editaré en supongo.
jona
@BrentonHorne Para ser justos, nunca discutiste el tema extensamente ni siquiera lo mencionaste en el cuerpo de la pregunta. Estaba implícito en el título, pero este título también menciona erróneamente los diagramas de caja, que es el problema que la edición intentó corregir. Es desafortunado que la palabra "solo" desapareció en el proceso, pero nadie la editó a propósito una gran parte de su pregunta. Además, la respuesta contenía una solución y el resto del texto podría ser interesante para otros lectores.
Gala
Ejecuté el código, salió bien, el problema es que me gustaría si hubiera algún medio por el cual pudiera unir el CI superior y el CI inferior con una línea como en la captura de pantalla en mi pregunta.
BH2017
13

Mira si esto te ayuda. Solución R:

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)

ingrese la descripción de la imagen aquí

Andre Silva
fuente
¿Y cómo ejecuto tal código? Soy totalmente nuevo en R, por lo que tendrás que guiarme porque no tengo ni idea.
BH2017
3
Puedo ayudarlo a darle una oportunidad, pero primero debe seguir dos pasos: i) instalar R Studio en su PC, ii) proporcionar un ejemplo reproducible: stackoverflow.com/questions/5963269/…
Andre Silva
@AndreSilva, creo que hiciste un esfuerzo adicional allí. Gran apoyo y tutoría!
doug.numbers
Esto es lo que obtuve por ejecutar su código i.stack.imgur.com/yrZaJ.png
BH2017
@BrentonHome. Extraño. Acabo de probar y funcionó. Las barras de "error" no aparecen. ¿Instalaste el plotrixpaquete? Agregué una línea de comando del programa en el código que instala el paquete plotrix. Por favor, inténtalo de nuevo y hazlo saber.
Andre Silva
7

Este tipo de trama en R usando ggplot2, aunque es posible que tenga que manipular el tamaño de fuente del eje:

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

ingrese la descripción de la imagen aquí

Fomite
fuente
2

En uso Stata serrbaro ciplot(SSC) o eclplot(Stata Journal, SSC).

Nick Cox
fuente
2

Suponiendo que tiene acceso a los datos originales, puede hacerlo en R con la función lineplot.CI en la biblioteca de sciplot

Ejemplo con el conjunto de datos mtcars:

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

Tenga en cuenta que lineplot.CI por defecto traza barras SE (se puede cambiar definiendo una nueva función con el argumento ci.fun para trazar intervalos de IC del 95%)

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
fuente
1

Esto podría hacerse en R con points()(o plot(..., type="p")) y segments(). También puede haber funciones R diseñadas para crear los CI para usted, pero pueden requerir los datos originales. Los múltiples paneles en la misma figura creada con par(mfrow=c(4,1)). Si no conoce ninguna R, esto sería difícil de hacer fácilmente (como en, tendría que aprender un poco más R o conseguir que alguien lo ayude con su conjunto de datos específico).

rbatt
fuente
1

GraphPad Prism puede hacer fácilmente este tipo de gráfico, trazando barras de error a partir de los valores de error que ingrese. Cree una tabla agrupada formateada para el ingreso de la media, - error y + error.

Harvey Motulsky
fuente
¿Es posible obtener una copia gratuita que no sea solo una versión de prueba de 30 días?
BH2017
1
@BrentonHorne: No. No es software libre.
Harvey Motulsky