Skip to content

Commit cd71838

Browse files
committed
feat:Implemented the method simulate().
1 parent 1ba34b0 commit cd71838

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

Regressionizer/Regressionizer.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,36 @@ def find_anomalies_by_residuals(self,
437437
self._value = outliers
438438
return self
439439

440+
# ------------------------------------------------------------------
441+
# Simulate
442+
# ------------------------------------------------------------------
443+
def simulate(self, points: (int|list)):
444+
if isinstance(points, int):
445+
min_val = numpy.min(self.take_data()[:, 0])
446+
max_val = numpy.max(self.take_data()[:, 0])
447+
points_list = numpy.linspace(min_val, max_val, points)
448+
return self.simulate(points_list)
449+
450+
if not (isinstance(self.take_regression_quantiles(), dict) and len(self.take_regression_quantiles()) > 1):
451+
raise ValueError("Compute two or more regression quantiles first.")
452+
453+
q_values = self.evaluate(points).take_value()
454+
455+
q_values = dict(sorted(q_values.items()))
456+
qs = list(q_values.keys())
457+
q_values = numpy.transpose(list(q_values.values()))
458+
459+
res = []
460+
for i in range(len(q_values)):
461+
weights = [abs(q_values[i][k + 1] - q_values[i][k]) for k in range(len(q_values[i]) - 1)]
462+
rind = numpy.random.choice(len(weights), size=1, p=weights / numpy.sum(weights))
463+
v = numpy.random.uniform(low=q_values[i][rind], high=q_values[i][rind + 1])
464+
res.append([points[i], v[0]])
465+
466+
# Result
467+
self._value = numpy.array(res)
468+
return self
469+
440470
# ------------------------------------------------------------------
441471
# Error plots
442472
# ------------------------------------------------------------------

0 commit comments

Comments
 (0)