@xyo-network/diviner-forecasting-method-arima 2.55.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.tsconfig.build.cjs.json +31 -0
  2. package/.tsconfig.build.esm.json +31 -0
  3. package/dist/.tsconfig.build.cjs.tsbuildinfo +1 -0
  4. package/dist/.tsconfig.build.esm.tsbuildinfo +1 -0
  5. package/dist/cjs/arima/configurable/configurableArima.js +26 -0
  6. package/dist/cjs/arima/configurable/configurableArima.js.map +1 -0
  7. package/dist/cjs/arima/configurable/index.js +5 -0
  8. package/dist/cjs/arima/configurable/index.js.map +1 -0
  9. package/dist/cjs/arima/configured/arima.js +8 -0
  10. package/dist/cjs/arima/configured/arima.js.map +1 -0
  11. package/dist/cjs/arima/configured/index.js +6 -0
  12. package/dist/cjs/arima/configured/index.js.map +1 -0
  13. package/dist/cjs/arima/configured/seasonalArima.js +8 -0
  14. package/dist/cjs/arima/configured/seasonalArima.js.map +1 -0
  15. package/dist/cjs/arima/index.js +6 -0
  16. package/dist/cjs/arima/index.js.map +1 -0
  17. package/dist/cjs/index.js +5 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/docs.json +542 -0
  20. package/dist/esm/arima/configurable/configurableArima.js +21 -0
  21. package/dist/esm/arima/configurable/configurableArima.js.map +1 -0
  22. package/dist/esm/arima/configurable/index.js +2 -0
  23. package/dist/esm/arima/configurable/index.js.map +1 -0
  24. package/dist/esm/arima/configured/arima.js +5 -0
  25. package/dist/esm/arima/configured/arima.js.map +1 -0
  26. package/dist/esm/arima/configured/index.js +3 -0
  27. package/dist/esm/arima/configured/index.js.map +1 -0
  28. package/dist/esm/arima/configured/seasonalArima.js +5 -0
  29. package/dist/esm/arima/configured/seasonalArima.js.map +1 -0
  30. package/dist/esm/arima/index.js +3 -0
  31. package/dist/esm/arima/index.js.map +1 -0
  32. package/dist/esm/index.js +2 -0
  33. package/dist/esm/index.js.map +1 -0
  34. package/dist/types/arima/configurable/configurableArima.d.ts +10 -0
  35. package/dist/types/arima/configurable/configurableArima.d.ts.map +1 -0
  36. package/dist/types/arima/configurable/index.d.ts +2 -0
  37. package/dist/types/arima/configurable/index.d.ts.map +1 -0
  38. package/dist/types/arima/configured/arima.d.ts +5 -0
  39. package/dist/types/arima/configured/arima.d.ts.map +1 -0
  40. package/dist/types/arima/configured/index.d.ts +3 -0
  41. package/dist/types/arima/configured/index.d.ts.map +1 -0
  42. package/dist/types/arima/configured/seasonalArima.d.ts +5 -0
  43. package/dist/types/arima/configured/seasonalArima.d.ts.map +1 -0
  44. package/dist/types/arima/index.d.ts +3 -0
  45. package/dist/types/arima/index.d.ts.map +1 -0
  46. package/dist/types/index.d.ts +2 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/package.json +40 -0
  49. package/src/arima/configurable/configurableArima.ts +25 -0
  50. package/src/arima/configurable/index.ts +1 -0
  51. package/src/arima/configured/arima.ts +9 -0
  52. package/src/arima/configured/index.ts +2 -0
  53. package/src/arima/configured/seasonalArima.ts +9 -0
  54. package/src/arima/configured/spec/arima.spec.ts +20 -0
  55. package/src/arima/configured/spec/seasonalArima.spec.ts +19 -0
  56. package/src/arima/configured/spec/tsconfig.json +3 -0
  57. package/src/arima/index.ts +2 -0
  58. package/src/index.ts +1 -0
  59. package/src/types/index.d.ts +46 -0
  60. package/tsconfig.json +12 -0
