How to do Multichannel statistical analysis?
I just need an example:
%% Load data
% Lab says use readtable, then convert to array
T = readtable("Section2.csv");
data = table2array(T);
% Assumption: column 1 is time/index, columns 2:11 are the 10 subjects
X = data(:,2:11); % Nx10 matrix (each column = one subject)
%% =========================
% [3.2] Central tendency + dispersion for each subject
% mean, median, range, std (one value per subject/column)
% =========================
mean_data = mean(X, ‘omitnan’); % 1×10
median_data = median(X, ‘omitnan’); % 1×10
% Use max-min for range (robust if MATLAB "range" gives issues)
range_data = max(X, [], 1) – min(X, [], 1); % 1×10
std_data = std(X, 0, ‘omitnan’); % 1×10 (0 = sample std)
%% =========================
% [3.2] Find which subject has max/min for each metric
% Lab asks to do this by code (not by looking)
% =========================
[max_mean, subj_max_mean] = max(mean_data);
[min_mean, subj_min_mean] = min(mean_data);
[max_median, subj_max_median] = max(median_data);
[min_median, subj_min_median] = min(median_data);
[max_range, subj_max_range] = max(range_data);
[min_range, subj_min_range] = min(range_data);
[max_std, subj_max_std] = max(std_data);
[min_std, subj_min_std] = min(std_data);
% Display summary
fprintf(‘n=== Subject Extremes (Subjects 1-10) ===n’);
fprintf(‘Mean : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_mean, subj_max_mean, min_mean, subj_min_mean);
fprintf(‘Median : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_median, subj_max_median, min_median, subj_min_median);
fprintf(‘Range : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_range, subj_max_range, min_range, subj_min_range);
fprintf(‘Std Dev: max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_std, subj_max_std, min_std, subj_min_std);
%% =========================
% [3.2] Time spent > (mean + 20 bpm), in HOURS
% Lab says each row = 5 seconds
% =========================
function hours = time_over(colVec, meanVal)
% colVec = one subject’s HR time series (Nx1)
% meanVal = mean HR for that subject
count = sum(colVec > (meanVal + 20)); % number of samples above threshold
hours = (count * 5) / 3600; % 5 s/sample -> hours
end
% Compute for all 10 subjects
hours_over = zeros(1,10);
for s = 1:10
hours_over(s) = time_over(X(:,s), mean_data(s));
end
% Optional: display results neatly
fprintf(‘n=== Time above (mean + 20 bpm) ===n’);
for s = 1:10
fprintf(‘Subject %d: %.3f hoursn’, s, hours_over(s));
end
%% Optional: put everything into a table (nice for report/checking)
subject_id = (1:10)’;
resultsTbl = table(subject_id, mean_data’, median_data’, range_data’, std_data’, hours_over’, …
‘VariableNames’, {‘Subject’,’MeanHR’,’MedianHR’,’RangeHR’,’StdHR’,’HoursAboveMeanPlus20′});
disp(resultsTbl);I just need an example:
%% Load data
% Lab says use readtable, then convert to array
T = readtable("Section2.csv");
data = table2array(T);
% Assumption: column 1 is time/index, columns 2:11 are the 10 subjects
X = data(:,2:11); % Nx10 matrix (each column = one subject)
%% =========================
% [3.2] Central tendency + dispersion for each subject
% mean, median, range, std (one value per subject/column)
% =========================
mean_data = mean(X, ‘omitnan’); % 1×10
median_data = median(X, ‘omitnan’); % 1×10
% Use max-min for range (robust if MATLAB "range" gives issues)
range_data = max(X, [], 1) – min(X, [], 1); % 1×10
std_data = std(X, 0, ‘omitnan’); % 1×10 (0 = sample std)
%% =========================
% [3.2] Find which subject has max/min for each metric
% Lab asks to do this by code (not by looking)
% =========================
[max_mean, subj_max_mean] = max(mean_data);
[min_mean, subj_min_mean] = min(mean_data);
[max_median, subj_max_median] = max(median_data);
[min_median, subj_min_median] = min(median_data);
[max_range, subj_max_range] = max(range_data);
[min_range, subj_min_range] = min(range_data);
[max_std, subj_max_std] = max(std_data);
[min_std, subj_min_std] = min(std_data);
% Display summary
fprintf(‘n=== Subject Extremes (Subjects 1-10) ===n’);
fprintf(‘Mean : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_mean, subj_max_mean, min_mean, subj_min_mean);
fprintf(‘Median : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_median, subj_max_median, min_median, subj_min_median);
fprintf(‘Range : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_range, subj_max_range, min_range, subj_min_range);
fprintf(‘Std Dev: max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_std, subj_max_std, min_std, subj_min_std);
%% =========================
% [3.2] Time spent > (mean + 20 bpm), in HOURS
% Lab says each row = 5 seconds
% =========================
function hours = time_over(colVec, meanVal)
% colVec = one subject’s HR time series (Nx1)
% meanVal = mean HR for that subject
count = sum(colVec > (meanVal + 20)); % number of samples above threshold
hours = (count * 5) / 3600; % 5 s/sample -> hours
end
% Compute for all 10 subjects
hours_over = zeros(1,10);
for s = 1:10
hours_over(s) = time_over(X(:,s), mean_data(s));
end
% Optional: display results neatly
fprintf(‘n=== Time above (mean + 20 bpm) ===n’);
for s = 1:10
fprintf(‘Subject %d: %.3f hoursn’, s, hours_over(s));
end
%% Optional: put everything into a table (nice for report/checking)
subject_id = (1:10)’;
resultsTbl = table(subject_id, mean_data’, median_data’, range_data’, std_data’, hours_over’, …
‘VariableNames’, {‘Subject’,’MeanHR’,’MedianHR’,’RangeHR’,’StdHR’,’HoursAboveMeanPlus20′});
disp(resultsTbl); I just need an example:
%% Load data
% Lab says use readtable, then convert to array
T = readtable("Section2.csv");
data = table2array(T);
% Assumption: column 1 is time/index, columns 2:11 are the 10 subjects
X = data(:,2:11); % Nx10 matrix (each column = one subject)
%% =========================
% [3.2] Central tendency + dispersion for each subject
% mean, median, range, std (one value per subject/column)
% =========================
mean_data = mean(X, ‘omitnan’); % 1×10
median_data = median(X, ‘omitnan’); % 1×10
% Use max-min for range (robust if MATLAB "range" gives issues)
range_data = max(X, [], 1) – min(X, [], 1); % 1×10
std_data = std(X, 0, ‘omitnan’); % 1×10 (0 = sample std)
%% =========================
% [3.2] Find which subject has max/min for each metric
% Lab asks to do this by code (not by looking)
% =========================
[max_mean, subj_max_mean] = max(mean_data);
[min_mean, subj_min_mean] = min(mean_data);
[max_median, subj_max_median] = max(median_data);
[min_median, subj_min_median] = min(median_data);
[max_range, subj_max_range] = max(range_data);
[min_range, subj_min_range] = min(range_data);
[max_std, subj_max_std] = max(std_data);
[min_std, subj_min_std] = min(std_data);
% Display summary
fprintf(‘n=== Subject Extremes (Subjects 1-10) ===n’);
fprintf(‘Mean : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_mean, subj_max_mean, min_mean, subj_min_mean);
fprintf(‘Median : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_median, subj_max_median, min_median, subj_min_median);
fprintf(‘Range : max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_range, subj_max_range, min_range, subj_min_range);
fprintf(‘Std Dev: max = %.2f (Subject %d), min = %.2f (Subject %d)n’, …
max_std, subj_max_std, min_std, subj_min_std);
%% =========================
% [3.2] Time spent > (mean + 20 bpm), in HOURS
% Lab says each row = 5 seconds
% =========================
function hours = time_over(colVec, meanVal)
% colVec = one subject’s HR time series (Nx1)
% meanVal = mean HR for that subject
count = sum(colVec > (meanVal + 20)); % number of samples above threshold
hours = (count * 5) / 3600; % 5 s/sample -> hours
end
% Compute for all 10 subjects
hours_over = zeros(1,10);
for s = 1:10
hours_over(s) = time_over(X(:,s), mean_data(s));
end
% Optional: display results neatly
fprintf(‘n=== Time above (mean + 20 bpm) ===n’);
for s = 1:10
fprintf(‘Subject %d: %.3f hoursn’, s, hours_over(s));
end
%% Optional: put everything into a table (nice for report/checking)
subject_id = (1:10)’;
resultsTbl = table(subject_id, mean_data’, median_data’, range_data’, std_data’, hours_over’, …
‘VariableNames’, {‘Subject’,’MeanHR’,’MedianHR’,’RangeHR’,’StdHR’,’HoursAboveMeanPlus20′});
disp(resultsTbl); multichannel statistical analysis MATLAB Answers — New Questions









