-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmathUtils.js
More file actions
121 lines (108 loc) · 3.25 KB
/
mathUtils.js
File metadata and controls
121 lines (108 loc) · 3.25 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
// mathUtils.js
// Fonction de calcul de la moyenne
function calculateMean(arr) {
return arr.length > 0 ? arr.reduce((a, b) => a + b, 0) / arr.length : 0;
}
// Fonction de calcul de la médiane
function calculateMedian(arr) {
const sorted = arr.slice().sort((a, b) => a - b);
const middle = Math.floor(sorted.length / 2);
return sorted.length % 2 !== 0
? sorted[middle]
: (sorted[middle - 1] + sorted[middle]) / 2;
}
// Fonction de calcul du mode
function calculateMode(arr) {
const frequency = {};
let maxFreq = 0;
let mode;a
for (const num of arr) {
frequency[num] = (frequency[num] || 0) + 1;
if (frequency[num] > maxFreq) {
maxFreq = frequency[num];
mode = num;
}
}
return mode;
}
// Fonction de calcul de la variance
function calculateVariance(arr) {
if (arr.length === 0) return 0;
const mean = calculateMean(arr);
const deviations = arr.map((x) => (x - mean) ** 2);
return calculateMean(deviations);
}
// Fonction de calcul de l'écart-type
function calculateStandardDeviation(arr) {
return Math.sqrt(calculateVariance(arr));
}
// Fonction de calcul de l'étendue
function calculateRange(arr) {
return arr.length > 0 ? Math.max(...arr) - Math.min(...arr) : 0;
}
// Fonction de calcul du coefficient de variation
function calculateCoefficientOfVariation(arr) {
const mean = calculateMean(arr);
const stdDev = calculateStandardDeviation(arr);
return mean !== 0 ? (stdDev / mean) * 100 : 0;
}
// Fonction de calcul des quartiles
function calculateQuartiles(arr) {
const sorted = arr.slice().sort((a, b) => a - b);
const Q1 = calculateMedian(sorted.slice(0, Math.floor(sorted.length / 2)));
const Q2 = calculateMedian(sorted);
const Q3 = calculateMedian(sorted.slice(Math.ceil(sorted.length / 2)));
return { Q1, Q2, Q3 };
}
// Fonction de calcul de l'écart interquartile (IQR)
function calculateInterquartileRange(arr) {
const { Q1, Q3 } = calculateQuartiles(arr);
return Q3 - Q1;
}
// Fonction de calcul de l'asymétrie (skewness)
function calculateSkewness(arr) {
const mean = calculateMean(arr);
const stdDev = calculateStandardDeviation(arr);
const n = arr.length;
return (
(n * arr.reduce((acc, val) => acc + (val - mean) ** 3, 0)) /
((n - 1) * (n - 2) * stdDev ** 3)
);
}
// Fonction de calcul de l'aplatissement (kurtosis)
function calculateKurtosis(arr) {
const mean = calculateMean(arr);
const stdDev = calculateStandardDeviation(arr);
const n = arr.length;
return (
(n * (n + 1) * arr.reduce((acc, val) => acc + (val - mean) ** 4, 0)) /
((n - 1) * (n - 2) * (n - 3) * stdDev ** 4) -
(3 * (n - 1) ** 2) / ((n - 2) * (n - 3))
);
}
// Fonction de calcul des statistiques croisées
function calculateCrossTabulation(arr1, arr2) {
const result = {};
arr1.forEach((val1, index) => {
const val2 = arr2[index];
if (!result[val1]) {
result[val1] = {};
}
result[val1][val2] = (result[val1][val2] || 0) + 1;
});
return result;
}
module.exports = {
calculateMean,
calculateMedian,
calculateMode,
calculateVariance,
calculateStandardDeviation,
calculateRange,
calculateCoefficientOfVariation,
calculateQuartiles,
calculateInterquartileRange,
calculateSkewness,
calculateKurtosis,
calculateCrossTabulation, // Nouvelle fonction ajoutée
};