@@ -0,0 +1,3 @@
1
+ export * from './configurable';
2
+ export * from './configured';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/arima/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './arima';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "http://json.schemastore.org/package.json",
3
+ "name": "@xyo-network/diviner-forecasting-method-arima",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "version": "2.55.5",
8
+ "description": "XYO Archivist",
9
+ "sideeffects": false,
10
+ "engines": {
11
+ "node": ">=16 <17"
12
+ },
13
+ "esm5": "dist/esm/index.js",
14
+ "exports": {
15
+ ".": {
16
+ "esm5": "./dist/esm/index.js",
17
+ "node": {
18
+ "import": "./dist/cjs/index.js",
19
+ "require": "./dist/cjs/index.js"
20
+ },
21
+ "default": "./dist/esm/index.js"
22
+ },
23
+ "./package.json": "./package.json"
24
+ },
25
+ "main": "dist/cjs/index.js",
26
+ "module": "dist/esm/index.js",
27
+ "author": "Arie Trouw",
28
+ "license": "LGPL-3.0",
29
+ "dependencies": {
30
+ "@xyo-network/forecasting-diviner-model": "^2.55.5",
31
+ "@xyo-network/payload-model": "^2.55.5",
32
+ "arima": "^0.2.5"
33
+ },
34
+ "devDependencies": {
35
+ "@xylabs/ts-scripts-yarn3": "^2.16.5",
36
+ "@xylabs/tsconfig": "^2.16.5",
37
+ "typescript": "^4.9.5"
38
+ },
39
+ "types": "dist/types/index.d.ts"
40
+ }
@@ -0,0 +1,25 @@
1
+ import { Forecast, ForecastingMethod, PayloadValueTransformer } from '@xyo-network/forecasting-diviner-model'
2
+ import { Payload } from '@xyo-network/payload-model'
3
+ import ARIMA, { ARIMAOptions } from 'arima'
4
+
5
+ export const commonOpts: ARIMAOptions = { verbose: false }
6
+
7
+ export type PredictionPayload = Payload<{ error?: number; value: number }>
8
+
9
+ export const configurableArima = (opts: ARIMAOptions = commonOpts, predictionSteps = 10): ForecastingMethod => {
10
+ return (payloads: Payload[], transformer: PayloadValueTransformer): Forecast[] => {
11
+ // If there's no input, there's no prediction
12
+ if (payloads.length === 0) return []
13
+ // Transform all the values
14
+ const values = payloads.map(transformer)
15
+ // Train a model on the training set
16
+ const model = new ARIMA({ ...commonOpts, ...opts }).train(values)
17
+ // Use the trained model to predict the next N values
18
+ const predictions = model.predict(predictionSteps)
19
+ // Convert the predictions into payloads
20
+ return predictions[0].map((value, index) => {
21
+ const error = predictions[1][index]
22
+ return { error, value }
23
+ })
24
+ }
25
+ }
@@ -0,0 +1 @@
1
+ export * from './configurableArima'
@@ -0,0 +1,9 @@
1
+ import { ForecastingMethod } from '@xyo-network/forecasting-diviner-model'
2
+
3
+ import { configurableArima } from '../configurable'
4
+
5
+ export const arimaOpts: ARIMAOptions = { d: 1, p: 2, q: 2 }
6
+
7
+ export const arimaForecastingName = 'arimaForecasting'
8
+
9
+ export const arimaForecastingMethod: ForecastingMethod = configurableArima(arimaOpts)
@@ -0,0 +1,2 @@
1
+ export * from './arima'
2
+ export * from './seasonalArima'
@@ -0,0 +1,9 @@
1
+ import { ForecastingMethod } from '@xyo-network/forecasting-diviner-model'
2
+
3
+ import { configurableArima } from '../configurable'
4
+
5
+ export const seasonalArimaOpts: ARIMAOptions = { D: 0, P: 1, Q: 1, d: 1, p: 2, q: 2, s: 12 }
6
+
7
+ export const seasonalArimaForecastingName = 'seasonalArimaForecasting'
8
+
9
+ export const seasonalArimaForecastingMethod: ForecastingMethod = configurableArima(seasonalArimaOpts)
@@ -0,0 +1,20 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ import { arimaForecastingMethod } from '../arima'
4
+
5
+ const transformer = (payload: Payload) => (payload as Payload<{ data: number }>)?.data || NaN
6
+
7
+ describe('arimaForecasting', () => {
8
+ it('should forecast', async () => {
9
+ const actual: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
10
+ const expected: number[] = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
11
+ const payloads = actual.map((data) => {
12
+ return { data, schema: 'network.xyo.test' }
13
+ })
14
+ const result = await arimaForecastingMethod(payloads, transformer)
15
+ expect(result).toBeTruthy()
16
+ result.map((payload, index) => {
17
+ expect((payload as { schema: string; value: number }).value).toBeCloseTo(expected[index])
18
+ })
19
+ })
20
+ })
@@ -0,0 +1,19 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ import { seasonalArimaForecastingMethod } from '../seasonalArima'
4
+
5
+ const twoPi = 2 * Math.PI
6
+
7
+ const transformer = (payload: Payload) => (payload as Payload<{ data: number }>)?.data || NaN
8
+
9
+ describe('seasonalArimaForecasting', () => {
10
+ it('should forecast', async () => {
11
+ const length = 10
12
+ const actual: number[] = Array.from({ length }, (_, i) => (i / (length - 1)) * twoPi).map((x) => Math.sin(x) + 1)
13
+ const payloads = actual.map((data) => {
14
+ return { data, schema: 'network.xyo.test' }
15
+ })
16
+ const result = await seasonalArimaForecastingMethod(payloads, transformer)
17
+ expect(result).toBeArray()
18
+ })
19
+ })
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "@xylabs/tsconfig-jest"
3
+ }
@@ -0,0 +1,2 @@
1
+ export * from './configurable'
2
+ export * from './configured'
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './arima'
@@ -0,0 +1,46 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+
3
+ declare type ARIMAMethod =
4
+ | 0 // Exact Maximum Likelihood Method (Default)
5
+ | 1 // Conditional Method - Sum Of Squares
6
+ | 2 // Box-Jenkins Method
7
+
8
+ declare type OptimizationMethod =
9
+ | 0 // Nelder-Mead
10
+ | 1 // Newton Line Search
11
+ | 2 // Newton Trust Region - Hook Step
12
+ | 3 // Newton Trust Region - Double Dog-Leg
13
+ | 4 // Conjugate Gradient
14
+ | 5 // BFGS
15
+ | 6 // Limited Memory BFGS (Default)
16
+ | 7 // BFGS Using More Thuente Method
17
+
18
+ declare interface ARIMAOptions {
19
+ auto?: boolean // automatic ARIMA (default: false)
20
+ // params for ARIMA (default: p: 1, d: 0, q: 1)
21
+ p?: number
22
+ d?: number
23
+ q?: number
24
+ // seasonal params (default: 0s). Setting them to non-zero values makes the ARIMA model seasonal
25
+ P?: number
26
+ D?: number
27
+ Q?: number
28
+ s?: number
29
+ method?: ARIMAMethod // ARIMA method (default: 0)
30
+ optimizer?: OptimizationMethod // optimization method (default: 6)
31
+ transpose?: boolean //transpose exogenous array when fitting SARIMAX (default: false)
32
+ verbose?: boolean // verbose output (default: true)
33
+ }
34
+
35
+ declare type PredictionResult = [predictions: number[], meanSquareErrors: number[]]
36
+
37
+ declare module 'arima' {
38
+ export { ARIMAMethod, ARIMAOptions, OptimizationMethod, PredictionResult }
39
+
40
+ // eslint-disable-next-line import/no-default-export
41
+ export default class ARIMA {
42
+ constructor(options: ARIMAOptions)
43
+ predict(steps: number): PredictionResult
44
+ train(data: number[]): this
45
+ }
46
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "declarationDir": "./dist/types",
5
+ "emitDecoratorMetadata": true,
6
+ "experimentalDecorators": true,
7
+ "typeRoots": []
8
+ },
9
+
10
+ "extends": "@xylabs/tsconfig"
11
+ }
12
+