@@ -437,6 +437,36 @@ def find_anomalies_by_residuals(self,
437
437
self ._value = outliers
438
438
return self
439
439
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
+
440
470
# ------------------------------------------------------------------
441
471
# Error plots
442
472
# ------------------------------------------------------------------
0 commit comments