linreg-core 0.5.0 → 0.6.1

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.
package/linreg_core.d.ts CHANGED
@@ -95,6 +95,41 @@ export function breusch_pagan_test(y_json: string, x_vars_json: string): string;
95
95
  */
96
96
  export function cooks_distance_test(y_json: string, x_vars_json: string): string;
97
97
 
98
+ /**
99
+ * Deserialize a serialized model, extracting the inner model data.
100
+ *
101
+ * This function takes a serialized model JSON (as created by serialize_model),
102
+ * validates the format version, and returns the inner model data as JSON.
103
+ *
104
+ * # Arguments
105
+ *
106
+ * * `json_string` - JSON string of the serialized model (with metadata wrapper)
107
+ *
108
+ * # Returns
109
+ *
110
+ * JSON string of the inner model data (coefficients, statistics, etc.),
111
+ * or a JSON error object if the input is invalid, the format version is
112
+ * incompatible, or the domain check fails.
113
+ *
114
+ * # Example
115
+ *
116
+ * ```javascript
117
+ * import { deserialize_model } from './linreg_core.js';
118
+ *
119
+ * // Load from file (browser-side)
120
+ * const response = await fetch('my_model.json');
121
+ * const serialized = await response.text();
122
+ *
123
+ * // Deserialize to get the model data
124
+ * const modelJson = deserialize_model(serialized);
125
+ * const model = JSON.parse(modelJson);
126
+ *
127
+ * console.log(model.coefficients);
128
+ * console.log(model.r_squared);
129
+ * ```
130
+ */
131
+ export function deserialize_model(json_string: string): string;
132
+
98
133
  /**
99
134
  * Performs DFBETAS analysis via WASM.
100
135
  *
@@ -188,6 +223,46 @@ export function durbin_watson_test(y_json: string, x_vars_json: string): string;
188
223
  */
189
224
  export function elastic_net_regression(y_json: string, x_vars_json: string, _variable_names: string, lambda: number, alpha: number, standardize: boolean, max_iter: number, tol: number): string;
190
225
 
226
+ /**
227
+ * Extract metadata from a serialized model without deserializing the full model.
228
+ *
229
+ * This function returns only the metadata portion of a serialized model,
230
+ * which includes information like model type, library version, creation time,
231
+ * and optional model name.
232
+ *
233
+ * # Arguments
234
+ *
235
+ * * `json_string` - JSON string of the serialized model
236
+ *
237
+ * # Returns
238
+ *
239
+ * JSON string containing the metadata object with fields:
240
+ * - `format_version` - Format version (e.g., "1.0")
241
+ * - `library_version` - linreg-core version used to create the model
242
+ * - `model_type` - Type of model ("OLS", "Ridge", etc.)
243
+ * - `created_at` - ISO 8601 timestamp of creation
244
+ * - `name` - Optional custom model name
245
+ *
246
+ * Returns a JSON error object if the input is invalid or the domain check fails.
247
+ *
248
+ * # Example
249
+ *
250
+ * ```javascript
251
+ * import { get_model_metadata } from './linreg_core.js';
252
+ *
253
+ * const response = await fetch('my_model.json');
254
+ * const serialized = await response.text();
255
+ *
256
+ * const metadataJson = get_model_metadata(serialized);
257
+ * const metadata = JSON.parse(metadataJson);
258
+ *
259
+ * console.log('Model type:', metadata.model_type);
260
+ * console.log('Created:', metadata.created_at);
261
+ * console.log('Name:', metadata.name || '(unnamed)');
262
+ * ```
263
+ */
264
+ export function get_model_metadata(json_string: string): string;
265
+
191
266
  /**
192
267
  * Computes the inverse of the standard normal CDF (probit function).
193
268
  *
@@ -291,6 +366,110 @@ export function harvey_collier_test(y_json: string, x_vars_json: string): string
291
366
  */
292
367
  export function jarque_bera_test(y_json: string, x_vars_json: string): string;
293
368
 
