Beyond Global and Individual Models: Tensorized Multitask Regression for Personalized Learning from High-Dimensional Data

Published Online:https://doi.org/10.1287/ijds.2025.0097

Supplemental Material

ijds.2025.0097.cd.zip


Description of Software and Data

The code and data in the zip file referenced above are a snapshot of the software and data that were used in the research reported in the paper "Beyond Global and Individual Models: Tensorized Multi-Task Regression for Personalized Learning from High-Dimensional Data" by Elif Konyar, Mostafa Reisi Gahrooei, and Kamran Paynabar. This repository is also available via GitHub.

The goal of this repository is to replicate the numerical experiments in the paper.

Computer and Software Environment

The following describes the computer hardware conditions and software environment on which the authors produce the results reported in the paper.

The computational experiments were conducted on the Georgia Institute of Technology PACE high-performance computing (HPC) cluster. The experiments were implemented in Python 3.9 or later using NumPy, pandas, SciPy, statsmodels, scikit-learn, TensorLy, nibabel, and nilearn. All models were run using CPU-based computation; no GPU was required.

Installation

  1. Clone or download the repository and navigate to the Reproducibility_Report directory.
  2. Install Python 3.9 or later.
  3. Install the required Python dependencies using: pip install numpy pandas scipy statsmodels scikit-learn tensorly nibabel nilearn.
  4. For the R-based analysis scripts, install R and the required R packages: install.packages(c("data.table", "ggplot2"))

File Structure

The repository contains the core source code, simulation scripts, real-data experiment scripts, analysis scripts, and data-related files.

  • TenMTR.py: Core TenMTR model implementations.
  • data_io.py: Synthetic data generation functions.
  • recovery_metrics.py: Recovery and performance metrics.
  • GaussSim*.py: Synthetic simulation drivers for Simulations 1–10.
  • mPower.py: mPower Parkinson's telemonitoring experiments.
  • ADHD_preprocess.py: Preprocessing of the ADHD-200 data.
  • ADHD.py: ADHD-200 classification experiments.
  • PerMA.py, AndoZhang.py, and Personalized_PCA-main/: Baseline methods.
  • analyze_recovery_summary.py and Performance.R: Analysis and visualization scripts.

Synthetic simulation data are generated directly by the simulation scripts and do not require external data files. The mPower and ADHD-200 experiments require the corresponding datasets to be supplied separately. The expected data formats and input locations are described in the README.

Reproducibility Workflow

To reproduce the results in Table 1 (β_u=0)
  • Data File: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 2 (β_u=0.2)
  • Data File: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 3 (β_u=0.5)
  • Data File: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 4 (β_u=1)
  • Data File: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 5 (grouped correlation)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_grouped
  • Code File: GaussSimGrouped.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 6 (tensor)
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with Performance.R → RMSE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~6 minutes x 30 repetition x 9 parameter pairs
To reproduce the results in Table 7 (β_u=0)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 8 (β_u=0)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 9 (β_u=0)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 10 (β_u=0.2)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1/
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 11 (β_u=0.2)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 12 (β_u=0.2)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 13 (β_u=0.5)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 14 (β_u=0.5)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 15 (β_u=0.5)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 16 (β_u=1)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 17 (β_u=1)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 18 (β_u=1)
  • Data Files: data/different_model_results/; data/tables/success_model.csv
  • Code File: GaussSimMatrix.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 19 (grouped correlation)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_grouped
  • Code File: GaussSimGrouped.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 20 (grouped correlation)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_grouped
  • Code File: GaussSimGrouped.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 21 (grouped correlation)
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_grouped
  • Code File: GaussSimGrouped.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs
To reproduce the results in Table 22 (tensor)
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → reconstruction error summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~6 minutes x 30 repetition x 9 parameter pairs
To reproduce the results in Table 23 (tensor)
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → correlation coefficient summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~6 minutes x 30 repetition x 9 parameter pairs
To reproduce the results in Table 24 (tensor)
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: …/perf_table_run{0-29}.csv,; aggregate with analyze_recovery_summary.py → MAE summary CSV used to fill the table
  • Run Time at the Above-Specified Computer Conditions: ~6 minutes x 30 repetition x 9 parameter pairs
To reproduce the results in Figure 2
  • Data Files: mpower/data_ss_scaled2.csv. requires Synapse access to the Sage Bionetworks mPower study (registration + Data Use Agreement) reshaped to patientID, <features>, MDS-UPDRS schema (see load_mpower_data() in mPower.py)
  • Code File: mPower.py + Performance.R
  • Output: ../mPower_Matrix/perf_table_run{1-29}.csv and the benchmarks. Then Performance.R (edit base_dir)
  • Run Time at the Above-Specified Computer Conditions: ~8 minutes x 30 repetition
To reproduce the results in Figure 3
  • Data Files: adhd200-preprocessed_toupload/{KKI,NeuroIMAGE,NYU,OHSU,Peking_1,Peking_2,Peking_3,Pittsburgh,WashU}/. public ADHD-200 Preprocessed release (NITRC / INDI), each site dir with filtered_participants.tsv + sub-*/resampled_128_*_T1_biascorr_brain.nii
  • Code File: Step 1: ADHD_preprocess.py(builds 8 age×gender tasks, Tucker-downsizes to 12×12×12) → ADHD_Set1/Xdownsized.pkl, ADHD_Set1/yall.pkl. Step 2: ADHD.py
  • Output: ../ADHD_TensorClf/perf_table_run{1-29}.csv and the benchmarks. Then Performance.R (edit base_dir)
  • Run Time at the Above-Specified Computer Conditions: ~15 minutes x 30 repetition
To reproduce the results in Figure 4-6
  • Data Files: synthetic, generated in-code by data_io.py::gen_Gaussian_sim1
  • Code File: GaussSimMatrix.py --sim_id 1 --sigma 1 --sparsity 0.2 --method tenmtr, GaussSimMatrixScaled.py --sigma 1 --sparsity 0.2, GaussSimMatrixOrtho.py --sigma 1 --sparsity 0.2, then Performance.R(Sim-1 section)
  • Output: GaussSim1_TenMTL_vs_Scaled_vs_Orth_RMSE.eps, GaussSim1_TenMTL_vs_Scaled_vs_Orth_Berr.eps, and GaussSim1_TenMTL_vs_Scaled_vs_Orth_Corr.eps
  • Run Time at the Above-Specified Computer Conditions: ~4 minutes x 30 repetition x 6 parameter pairs x 3 methods
To reproduce the results in Figure 7
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: GaussSim8_performance.eps
  • Run Time at the Above-Specified Computer Conditions: ~6+5 minutes x 30 repetition
To reproduce the results in Figure 8
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor
  • Code File: GaussSimTensor.py
  • Output: GaussSim9_performance.eps
  • Run Time at the Above-Specified Computer Conditions: ~5+4 minutes x 30 repetition
To reproduce the results in Figure 9
  • Data Files: synthetic, generated in-code by data_io.py:: gen_Gaussian_sim1_tensor_vector
  • Code File: GaussSimCombined.py
  • Output: GaussSim10_performance.eps
  • Run Time at the Above-Specified Computer Conditions: ~5+4+4+2 minutes x 30 repetition

Cite

To cite the contents of this repository, please cite both the paper and this repository using their respective DOIs.

Article: https://doi.org/10.1287/ijds.2025.0097
Software and Data Repository: https://doi.org/10.1287/ijds.2025.0097.cd

License

Copyright (c) (Konyar, Reisi Gahrooei, Paynabar)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

INFORMS site uses cookies to store information on your computer. Some are essential to make our site work; Others help us improve the user experience. By using this site, you consent to the placement of these cookies. Please read our Privacy Statement to learn more.