- In the loop where you try to calculate "sigma_f_bar", you are passing f(n_col) to the "SEM" function, which suggests that you are trying to pass the entire n_col-th column of f. However, the syntax f(n_col) might not be correct if f is a matrix; it should be f(:, n_col) in case of matrix to select the entire column.
- In The "weighted_average" function, the issue is that the code to handle matrices might seem to have some issue. The w variable is calculated as a scalar, but it seems like you want to calculate a weight for each column of mat.
How to calculate standard error of mean and weighted average?
56 views (last 30 days)
Show older comments
I can't seem to get the standard error of mean or weighted average code to work for the given arrays
for ii = 1:n_col
sigma_f_bar(ii) = SEM(f(n_col),n);
end
[f_wav,sigma_f_wav] = weighted_average(f);
function sigma_x_bar = SEM(x,n)
sigma_x_bar = std(x)/sqrt(n);
end
function [x_wav,sigma_wav] = weighted_average(mat)
w = 1/(mean(std(mat))^2);
x_wav = sum(w.*mat)/sum(w);
sigma_wav = 1/sqrt(sum(w));
end
0 Comments
Answers (1)
Rupesh
on 15 Feb 2024
Edited: Rupesh
on 15 Feb 2024
Hi Ananya
After reviewing code, I realised that there are 2 main issues which are causing the errors, one is loop iteration based upon assumption that you are dealing with matrices which is subset of array and other one is weighted average function.Also this will give you better idea about calculation in multiple dimensions.
Below is modified version of code which gives the desired output .
% Standard Error of the Mean function
function sigma_x_bar = SEM(x, n)
sigma_x_bar = std(x) / sqrt(n);
end
% Weighted Average function
function [x_wav, sigma_wav] = weighted_average(mat)
n = size(mat, 1); % Number of observations
weights = 1 ./ (std(mat).^2); % Weights for each dataset (column)
x_wav = sum(bsxfun(@times, weights, mat)) / sum(weights); % Weighted average for each dataset
sigma_wav = 1 / sqrt(sum(weights)); % Standard error for the weighted average
end
You can see above that how i modified the "weighted_average function" and made sure that whatever mathematical operation are involved are done by taking into consideration about Matrix.
% Example matrix f with 5 observations and 3 datasets (columns)
f = rand(5, 3);
% Number of observations (rows) and datasets (columns) in f
n = size(f, 1); % Number of observations
n_col = size(f, 2); % Number of datasets
% Preallocate the array for standard error of the mean for each dataset
sigma_f_bar = zeros(1, n_col);
% Calculate the standard error of the mean for each dataset
for ii = 1:n_col
sigma_f_bar(ii) = SEM(f(:, ii), n);
end
% Calculate the weighted average and its standard error for the datasets
[f_wav, sigma_f_wav] = weighted_average(f);
% Display the results
disp('Standard Error of the Mean for each dataset:');
disp(sigma_f_bar);
disp('Weighted average of the datasets:');
disp(f_wav);
disp('Standard error of the weighted average:');
disp(sigma_f_wav);
Below is the output you can expect after execution of above script.
Standard Error of the Mean for each dataset:
0.1317 0.1050 0.1136
Weighted average of the datasets:
0.4588 1.3673 1.1296
Standard error of the weighted average:
0.1488
You can refer to following documents for more information regarding Matrix Operations for better understanding.
Hope this helps!
0 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!