369
+ /**
370
+ * Performs K-Fold Cross Validation for Elastic Net regression via WASM.
371
+ *
372
+ * # Arguments
373
+ *
374
+ * * `y_json` - JSON array of response variable values
375
+ * * `x_vars_json` - JSON array of predictor arrays
376
+ * * `lambda` - Regularization strength (>= 0)
377
+ * * `alpha` - Mixing parameter (0 = Ridge, 1 = Lasso)
378
+ * * `standardize` - Whether to standardize predictors
379
+ * * `n_folds` - Number of folds (must be >= 2)
380
+ * * `shuffle_json` - JSON boolean: whether to shuffle data before splitting
381
+ * * `seed_json` - JSON string with seed number or "null" for no seed
382
+ *
383
+ * # Returns
384
+ *
385
+ * JSON string containing CV results (same structure as OLS).
386
+ *
387
+ * # Errors
388
+ *
389
+ * Returns a JSON error object if parsing fails, parameters are invalid,
390
+ * or domain check fails.
391
+ */
392
+ export function kfold_cv_elastic_net(y_json: string, x_vars_json: string, lambda: number, alpha: number, standardize: boolean, n_folds: number, shuffle_json: string, seed_json: string): string;
393
+
394
+ /**
395
+ * Performs K-Fold Cross Validation for Lasso regression via WASM.
396
+ *
397
+ * # Arguments
398
+ *
399
+ * * `y_json` - JSON array of response variable values
400
+ * * `x_vars_json` - JSON array of predictor arrays
401
+ * * `lambda` - Regularization strength (>= 0)
402
+ * * `standardize` - Whether to standardize predictors
403
+ * * `n_folds` - Number of folds (must be >= 2)
404
+ * * `shuffle_json` - JSON boolean: whether to shuffle data before splitting
405
+ * * `seed_json` - JSON string with seed number or "null" for no seed
406
+ *
407
+ * # Returns
408
+ *
409
+ * JSON string containing CV results (same structure as OLS).
410
+ *
411
+ * # Errors
412
+ *
413
+ * Returns a JSON error object if parsing fails, parameters are invalid,
414
+ * or domain check fails.
415
+ */
416
+ export function kfold_cv_lasso(y_json: string, x_vars_json: string, lambda: number, standardize: boolean, n_folds: number, shuffle_json: string, seed_json: string): string;
417
+
418
+ /**
419
+ * Performs K-Fold Cross Validation for OLS regression via WASM.
420
+ *
421
+ * # Arguments
422
+ *
423
+ * * `y_json` - JSON array of response variable values
424
+ * * `x_vars_json` - JSON array of predictor arrays
425
+ * * `variable_names_json` - JSON array of variable names
426
+ * * `n_folds` - Number of folds (must be >= 2)
427
+ * * `shuffle_json` - JSON boolean: whether to shuffle data before splitting
428
+ * * `seed_json` - JSON string with seed number or "null" for no seed
429
+ *
430
+ * # Returns
431
+ *
432
+ * JSON string containing CV results:
433
+ * - `n_folds` - Number of folds used
434
+ * - `n_samples` - Total number of observations
435
+ * - `mean_mse`, `std_mse` - Mean and std of MSE across folds
436
+ * - `mean_rmse`, `std_rmse` - Mean and std of RMSE across folds
437
+ * - `mean_mae`, `std_mae` - Mean and std of MAE across folds
438
+ * - `mean_r_squared`, `std_r_squared` - Mean and std of R² across folds
439
+ * - `fold_results` - Array of individual fold results
440
+ * - `fold_coefficients` - Array of coefficient arrays from each fold
441
+ *
442
+ * # Errors
443
+ *
444
+ * Returns a JSON error object if parsing fails, parameters are invalid,
445
+ * or domain check fails.
446
+ */
447
+ export function kfold_cv_ols(y_json: string, x_vars_json: string, variable_names_json: string, n_folds: number, shuffle_json: string, seed_json: string): string;
448
+
449
+ /**
450
+ * Performs K-Fold Cross Validation for Ridge regression via WASM.
451
+ *
452
+ * # Arguments
453
+ *
454
+ * * `y_json` - JSON array of response variable values
455
+ * * `x_vars_json` - JSON array of predictor arrays
456
+ * * `lambda` - Regularization strength (>= 0)
457
+ * * `standardize` - Whether to standardize predictors
458
+ * * `n_folds` - Number of folds (must be >= 2)
459
+ * * `shuffle_json` - JSON boolean: whether to shuffle data before splitting
460
+ * * `seed_json` - JSON string with seed number or "null" for no seed
461
+ *
462
+ * # Returns
463
+ *
464
+ * JSON string containing CV results (same structure as OLS).
465
+ *
466
+ * # Errors
467
+ *
468
+ * Returns a JSON error object if parsing fails, parameters are invalid,
469
+ * or domain check fails.
470
+ */
471
+ export function kfold_cv_ridge(y_json: string, x_vars_json: string, lambda: number, standardize: boolean, n_folds: number, shuffle_json: string, seed_json: string): string;
472
+
294
473
  /**
295
474
  * Performs Lasso regression via WASM.
296
475
  *
@@ -592,6 +771,46 @@ export function reset_test(y_json: string, x_vars_json: string, powers_json: str
592
771
  */
