Error bar with CI 95 on bar graph

Hi,
Can anyone tell how to apply CI 95% error bars on grouped bar graph.
Thanks

6 Comments

Adam Danz
Adam Danz on 15 Nov 2019
Edited: Adam Danz on 15 Nov 2019
Which part are you having trouble with?
Do you already have the CI bounds?
Are you unsure what function to use to plot the errorbars?
Do you have the CI bounds, know how to use errorbar() but are unsure how to center them over grouped bar plots?
If you have questions that this link doesn't address, please let us know where you're stuck.
Following is my code
x = 1:10; % Create Data
ym = EE;
N = size(ym,1);
y = mean(ym);
SEM = std(ym) / sqrt(N); % Standard Error Of The Mean
CI95 = SEM * tinv(0.975, N-1); % 95% Confidence Intervals
plot(p_device,EE,'--r');
hold on
errorbar(p_device,EE,CI95)
axis([0 11 ylim])
CI95 generate only one point. EE is a array having values
0.0363 0.0312 0.0274 0.0244 0.0220 0.0200 0.0183 0.0168 0.0155 0.0143
Where is your bar plot in this code?
For now I am testing on plot that can be replaced with bar() command.
Adam Danz
Adam Danz on 15 Nov 2019
Edited: Adam Danz on 15 Nov 2019
Your method of computing CIs (using tinv) requires that your data form a normal distribution. You're also only computing 1-tail of the CI, is that intentional?
I require something like thisconfidence.png

Sign in to comment.

Answers (1)

Here's an anonymous function that computes the 95% CI based on the tinv method which requires that your data approximately form a normal distirbution. See this link for more information on this function.
% x is a vector, matrix, or any numeric array of data. NaNs are ignored.
% p is a the confident level (ie, 95 for 95% CI)
% The output is 1x2 vector showing the [lower,upper] interval values.
CIFcn = @(x,p)std(x(:),'omitnan')/sqrt(sum(~isnan(x(:)))) * tinv(abs([0,1]-(1-p/100)/2),sum(~isnan(x(:)))-1) + mean(x(:),'omitnan');
% Demo
% x = randn(100,1) + 5;
% p = 95;
% CI = CIFcn(x,p)
Here's a demo using your code
EE = [0.0363 0.0312 0.0274 0.0244 0.0220 0.0200 0.0183 0.0168 0.0155 0.0143];
CIFcn = @(x,p)std(x(:),'omitnan')/sqrt(sum(~isnan(x(:)))) * tinv(abs([0,1]-(1-p/100)/2),sum(~isnan(x(:)))-1) + mean(x(:),'omitnan');
CI = CIFcn(EE,96);
% Compute the distance of the upper and lower bounds
CIdist = abs(CI-mean(EE));
% plot
plot(1, mean(EE), 'bo')
hold on
errorbar(1, mean(EE), CIdist(1), CIdist(2))
ylim([0, .05])
grid on

4 Comments

Anum Ali
Anum Ali on 15 Nov 2019
Edited: Anum Ali on 15 Nov 2019
Why its giving only one point
Adam Danz
Adam Danz on 15 Nov 2019
Edited: Adam Danz on 15 Nov 2019
In my answer, EE is a vector of values. The center point is the mean of EE which you can clearly see in my code.
Confidence intervals generally show the range of possible mean values from a distribution. In my answer, I'm only dealing with 1 vector, 1 distribution, 1 mean value, 1 confidence interval.
Now you can apply that to your data but first, I recommend taking a few minutes to understand what's going on in my answer.
In your data, EE is probably the means from several distribtions. You'll want to provide the raw data in the CIFcn function in order to compute the CI.
Ya I get the concept of your solution but now I edited to all data still it gave the error
Error using errorbar (line 70)
X, Y, and error bars all must be the same length.
Error in ra30 (line 206)
errorbar(p_device, EE,CI)
because CI only had two values ? why CI has two values?
Adam Danz
Adam Danz on 15 Nov 2019
Edited: Adam Danz on 15 Nov 2019
I couldn't possibly answer that without knowing what inputs you're providing.
I have no idea what your data look like. Are you provding the CIFcn() function a matrix? a vector? If you're providing a matrix and you'd like to compute the CIs for each column, you'll need to provide each column as input individually or rewrite the function.

Sign in to comment.

Categories

Asked:

on 15 Nov 2019

Edited:

on 9 Dec 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!