Plotando barras de intervalo de confiança a partir de estatísticas resumidas


8

Um pouco como um gráfico de caixa. Não quero dizer necessariamente o intervalo de confiança superior padrão, o intervalo de confiança mais baixo, a média e o gráfico de exibição de intervalo de dados, mas como um gráfico de caixa com apenas três dados: o intervalo de confiança e a média de 95% .

Esta é uma captura de tela de um artigo de jornal que tinha exatamente o que eu quero: insira a descrição da imagem aqui

Eu também gostaria de saber como usaria o software mencionado pelo respondente para criar esse enredo.


7
O que você chama de "intervalo de confiança superior padrão, intervalo de confiança mais baixo, média e gráficos de exibição de intervalo de dados" não são gráficos de caixa padrão. O gráfico de caixa padrão mostra mediana, quartis, mínimo e máximo e, muitas vezes, outros detalhes.
19413 Nick Cox

1
@ Nick Right: mas como são realmente chamados esses gráficos? (Não tenho certeza.)
whuber

6
Esse tipo de gráfico é padrão (embora não seja um gráfico de caixa) e pode ser produzido por todos os principais pacotes estatísticos: Stata, SAS, R , MATLAB. Eu acho que você poderia fazê-lo com o Excel também.
amigos estão dizendo sobre clínica de reabilitação

1
@COOLSerdash great! Você poderia escrever uma resposta para o MATLAB, já que eu já tenho o MATLAB?
BH2017

6
Eu chamaria esses gráficos de intervalo de confiança, mas nem todo gráfico realmente precisa de um nome distinto. Porém, toda trama merece uma legenda ...
Nick Cox

Respostas:


9

No MATLAB, você pode tentar a função da barra de erros : http://www.mathworks.de/de/help/matlab/ref/errorbar.html

Como alternativa, você pode fazê-lo da maneira burra e manual. Por exemplo, dada uma matriz de pontos de dados "a", você pode calcular suas médias usando a função m = média (a), calcular seus ICs (dependendo do IC de que você precisa) e plotar os resultados manualmente.

Demonstração se você já conhece a média e o IC, assumindo que os ICs estão em um IC da matriz (primeira e segunda coluna) e os meios estão em uma 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

Demonstração no caso em que você conhece medidas individuais, para um experimento de medidas repetidas, mais de 3 condições, uma condição por coluna, um assunto por linha na matriz a, sem amostras ausentes, IC 95% conforme o teste do 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

Leia minha edição mais recente, desculpe, mas algumas pessoas que me incomodam muito, editaram o fato de eu conhecer apenas o IC de 95% e não ter dados adicionais.
BH2017

@BrentonHorne o link para a função errorbar não ajudou? Parece ser exatamente o que você deseja.
22613 Peter Ellis

Como Peter disse, use errorbar () então. Ou use o script que escrevi, mas ignore a primeira linha com o ttest e apenas alimente o IC e o meio diretamente. Vou editá-lo, eu acho.
Jona

@BrentonHorne Para ser justo, você nunca discutiu o assunto extensivamente ou sequer o mencionou no corpo da questão. Isso estava implícito no título, mas esse título também mencionava, por engano, gráficos de caixas, que é o problema que a edição tentou corrigir. É lamentável que a palavra "apenas" tenha desaparecido no processo, mas ninguém a editou propositalmente em grande parte da sua pergunta. Além disso, a resposta continha uma solução e o restante do texto poderia ser interessante para outros leitores.
Gala

Eu corri o código que correu bem, o problema é que eu gostaria que houvesse algum meio pelo qual eu pudesse ingressar no IC superior e no IC inferior com uma linha como na captura de tela da minha pergunta.
BH2017

13

Veja se isso ajuda você. Solução 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)

insira a descrição da imagem aqui


e como executo esse código? Eu sou totalmente novo em R, então você terá que me guiar por isso, porque eu não tenho noção.
BH2017

3
Eu posso ajudá-lo a dar um tiro, mas em primeiro lugar você precisa seguir duas etapas: i) instalar R Studio em seu PC, ii) fornecem um exemplo reproduzível: stackoverflow.com/questions/5963269/...
Andre Silva

@AndreSilva, acho que você foi além. Grande apoio e orientação!
Doug.numbers

Isto é o que eu recebi para executar seu código i.stack.imgur.com/yrZaJ.png
BH2017

@BrentonHome. Estranho. Acabei de testar e funcionou. As barras de "erro" não estão aparecendo. Você instalou o plotrixpacote? Eu adicionei uma linha de comando do programa no código que instala o pacote plotrix. Por favor, tente novamente e informe.
Andre Silva

7

Esse tipo de plotagem em R usando ggplot2, embora você possa ter que mexer no tamanho da fonte do eixo:

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

insira a descrição da imagem aqui


2

Em Stata, use serrbarou ciplot(SSC) ou eclplot(Stata Journal, SSC).


2

Supondo que você tenha acesso aos dados originais, você pode fazer isso em R com a função lineplot.CI na biblioteca de sciplot

Exemplo com o conjunto de dados mtcars:

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

Observe que lineplot.CI, por padrão, desenha barras SE (pode ser alterado definindo uma nova função com o argumento ci.fun para plotar intervalos de IC de 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)))

1

Isso pode ser feito em R com points()(ou plot(..., type="p")) e segments(). Também pode haver funções R projetadas para criar os ICs para você, mas elas podem exigir os dados originais. Os vários painéis na mesma figura criados com par(mfrow=c(4,1)). Se você não conhece nenhum R, seria difícil fazer isso facilmente (como em, você precisaria aprender um pouco mais de R ou conseguir alguém para ajudar com seu conjunto de dados específico).


1

O GraphPad Prism pode facilmente criar esse tipo de gráfico, plotando barras de erro a partir dos valores de erro inseridos. Crie uma tabela agrupada formatada para entrada de média, - erro e + erro.


É possível obter uma cópia gratuita que não seja apenas uma versão de avaliação de 30 dias?
BH2017

1
@BrentonHorne: Não. Não é um software livre.
Harvey Motulsky
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.