-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript2.m
More file actions
123 lines (95 loc) · 6.02 KB
/
script2.m
File metadata and controls
123 lines (95 loc) · 6.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
[recordsDICE, tablesDICE] = readRecords('./Data/DICE/');
[recordsElectrical, tablesElectrical] = readRecords('./Data/Electrical/');
[recordsElectronics, tablesElectronics] = readRecords('./Data/Electronics/');
allRecords = [recordsDICE recordsElectronics];
breakLength = [1];
%minNumberOfSemestersAfterTheBreak = 2; %% does not work anymore
minTotalNumberOfSemesters = 8;
breakSemester = [1:20];
%For all students
% [gpaBeforeBreak, gpaAfterBreak] = calcBeforeAndAfterTheBreakGPA(allRecords, minBreakLength, minNumberOfSemestersAfterTheBreak);
[gpaBeforeBreak, gpaAfterBreak, studentsIndWithBreaks] = calcBeforeAndAfterTheBreakOneSemesterGPA(allRecords, breakLength, breakSemester, minTotalNumberOfSemesters); % minNumberOfSemestersAfterTheBreak
finalGPAWithBreak = calcFinalGPA(allRecords, studentsIndWithBreaks); % final GPA of students with long breaks
[finalGPANoBreak, studentsIndWithNoBreaks] = calcNoBreakGPA(allRecords, minTotalNumberOfSemesters); % final GPA of students with no breaks and minimum studied semesters
%[gpaBeforeSemester, gpaAtSemester] = gpaBeforeAndAtSemester(allRecords, breakSemester, studentsIndWithNoBreaks);
% [gpaNoBreak] = calcNoBreakGPA(allRecords);
% figure, hold on;
% plot(gpaBeforeBreak)
% plot(gpaAfterBreak)
visualizeGPAPDFBeforeAndAfter(gpaBeforeBreak, gpaAfterBreak, '', 'before', 'after');
statisticalAnalysis(gpaBeforeBreak, gpaAfterBreak, 'off');
% visualizeGPAPDFBeforeAndAfter(gpaBeforeSemester, gpaAtSemester,'', 'before', 'after');
% statisticalAnalysis(gpaBeforeSemester, gpaAtSemester, 'off');
[gpaBeforeBreak, gpaAfterBreak, studentsIndWithBreaks] = calcBeforeAndAfterTheBreakOneSemesterGPA(allRecords, minBreakLength, minNumberOfSemestersAfterTheBreak, breakSemester);
finalGPAWithBreak = calcFinalGPA(allRecords, studentsIndWithBreaks); % final GPA of students with long breaks
visualizeGPAPDFBeforeAndAfter(finalGPANoBreak, finalGPAWithBreak,'', 'without break', 'with break');
% test statisticaly whether distributions of the final GPAs with breaks and
% with no breaks are the same or not.
%For DICE
%[gpaBeforeBreak, gpaAfterBreak, studentsInd] = calcBeforeAndAfterTheBreakGPA(recordsDICE, minBreakLength, minNumberOfSemestersAfterTheBreak, breakSemester);
% [gpaBeforeBreak, gpaAfterBreak, studentsInd] = calcBeforeAndAfterTheBreakOneSemesterGPA(recordsDICE, minBreakLength, minNumberOfSemestersAfterTheBreak, breakSemester);
% fGPA = calcFinalGPA(recordsDICE, studentsInd);
% [gpaNoBreak] = calcNoBreakGPA(recordsDICE);
% figure, hold on;
% plot(gpaBeforeBreak)
% plot(gpaAfterBreak)
% visualizeGPAHistogramBeforeAndAfter(gpaBeforeBreak, gpaAfterBreak, ['DICE: GPA before and after long-term break at N = ', num2str(breakSemester) ,' semester'], 'before', 'after');
% visualizeGPAHistogramBeforeAndAfter(gpaNoBreak, fGPA,'DICE: Effect of a break', 'no break', 'break');
% statisticalAnalysis(gpaBeforeBreak, gpaAfterBreak, 'off');
%For Electrical2083.52304212
%[gpaBeforeBreak, gpaAfterBreak] = calcBeforeAndAfterTheBreakGPA(recordsElectrical, minBreakLength, minNumberOfSemestersAfterTheBreak);
%[gpaNoBreak] = calcNoBreakGPA(recordsElectrical);
% figure, hold on;
% plot(gpaBeforeBreak)
% plot(gpaAfterBreak)
%visualizeGPAHistogramBeforeAndAfter(gpaBeforeBreak, gpaAfterBreak, 'Electrical: GPA before and after', 'before', 'after');
%visualizeGPAHistogramBeforeAndAfter(gpaNoBreak, (gpaBeforeBreak + gpaAfterBreak) / 2,'Electrical: Effect of a break', 'no break', 'break');
%statisticalAnalysis(gpaBeforeBreak, gpaAfterBreak, 'off');
%For Electronics
%[gpaBeforeBreak, gpaAfterBreak] = calcBeforeAndAfterTheBreakGPA(recordsElectronics, minBreakLength, minNumberOfSemestersAfterTheBreak);
%[gpaNoBreak] = calcNoBreakGPA(recordsElectronics);
% figure, hold on;
% plot(gpaBeforeBreak)
% plot(gpaAfterBreak)
%visualizeGPAHistogramBeforeAndAfter(gpaBeforeBreak, gpaAfterBreak, 'Electronics: GPA before and after', 'before', 'after');
%visualizeGPAHistogramBeforeAndAfter(gpaNoBreak, (gpaBeforeBreak + gpaAfterBreak) / 2,'Electronics: Effect of a break', 'no break', 'break');
% Class categories
types = {'100', '101', '102', '103', '130', '131', '132', '133', '134', 'ARB', 'ARD', 'SHA', 'SHB', 'INS', 'ITA', 'ITC', 'ITE', 'ITT', 'ITP', 'IFA', 'IFB', 'IFC', 'IFD', 'IFE', 'IMA', 'IMB', 'INA', 'INI', 'INM', 'IDA', 'IMC', 'IME', 'EDU', 'BSM', 'TAM', 'LAN', 'CCT', 'CON', 'HRD', 'MSA', 'MCA', 'MTB', 'MTD', 'MTE', 'MTF','MEB', 'MEC', 'MEF', 'CPA', 'CPC', 'CPS'};
% Select what records you want to use
tempRecordings = recordsElectronics; %recordsDICE, recordsElectrical, recordsElectronics
%build a histogram of classes categories
cathist = buildClassCategoryHistogram(tempRecordings, types);
% remove categories that appear rarely
catInds = find(sum(cathist) >= 10);
rcathist = cathist(:, catInds);
% selected types labels
for k = 1:length(catInds)
stypes{k} = types{catInds(k)};
end
% claculte overall GPA for each student
gpaOveral = calcOverAllGPA(tempRecordings);
% Normalize GPA to [0, 1] to be able to use it as a color
gpaOveralNorm = (gpaOveral - min(gpaOveral)) / (max(gpaOveral) - min(gpaOveral));
[grades, gradeSortedInds] = sort(gpaOveralNorm);
figure, hold on, grid on;
for k = 1:size(tempRecordings,2)
stem3(k * ones(1, size(rcathist(gradeSortedInds(k), :),2)), 1:size(rcathist(gradeSortedInds(k), :),2), rcathist(gradeSortedInds(k), :), 'color', [gpaOveralNorm(gradeSortedInds(k)), 1 - gpaOveralNorm(gradeSortedInds(k)), 0], 'marker', '.')
end
xlabel('students');
ylabel('categories');
zlabel('times');
axis([1, size(tempRecordings,2), 1, length(catInds), 0, max(max(rcathist))]);
ax = gca;
ax.YTick = [1:length(catInds)];
ax.YTickLabel = types(catInds);
set(gca, 'YTickLabelRotation', 45)
% Find principal components
[pc, score, latent, tsquare] = pca(rcathist);
reduced = rcathist * pc(:,1:3);
figure, hold on, grid on;
for k = 1:size(tempRecordings,2)
plot3(reduced(gradeSortedInds(k),1), reduced(gradeSortedInds(k),2), reduced(gradeSortedInds(k),3), 'color', [gpaOveralNorm(gradeSortedInds(k)), 1 - gpaOveralNorm(gradeSortedInds(k)), 0], 'marker', '.', 'markersize', 5);
end
xlabel('component 1');
ylabel('component 2');
zlabel('component 3');