|
|
@@ -1,9 +1,12 @@
|
|
|
import differenceInDays from 'date-fns/differenceInDays';
|
|
|
-import { Cases, Data } from '../types';
|
|
|
+import addDays from 'date-fns/addDays';
|
|
|
+import { Cases, Data, FutureCase } from '../types';
|
|
|
|
|
|
// Start the regression line after this many cases have been recorded in total
|
|
|
const regressionStart = 50;
|
|
|
|
|
|
+const futureDays = 10;
|
|
|
+
|
|
|
const mean = (values: number[]): number =>
|
|
|
values.reduce((last, value) => last + value, 0) / values.length;
|
|
|
|
|
|
@@ -61,9 +64,15 @@ export function getExponentialRegression(cases: Cases): Data {
|
|
|
return Math.exp(slope * xValue + intercept);
|
|
|
};
|
|
|
|
|
|
- return cases.map(({ date, value }) => ({
|
|
|
+ const lastDate = cases[cases.length - 1].date;
|
|
|
+
|
|
|
+ const future: FutureCase[] = new Array(futureDays)
|
|
|
+ .fill(0)
|
|
|
+ .map((_, index) => ({ date: addDays(lastDate, index + 1) }));
|
|
|
+
|
|
|
+ return [...cases, ...future].map(({ date, ...rest }) => ({
|
|
|
date: date.getTime(),
|
|
|
- value,
|
|
|
regression: regressionAtDate(date),
|
|
|
+ ...rest,
|
|
|
}));
|
|
|
}
|