From f5a221e93fae66bf137626ce976732bb38f4949f Mon Sep 17 00:00:00 2001 From: Oscar Kilhed Date: Fri, 5 Jan 2024 15:50:20 +0100 Subject: [PATCH] Transformations: Fix bug where having NaN in the input to regression analysis transformation causes all predictions to be NaN (#80079) Make regression analysis transformation handle NaN --- .../regression/regression.test.ts | 28 +++++++++++++++++++ .../transformers/regression/regression.ts | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/public/app/features/transformers/regression/regression.test.ts b/public/app/features/transformers/regression/regression.test.ts index 16767a02832..00dd836f064 100644 --- a/public/app/features/transformers/regression/regression.test.ts +++ b/public/app/features/transformers/regression/regression.test.ts @@ -152,6 +152,34 @@ describe('Regression transformation', () => { expect(result[1].fields[0].values[8]).toBeCloseTo(3.55, 1); expect(result[1].fields[0].values[9]).toBe(4); }); + + it('should filter NaNs', () => { + const source = [ + toDataFrame({ + name: 'data', + refId: 'A', + fields: [ + { name: 'y', type: FieldType.number, values: [0, 1, 2, 3, NaN] }, + { name: 'x', type: FieldType.number, values: [0, 1, 2, 3, 4] }, + ], + }), + ]; + + const config: RegressionTransformerOptions = { + modelType: ModelType.linear, + predictionCount: 5, + xFieldName: 'x', + yFieldName: 'y', + }; + + const result = RegressionTransformer.transformer(config, {} as DataTransformContext)(source); + + expect(result[1].fields[1].values[0]).toBe(0); + expect(result[1].fields[1].values[1]).toBe(1); + expect(result[1].fields[1].values[2]).toBe(2); + expect(result[1].fields[1].values[3]).toBe(3); + expect(result[1].fields[1].values[4]).toBe(4); + }); }); function toEquableDataFrame(source: DataFrame): DataFrame { diff --git a/public/app/features/transformers/regression/regression.ts b/public/app/features/transformers/regression/regression.ts index 2408e122454..48799666750 100644 --- a/public/app/features/transformers/regression/regression.ts +++ b/public/app/features/transformers/regression/regression.ts @@ -84,7 +84,7 @@ export const RegressionTransformer: SynchronousDataTransformerInfo