- Ensure your data is organized in a table or matrix where each row represents an observation, and columns represent your variables (sensor, condition, class, and features).
- Use MATLAB's ''anovan" function to perform the ANOVA for each feature. You'll need to pass your independent variables ('sensor', 'condition', 'class') and your dependent variable (each feature) to the function.
- Use MATLAB's plotting functions to visualize the means and standard deviations for the 'condition' and 'class' of each device.
Plot 3-way anova for given variable
25 views (last 30 days)
Show older comments
Hello,
I have at my disposal features matrix including 12 variable. I would like to perform anova analysis for 3 variables, namely sensor, condition, class for each remaining feature separately. After that I would like to plot obtained 3-way anova results (means with standard deviations) for condition and class for each device separately. How to prepare such separated plots for device presenting conditiion and class?
Regards
E
0 Comments
Answers (1)
Abhas
on 28 Oct 2024 at 4:03
Edited: Abhas
on 28 Oct 2024 at 4:04
To perform a three-way ANOVA in MATLAB and plot the results for each device separately, you can follow these steps.
Here's an example code that demonstrates these steps. We'll create a dataset with 3 sensors, 2 conditions, 3 classes, and 3 features:
% Example data setup
rng(0); % For reproducibility
% Parameters
numObservations = 100;
sensors = {'Sensor1', 'Sensor2', 'Sensor3'};
conditions = {'Condition1', 'Condition2'};
classes = {'Class1', 'Class2', 'Class3'};
features = {'Feature1', 'Feature2', 'Feature3'};
% Generate random data
dataTable = table;
dataTable.Sensor = sensors(randi(length(sensors), numObservations, 1))';
dataTable.Condition = conditions(randi(length(conditions), numObservations, 1))';
dataTable.Class = classes(randi(length(classes), numObservations, 1))';
% Simulate feature data
dataTable.Feature1 = randn(numObservations, 1) + 5;
dataTable.Feature2 = randn(numObservations, 1) + 10;
dataTable.Feature3 = randn(numObservations, 1) + 15;
% Perform ANOVA and Plotting
for i = 1:length(features)
feature = features{i};
% Prepare data for ANOVA
y = dataTable.(feature);
g1 = dataTable.Sensor;
g2 = dataTable.Condition;
g3 = dataTable.Class;
% Perform three-way ANOVA
[p, tbl, stats] = anovan(y, {g1, g2, g3}, 'model', 'interaction', ...
'varnames', {'Sensor', 'Condition', 'Class'});
% Plotting results
for j = 1:length(sensors)
sensor = sensors{j};
% Filter data for the current sensor
sensorData = dataTable(strcmp(dataTable.Sensor, sensor), :);
% Calculate means and standard deviations
means = zeros(length(conditions), length(classes));
stddevs = zeros(length(conditions), length(classes));
for k = 1:length(conditions)
for l = 1:length(classes)
subset = sensorData(strcmp(sensorData.Condition, conditions{k}) & ...
strcmp(sensorData.Class, classes{l}), :);
means(k, l) = mean(subset.(feature));
stddevs(k, l) = std(subset.(feature));
end
end
% Plot
figure;
hold on;
for k = 1:length(conditions)
errorbar(1:length(classes), means(k, :), stddevs(k, :), '-o', ...
'DisplayName', ['Condition ' num2str(k)]);
end
hold off;
title(['Feature: ' feature ' for Sensor: ' sensor]);
xlabel('Class');
ylabel('Mean ± SD');
xticks(1:length(classes));
xticklabels(classes);
legend('show');
end
end
This code runs correctly in MATLAB, generating plots for each sensor showing the means and standard deviations of the features for different conditions and classes.
You may refer to the below MathWorks documentation link to perform N-way ANOVA: https://www.mathworks.com/help/stats/anovan.html
0 Comments
See Also
Categories
Find more on Analysis of Variance and Covariance 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!