diff --git a/apps/form-builder/src/components/FormSubmissions/NumericQuestionAnalytics/index.tsx b/apps/form-builder/src/components/FormSubmissions/NumericQuestionAnalytics/index.tsx index 25e52b7..25fc48a 100644 --- a/apps/form-builder/src/components/FormSubmissions/NumericQuestionAnalytics/index.tsx +++ b/apps/form-builder/src/components/FormSubmissions/NumericQuestionAnalytics/index.tsx @@ -16,12 +16,15 @@ export default function NumericQuestionAnalytics({ question, responses, }: Props) { - const { mean, median, mode } = useMemo(() => { + const { mean, median, mode, standardDeviation } = useMemo(() => { let mean: number; let median: number; + let standardDeviation: number; let mode: number[] = []; const numbers: number[] = []; let total = 0; + let sdTotal = 0; + let stdMean: number; const occurrences: number[] = []; let maxOccur = 2; @@ -35,6 +38,11 @@ export default function NumericQuestionAnalytics({ const number = questionResponse.answer; total += number; numbers.push(number); + + // calculate mean for std + stdMean = ((total / numbers.length) * 100) / 100; + sdTotal += Math.pow(number - stdMean, 2); + if (!occurrences[number]) occurrences[number] = 0; occurrences[number]++; } @@ -68,10 +76,17 @@ export default function NumericQuestionAnalytics({ } }); + // calculate standard deviation + standardDeviation = Math.sqrt(sdTotal / numbers.length); + + // Rounds standard deviation to hundredths place + standardDeviation = Math.round(standardDeviation * 100) / 100; + return { mean, mode, median, + standardDeviation, }; }, [responses]); @@ -88,6 +103,9 @@ export default function NumericQuestionAnalytics({ Mode: {mode.length ? mode.join(', ') : 'None'} + + Standard Deviation: {standardDeviation} + ); }