-
Notifications
You must be signed in to change notification settings - Fork 3
/
TIPI.score.js
77 lines (61 loc) · 2.14 KB
/
TIPI.score.js
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
function normalize(array, minVal, maxVal) {
return array.map((val) => (val - minVal) / (maxVal - minVal));
}
function reverseCode(value, minVal, maxVal) {
const floatVal = parseFloat(value);
if (Number.isNaN(floatVal)) return undefined;
return maxVal - (value - minVal);
}
function sum(array) {
return array.reduce((acc, val) => acc + val, 0);
}
function mean(array) {
return sum(array) / array.length;
}
export default function scoreFunc(responses) {
const minVal = 1;
const maxVal = 7;
const rawExtroversionValues = [
responses["extroversion"],
reverseCode(responses["quietness"], minVal, maxVal),
].map(parseFloat);
const rawAgreeablenessValues = [
reverseCode(responses["criticalness"], minVal, maxVal),
responses["sympathy"],
].map(parseFloat);
const rawConscientiousnessValues = [
responses["dependability"],
reverseCode(responses["carelessness"], minVal, maxVal),
].map(parseFloat);
const rawEmotionalStabilityValues = [
reverseCode(responses["anxiety"], minVal, maxVal),
responses["calmness"],
].map(parseFloat);
const rawOpennessToExperienceValues = [
responses["openness"],
reverseCode(responses["conventionality"], minVal, maxVal),
].map(parseFloat);
const result = {
rawExtroversion: mean(rawExtroversionValues).toFixed(3),
rawAgreeableness: mean(rawAgreeablenessValues).toFixed(3),
rawConscientiousness: mean(rawConscientiousnessValues).toFixed(3),
rawEmotionalStability: mean(rawEmotionalStabilityValues).toFixed(3),
rawOpennessToExperience: mean(rawOpennessToExperienceValues).toFixed(3),
normExtroversion: mean(
normalize(rawExtroversionValues, minVal, maxVal)
).toFixed(3),
normAgreeableness: mean(
normalize(rawAgreeablenessValues, minVal, maxVal)
).toFixed(3),
normConscientiousness: mean(
normalize(rawConscientiousnessValues, minVal, maxVal)
).toFixed(3),
normEmotionalStability: mean(
normalize(rawEmotionalStabilityValues, minVal, maxVal)
).toFixed(3),
normOpennessToExperience: mean(
normalize(rawOpennessToExperienceValues, minVal, maxVal)
).toFixed(3),
};
return result;
}