- use strcmp, strcmpi to compare strings, not ismember.
- use dot-indexing with tables instead of { }
- You can use indexing directly in input arguments rather than storing indexed results as variables (although that's fine too unless your tables are very big).
Writing more efficient Matlab code to test Null hypothesis (T and P values)
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Askic V
am 21 Jul. 2022
Beantwortet: Askic V
am 21 Jul. 2022
Hello Matlab experts,
I have data given in a table shown in the attached picture. What I need to do is to extract math score for female and male students and to test the Null hypothesis that there is no significant difference in the scores.
This is my Matlab code that works and provides expected results. I wonder if this can be writte more efficient or shorter.
% Read the table from the csv file
table = readtable('scores.csv');
% Determine indicies for 'female'
idf = find(ismember(table{:,1}, 'female'))
% Determine indicies for 'male'
idm = find(ismember(table{:,1}, 'male'))
% Extract math scores
math_scores = table{:,6};
% Separate femal scores from male scores
female_scores = math_scores(idf);
male_scores = math_scores(idm);
% Perform testing
[h,p,CI,STATS] = ttest2(male_scores, female_scores)
fprintf('T values = %g\n', STATS.tstat)
fprintf('P values = %g\n', p)
0 Kommentare
Akzeptierte Antwort
Adam Danz
am 21 Jul. 2022
Bearbeitet: Adam Danz
am 21 Jul. 2022
Assuming your table has variable names shown in your image,
% Read the table from the csv file
table = readtable('scores.csv');
isMale = strcmpi(table.gender, 'male');
[h,p,CI,STATS] = ttest2(table.mathScore(isMale), table.mathScore(~isMale));
if gender is not binary,
isMale = strcmpi(table.gender, 'male');
isFemale = strcmpi(table.gender, 'female');
[h,p,CI,STATS] = ttest2(table.mathScore(isMale), table.mathScore(isFemale));
Lesson learned:
0 Kommentare
Weitere Antworten (1)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!