Tracer des barres d'intervalle de confiance à partir de statistiques récapitulatives

8

Un peu comme une boîte à moustaches. Je ne veux pas nécessairement dire l'intervalle de confiance supérieur standard, l'intervalle de confiance inférieur, la moyenne et les diagrammes en boîte montrant la plage de données, mais je veux dire comme un diagramme en boîte avec seulement les trois éléments de données: l'intervalle de confiance à 95% et la moyenne .

Voici une capture d'écran d'un article de revue qui contenait exactement ce que je voulais: entrez la description de l'image ici

J'aimerais aussi savoir comment j'utiliserais le logiciel mentionné par le répondeur pour créer un tel complot.

BH2017
la source
7
Ce que vous appelez "l'intervalle de confiance supérieur standard, l'intervalle de confiance inférieur, la moyenne et les diagrammes en boîte montrant la plage de données" ne sont pas du tout des diagrammes en boîte standard. Le diagramme standard montre la médiane, les quartiles, le minimum et le maximum et souvent d'autres détails.
Nick Cox
1
Droit @ Nick: mais ce sont ces graphiques réellement appelés? (Je ne suis pas sûr.)
whuber
6
Ce type de graphique est standard (ce n'est pas un graphique en boîte, cependant) et peut être produit par tous les principaux progiciels statistiques: Stata, SAS, R , MATLAB. Je suppose que vous pouvez également le faire avec Excel.
COOLSerdash
1
@COOLSerdash génial! Pourriez-vous écrire une réponse pour MATLAB puisque j'ai déjà MATLAB?
BH2017
6
J'appellerais ces tracés d'intervalle de confiance, mais tous les tracés n'ont pas vraiment besoin d'un nom distinct. Chaque intrigue mérite une légende de texte, cependant ....
Nick Cox

Réponses:

9

Dans MATLAB, vous voudrez peut-être essayer la fonction de la barre d'erreur : http://www.mathworks.de/de/help/matlab/ref/errorbar.html

Alternativement, vous pouvez le faire de manière stupide et manuelle. Par exemple, étant donné une matrice de points de données "a", vous pouvez calculer vos moyennes en utilisant la fonction m = moyenne (a), calculer vos IC (en fonction de l'IC dont vous avez besoin) et tracer les résultats à la main.

Démonstration si vous connaissez déjà la moyenne et l'IC, en supposant que les IC sont dans une matrice CI (première et deuxième colonne) et que les moyennes sont dans une matrice 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

Démonstration dans le cas où vous connaissez des mesures individuelles, pour une expérience de mesures répétées, 3+ conditions, une condition par colonne, un sujet par ligne dans la matrice a, aucun échantillon manquant, IC à 95% comme par le test 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
la source
Lisez mon dernier montage, je suis désolé, mais certaines personnes qui me dérangent vraiment, ont édité le fait que je ne connais que l'IC à 95% et ne signifient aucune donnée supplémentaire.
BH2017
@BrentonHorne le lien vers la fonction de la barre d'erreur n'a-t-il pas aidé? Cela semble être exactement ce que vous voulez.
Peter Ellis
Comme l'a dit Peter, utilisez alors errorbar () . Ou utilisez le script que j'ai écrit, mais ignorez la première ligne avec le ttest et alimentez-le simplement avec le moyen et le CI directement. Je vais l'éditer dans je suppose.
jona
@BrentonHorne Pour être honnête, vous n'avez jamais longuement discuté de ce point ni même le mentionnez du tout dans le corps de la question. Cela était sous-entendu par le titre, mais ce titre mentionnait également par erreur des tracés de boîte, qui est le problème que l'édition a essayé de résoudre. Il est regrettable que le mot «seulement» ait disparu au cours du processus, mais personne n'a délibérément édité une grande partie de votre question. En outre, la réponse contenait une solution et le reste du texte pourrait être intéressant pour d'autres lecteurs.
Gala du
J'ai exécuté le code, cela s'est bien passé, le problème est que j'aimerais qu'il y ait un moyen de joindre le CI supérieur et le CI inférieur avec une ligne comme dans la capture d'écran de ma question.
BH2017
13

Regardez si cela vous aide. Solution 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)

entrez la description de l'image ici

Andre Silva
la source
et comment exécuter un tel code? Je suis totalement nouveau pour R, vous devrez donc me l'expliquer car je ne sais rien.
BH2017
3
Je peux vous aider à donner un coup de feu, mais vous devez d'abord suivre deux étapes: i) installer R Studio sur votre PC, ii) fournir un exemple reproductible: stackoverflow.com/questions/5963269/…
Andre Silva
@AndreSilva, je pense que vous avez fait un effort supplémentaire. Excellent soutien et mentorat!
doug.numbers
C'est ce que j'ai obtenu pour exécuter votre code i.stack.imgur.com/yrZaJ.png
BH2017
@BrentonHome. Étrange. Je viens de tester et cela a fonctionné. Les barres "d'erreur" n'apparaissent pas. Avez-vous installé le plotrixcolis? J'ai ajouté une ligne de commande de programme dans le code qui installe le package plotrix. Veuillez réessayer et faites le savoir.
Andre Silva
7

Ce type de tracé dans R à l'aide de ggplot2, bien que vous deviez peut-être jouer avec la taille de police de l'axe:

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

entrez la description de l'image ici

Fomite
la source
2

Dans Stata, utilisez serrbarou ciplot(SSC) ou eclplot(Stata Journal, SSC).

Nick Cox
la source
2

En supposant que vous ayez accès aux données d'origine, vous pouvez le faire dans R avec la fonction lineplot.CI dans la bibliothèque sciplot

Exemple avec l'ensemble de données mtcars:

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

Notez que lineplot.CI trace par défaut les barres SE (il peut être modifié en définissant une nouvelle fonction avec l'argument ci.fun pour tracer des intervalles IC à 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
la source
1

Cela pourrait être fait en R avec points()(ou plot(..., type="p")) et segments(). Il peut également y avoir des fonctions R conçues pour créer les CI pour vous, mais celles-ci peuvent nécessiter les données d'origine. Les multiples panneaux de la même figure créés avec par(mfrow=c(4,1)). Si vous ne connaissez pas de R, cela serait difficile à faire facilement (comme dans, vous devrez apprendre un peu plus de R ou demander à quelqu'un de vous aider avec votre ensemble de données spécifique).

rbatt
la source
1

GraphPad Prism peut facilement créer ce type de graphique, en traçant des barres d'erreur à partir des valeurs d'erreur que vous entrez. Créez un tableau groupé formaté pour l'entrée de la moyenne, - erreur et + erreur.

Harvey Motulsky
la source
Est-il possible d'en obtenir une copie gratuite qui n'est pas seulement une version d'essai de 30 jours?
BH2017
1
@BrentonHorne: Non. Ce n'est pas un logiciel libre.
Harvey Motulsky