593
772
  export function ridge_regression(y_json: string, x_vars_json: string, _variable_names: string, lambda: number, standardize: boolean): string;
594
773
 
774
+ /**
775
+ * Serialize a model by wrapping its JSON data with metadata.
776
+ *
777
+ * This function takes a model's JSON representation (as returned by regression
778
+ * functions), wraps it with version and type metadata, and returns a serialized
779
+ * JSON string suitable for storage or download.
780
+ *
781
+ * # Arguments
782
+ *
783
+ * * `model_json` - JSON string of the model result (e.g., from ols_regression)
784
+ * * `model_type` - Type of model: "OLS", "Ridge", "Lasso", "ElasticNet", "WLS", or "LOESS"
785
+ * * `name` - Optional custom name for the model
786
+ *
787
+ * # Returns
788
+ *
789
+ * JSON string containing the serialized model with metadata, or a JSON error object
790
+ * if the input is invalid or the domain check fails.
791
+ *
792
+ * # Example
793
+ *
794
+ * ```javascript
795
+ * import { serialize_model, ols_regression } from './linreg_core.js';
796
+ *
797
+ * // Train a model
798
+ * const resultJson = ols_regression(yJson, xJson, namesJson);
799
+ *
800
+ * // Serialize it
801
+ * const serialized = serialize_model(resultJson, "OLS", "My Housing Model");
802
+ *
803
+ * // Download (browser-side)
804
+ * const blob = new Blob([serialized], { type: 'application/json' });
805
+ * const url = URL.createObjectURL(blob);
806
+ * const a = document.createElement('a');
807
+ * a.href = url;
808
+ * a.download = 'my_model.json';
809
+ * a.click();
810
+ * ```
811
+ */
812
+ export function serialize_model(model_json: string, model_type: string, name?: string | null): string;
813
+
595
814
  /**
596
815
  * Performs the Shapiro-Wilk test for normality via WASM.
597
816
  *
@@ -807,6 +1026,48 @@ export function vif_test(y_json: string, x_vars_json: string): string;
807
1026
  */
808
1027
  export function white_test(y_json: string, x_vars_json: string, method: string): string;
809
1028
 
1029
+ /**
1030
+ * Performs Weighted Least Squares (WLS) regression via WASM.
1031
+ *
1032
+ * WLS regression allows each observation to have a different weight, which is
1033
+ * useful for handling heteroscedasticity or when observations have different
1034
+ * precision/variances.
1035
+ *
1036
+ * # Arguments
1037
+ *
1038
+ * * `y_json` - JSON array of response variable values
1039
+ * * `x_vars_json` - JSON array of predictor arrays
1040
+ * * `weights_json` - JSON array of observation weights (must be non-negative)
1041
+ *
1042
+ * # Returns
1043
+ *
1044
+ * JSON string containing:
1045
+ * - `coefficients` - Coefficient values (including intercept as first element)
1046
+ * - `standard_errors` - Standard errors of the coefficients
1047
+ * - `t_statistics` - t-statistics for coefficient significance tests
1048
+ * - `p_values` - Two-tailed p-values for coefficients
1049
+ * - `r_squared` - R-squared (coefficient of determination)
1050
+ * - `adj_r_squared` - Adjusted R-squared
1051
+ * - `f_statistic` - F-statistic for overall model significance
1052
+ * - `f_p_value` - p-value for F-statistic
1053
+ * - `residual_std_error` - Residual standard error (sigma-hat estimate)
1054
+ * - `df_residuals` - Degrees of freedom for residuals
1055
+ * - `df_model` - Degrees of freedom for the model
1056
+ * - `fitted_values` - Fitted values (predicted values)
1057
+ * - `residuals` - Residuals (y - ŷ)
1058
+ * - `mse` - Mean squared error
1059
+ * - `rmse` - Root mean squared error
1060
+ * - `mae` - Mean absolute error
1061
+ * - `n` - Number of observations
1062
+ * - `k` - Number of predictors (excluding intercept)
1063
+ *
1064
+ * # Errors
1065
+ *
1066
+ * Returns a JSON error object if parsing fails, parameters are invalid,
1067
+ * or domain check fails.
1068
+ */
1069
+ export function wls_regression(y_json: string, x_vars_json: string, weights_json: string): string;
1070
+
810
1071
  export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
811
1072
 
812
1073
  export interface InitOutput {
@@ -815,13 +1076,19 @@ export interface InitOutput {
815
1076
  readonly breusch_godfrey_test: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
816
1077
  readonly breusch_pagan_test: (a: number, b: number, c: number, d: number) => [number, number];
817
1078
  readonly cooks_distance_test: (a: number, b: number, c: number, d: number) => [number, number];
1079
+ readonly deserialize_model: (a: number, b: number) => [number, number];
818
1080
  readonly dfbetas_test: (a: number, b: number, c: number, d: number) => [number, number];
819
1081
  readonly dffits_test: (a: number, b: number, c: number, d: number) => [number, number];
820
1082
  readonly durbin_watson_test: (a: number, b: number, c: number, d: number) => [number, number];
821
1083
  readonly elastic_net_regression: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
1084
+ readonly get_model_metadata: (a: number, b: number) => [number, number];
822
1085
  readonly get_version: () => [number, number];
823
1086
  readonly harvey_collier_test: (a: number, b: number, c: number, d: number) => [number, number];
824
1087
  readonly jarque_bera_test: (a: number, b: number, c: number, d: number) => [number, number];
1088
+ readonly kfold_cv_elastic_net: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => [number, number];
1089
+ readonly kfold_cv_lasso: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
1090
+ readonly kfold_cv_ols: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
1091
+ readonly kfold_cv_ridge: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
825
1092
  readonly lasso_regression: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
826
1093
  readonly loess_fit: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number];
827
1094
  readonly loess_predict: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => [number, number];
@@ -833,6 +1100,7 @@ export interface InitOutput {
833
1100
  readonly rainbow_test: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number];
834
1101
  readonly reset_test: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
835
1102
  readonly ridge_regression: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number];
1103
+ readonly serialize_model: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
836
1104
  readonly shapiro_wilk_test: (a: number, b: number, c: number, d: number) => [number, number];
837
1105
  readonly stats_correlation: (a: number, b: number, c: number, d: number) => [number, number];
838
1106
  readonly stats_mean: (a: number, b: number) => [number, number];
@@ -847,6 +1115,7 @@ export interface InitOutput {
847
1115
  readonly test_t_critical: (a: number, b: number) => [number, number];
848
1116
  readonly vif_test: (a: number, b: number, c: number, d: number) => [number, number];
849
1117
  readonly white_test: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
1118
+ readonly wls_regression: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
850
1119
  readonly get_t_cdf: (a: number, b: number) => number;
851
1120
  readonly get_t_critical: (a: number, b: number) => number;
852
1121
  readonly get_normal_inverse: (a: number) => number;