<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.0 20040830//EN" "journalpublishing.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="2.0" xml:lang="en" article-type="research-article"><front><journal-meta><journal-id journal-id-type="nlm-ta">JMIR Form Res</journal-id><journal-id journal-id-type="publisher-id">formative</journal-id><journal-id journal-id-type="index">27</journal-id><journal-title>JMIR Formative Research</journal-title><abbrev-journal-title>JMIR Form Res</abbrev-journal-title><issn pub-type="epub">2561-326X</issn><publisher><publisher-name>JMIR Publications</publisher-name><publisher-loc>Toronto, Canada</publisher-loc></publisher></journal-meta><article-meta><article-id pub-id-type="publisher-id">v10i1e95321</article-id><article-id pub-id-type="doi">10.2196/95321</article-id><article-categories><subj-group subj-group-type="heading"><subject>Original Paper</subject></subj-group></article-categories><title-group><article-title>Dataset-Agnostic Biological Age Calculator and Predictions of Mortality in NHANES (1999-2010), UK Biobank (2006-2010), and Dalian Heart Failure (2015-2023) Cohorts: Development and Validation Study</article-title></title-group><contrib-group><contrib contrib-type="author"><name name-style="western"><surname>Liu</surname><given-names>Haipeng</given-names></name><degrees>PhD</degrees><xref ref-type="aff" rid="aff1">1</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Amabi Perez Aranda</surname><given-names>Angelina</given-names></name><degrees>MBBS</degrees><xref ref-type="aff" rid="aff2">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Au</surname><given-names>Anselm</given-names></name><degrees>MSc</degrees><xref ref-type="aff" rid="aff2">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Wu</surname><given-names>Derek</given-names></name><degrees>BEng</degrees><xref ref-type="aff" rid="aff3">3</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Zhou</surname><given-names>Haixin</given-names></name><degrees>BEng</degrees><xref ref-type="aff" rid="aff2">2</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Wong</surname><given-names>Wing Tak</given-names></name><degrees>PhD</degrees><xref ref-type="aff" rid="aff4">4</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Liu</surname><given-names>Tong</given-names></name><degrees>PhD</degrees><xref ref-type="aff" rid="aff5">5</xref></contrib><contrib contrib-type="author"><name name-style="western"><surname>Beni</surname><given-names>Mehrdad Shahmohammadi</given-names></name><degrees>PhD</degrees><xref ref-type="aff" rid="aff2">2</xref></contrib><contrib contrib-type="author" corresp="yes"><name name-style="western"><surname>Tse</surname><given-names>Gary</given-names></name><degrees>PhD</degrees><xref ref-type="aff" rid="aff2">2</xref></contrib></contrib-group><aff id="aff1"><institution>Cardiovascular Analytics Group</institution><addr-line>Kowloon</addr-line><country>China (Hong Kong)</country></aff><aff id="aff2"><institution>School of Nursing and Health Sciences, Hong Kong Metropolitan University</institution><addr-line>1 Sheung Shing Street</addr-line><addr-line>Ho Man Tin</addr-line><addr-line>Kowloon</addr-line><country>China (Hong Kong)</country></aff><aff id="aff3"><institution>Department of Biomedical Engineering and Health Sciences, McMaster University</institution><addr-line>Hamilton</addr-line><addr-line>ON</addr-line><country>Canada</country></aff><aff id="aff4"><institution>School of Life Sciences, Chinese University of Hong Kong</institution><addr-line>Shatin</addr-line><country>China (Hong Kong)</country></aff><aff id="aff5"><institution>Tianjin Key Laboratory of Ionic-Molecular Function of Cardiovascular disease, Department of Cardiology, Tianjin Institute of Cardiology, Second Hospital of Tianjin Medical University</institution><addr-line>Tianjin</addr-line><country>China</country></aff><contrib-group><contrib contrib-type="editor"><name name-style="western"><surname>Sarvestan</surname><given-names>Javad</given-names></name></contrib></contrib-group><contrib-group><contrib contrib-type="reviewer"><name name-style="western"><surname>Wang</surname><given-names>Wen</given-names></name></contrib><contrib contrib-type="reviewer"><name name-style="western"><surname>Su</surname><given-names>Yan</given-names></name></contrib></contrib-group><author-notes><corresp>Correspondence to Gary Tse, PhD, School of Nursing and Health Sciences, Hong Kong Metropolitan University, 1 Sheung Shing Street, Ho Man Tin, Kowloon, China (Hong Kong), +852 3970 2942; <email>garytse86@gmail.com</email></corresp></author-notes><pub-date pub-type="collection"><year>2026</year></pub-date><pub-date pub-type="epub"><day>20</day><month>10</month><year>2026</year></pub-date><volume>10</volume><elocation-id>e95321</elocation-id><history><date date-type="received"><day>14</day><month>03</month><year>2026</year></date><date date-type="rev-recd"><day>21</day><month>05</month><year>2026</year></date><date date-type="accepted"><day>28</day><month>05</month><year>2026</year></date></history><copyright-statement>&#x00A9; Haipeng Liu, Angelina Amabi Perez Aranda, Anselm Au, Derek Wu, Haixin Zhou, Wing Tak Wong, Tong Liu, Mehrdad Shahmohammadi Beni, Gary Tse. Originally published in JMIR Formative Research (<ext-link ext-link-type="uri" xlink:href="https://formative.jmir.org">https://formative.jmir.org</ext-link>), 20.10.2026. </copyright-statement><copyright-year>2026</copyright-year><license license-type="open-access" xlink:href="https://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (<ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link>), which permits unrestricted use, distribution, and reproduction in any medium, provided the original work, first published in JMIR Formative Research, is properly cited. The complete bibliographic information, a link to the original publication on <ext-link ext-link-type="uri" xlink:href="https://formative.jmir.org">https://formative.jmir.org</ext-link>, as well as this copyright and license information must be included.</p></license><self-uri xlink:type="simple" xlink:href="https://formative.jmir.org/2026/1/e95321"/><abstract><sec><title>Background</title><p>A positive difference between biological age (BA) and chronological age indicates accelerated aging. The application of existing BA models is limited by high technical demands, a lack of alignment across diverse populations, and difficulty in updating them to accommodate expanding cohorts.</p></sec><sec><title>Objective</title><p>To address the issues in existing tools, this project aims to develop and validate an automated toolkit for adaptive BA estimation.</p></sec><sec sec-type="methods"><title>Methods</title><p>The proposed toolkit, named BACalc, facilitates the processing of raw clinical datasets stored in CSV format. Within the graphical user interface, users can select (1) the chronological age column, (2) binary variables (eg, sex, smoking, and alcohol use), and (3) continuous variables (eg, creatinine levels) for BA estimation, using the principal component analysis (PCA) method with the Dubina correction or the Klemera-Doubal method (KDM). All numerical operations are implemented using the NumPy and Pandas libraries, and linear modeling components are provided by scikit-learn and SciPy. The program generates three main output files: (1) the row-wise predictions, (2) the regression statistics, and (3) the explicit linear equations and PCA loadings. Example outputs were generated using the National Health and Nutrition Examination Survey (NHANES, 1999&#x2010;2010), UK Biobank (2006&#x2010;2010), and Dalian Heart Failure (2015&#x2010;2023). The results were compared with the reference BioAge R package.</p></sec><sec sec-type="results"><title>Results</title><p>Using the KDM model, the BACalc-derived and BioAge-derived estimates exhibit a near-perfect correlation (<italic>r</italic>=0.9937, mean absolute error 2.02 y). The PCA-Dubina model also shows a strong correlation with BioAge (<italic>r</italic>=0.8871), within a &#x00B1;20-year window of accelerated aging residuals. In the UK Biobank, a 1-year increase in PCA-Dubina&#x2013;derived age acceleration was associated with a 1.77% higher hazard of all-cause mortality (hazard ratio [HR] 1.018, 95% CI 1.017&#x2010;1.018; <italic>P</italic>&#x003C;.001). Similarly, KDM-derived age acceleration was associated with a 1.59% higher hazard of mortality per year of accelerated aging (HR 1.016, 95% CI 1.016&#x2010;1.016; <italic>P</italic>&#x003C;.001). In the Dalian cohort, a 1-year increase in age acceleration derived from the PCA-Dubina model (BAc) independently predicted mortality with a 2.84% increased hazard per year (HR 1.028, 95% CI 1.022&#x2010;1.035; <italic>P</italic>&#x003C;.001). Similarly, KDM-derived age acceleration (BA_EC) was associated with a 1.26% increased hazard of mortality per year of accelerated aging (HR 1.013, 95% CI 1.007&#x2010;1.018; <italic>P</italic>&#x003C;.001).</p></sec><sec sec-type="conclusions"><title>Conclusions</title><p>BACalc provides a reliable platform for BA estimation, consistent with previously validated computational frameworks and convenient for real-time updating. BA acceleration predicted mortality in 2 independent cohorts.</p></sec></abstract><kwd-group><kwd>biological age</kwd><kwd>numerical analysis</kwd><kwd>Klemera-Doubal method</kwd><kwd>KDM</kwd><kwd>principal component analysis</kwd><kwd>PCA</kwd><kwd>open-source model</kwd></kwd-group></article-meta></front><body><sec id="s1" sec-type="intro"><title>Introduction</title><p>As the global population continues to age, it is essential to develop optimized approaches to manage chronic diseases, strengthen health care infrastructure, and promote healthy aging [<xref ref-type="bibr" rid="ref1">1</xref>], where comprehensive, accurate, and patient-specific estimation of aging status plays a key role. Biological age (BA) refers to the composite physiological state of the organism and/or its various systems [<xref ref-type="bibr" rid="ref2">2</xref>]. A positive difference between BA and chronological age (CA) indicates accelerated aging. Its estimation is important as BA and (BA &#x2013; CA) can be used for predicting longevity [<xref ref-type="bibr" rid="ref3">3</xref>], adverse outcomes [<xref ref-type="bibr" rid="ref4">4</xref>], and for prognostication [<xref ref-type="bibr" rid="ref5">5</xref>].</p><p>Different models have been proposed to estimate BA based on biomarkers of different mechanisms, including DNA methylation, telomere length changes, proteomics, metabolomics, and the combination of heterogeneous biomarkers [<xref ref-type="bibr" rid="ref6">6</xref>]. Regarding the algorithm, multiple linear regression and principal component analysis (PCA) methods have been used in processing multiple factors, while the Klemera and Doubal&#x2019;s method (KDM) provides a more accurate estimation by adjusting the weights of different variables according to their correlations with age [<xref ref-type="bibr" rid="ref7">7</xref>]. With the recent development of AI, machine learning and deep learning models including deep neural networks, convolutional neural networks, and deep convolutional long-term memory have been introduced to process multidimensional data in BA studies [<xref ref-type="bibr" rid="ref7">7</xref>,<xref ref-type="bibr" rid="ref8">8</xref>].</p><p>Despite these advances, there are three major limitations that preclude the widespread use of BA models: (1) the high technical demands needed to develop the models [<xref ref-type="bibr" rid="ref9">9</xref>], (2) lack of alignment of BA models across diverse populations [<xref ref-type="bibr" rid="ref10">10</xref>], and (3) difficulties in updating the models when new data are received or cohorts are expanded [<xref ref-type="bibr" rid="ref11">11</xref>]. Thus, the aim of this project is to develop a tool that can address the issues above by simplifying and automating BA model development and updates.</p></sec><sec id="s2" sec-type="methods"><title>Methods</title><sec id="s2-1"><title>Program Structure</title><p>The present toolkit, named BACalc, facilitates the ingestion of raw clinical datasets stored in CSV format. Multiple CSV files can be loaded and merged row-wise to form a unified dataset. Within the graphical interface, users can select (1) the CA column, (2) optional binary variables (eg, sex, smoking, drinking, etc), and (3) continuous variables (for biomarkers) used for BA estimation. When a binary split variable is defined, the full dataset is partitioned into 2 groups, and the full pipeline is run independently within each group, provided that at least a minimum number of participants are available. In this study, we developed BACalc, a BA calculator that can process raw clinical datasets stored in CSV format. Within the graphical interface, users can select (1) the CA column, (2) binary variables (eg, sex, smoking, and alcohol use), and (3) continuous variables (eg, creatinine levels), used for BA estimation. All numerical operations are implemented via the NumPy and pandas libraries, and linear modeling components are provided by scikit-learn and SciPy. This vectorized implementation allows for rapid processing of typical clinical datasets, while the graphical user interface layers provide an accessible interface for users without the need of scripting or coding. The present toolkit implements 2 methods, PCA method with Dubina correction and the KDM. Both methods operate on the same preprocessed biomarker matrix and CA vector. The program generates a total of three main output files for every user-defined group: (1) the row-wise predictions, (2) the regression statistics, and (3) the explicit linear equations and PCA loadings. Example outputs were generated using the publicly available National Health and Nutrition Examination Survey (NHANES).</p><p>The program includes an optional feature to compute mean arterial pressure (MAP) when columns containing systolic blood pressure (SBP) and diastolic blood pressure (DBP) are present. In those cases, MAP is computed according to the standard approximation:</p><disp-formula id="E1"><label>(1)</label><mml:math id="eqn1"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mi mathvariant="normal">M</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">P</mml:mi></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:mn>3</mml:mn></mml:mfrac><mml:mrow><mml:mi mathvariant="normal">S</mml:mi><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">P</mml:mi></mml:mrow><mml:mo>+</mml:mo><mml:mfrac><mml:mn>2</mml:mn><mml:mn>3</mml:mn></mml:mfrac><mml:mrow><mml:mi mathvariant="normal">D</mml:mi><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">P</mml:mi></mml:mrow></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>It can be included as an additional biomarker in the subsequent modeling steps.</p></sec><sec id="s2-2"><title>Calculation of BA</title><p>The present toolkit implements 2 methods for BA calculation: the PCA method with Dubina correction and the KDM. Both methods operate on the same preprocessed biomarker matrix and CA vector.</p></sec><sec id="s2-3"><title>Data Preprocessing and Standardization</title><sec id="s2-3-1"><title>Overview</title><p>Prior to model fitting, all selected variables are converted to numeric form. Any nonnumeric entries are set to missing values. For each biomarker <italic>j</italic> within a given analysis group, missing entries are imputed using the median of that biomarker in that group. This simple and robust imputation strategy avoids the introduction of bias toward extreme values while retaining all available participants for modeling.</p><p>Let <italic>x<sub>ij</sub></italic> denote the observed value of biomarker <italic>j</italic> for participant <italic>i</italic> in a group with <italic>N</italic> participants and <italic>m</italic> biomarkers. For each biomarker, the mean <italic>&#x03BC;<sub>j</sub></italic> and SD <italic>&#x03C3;<sub>j</sub></italic> are computed as follows:</p><disp-formula id="E2">. <label>(2)</label><mml:math id="eqn2"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:mi>N</mml:mi></mml:mfrac><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext>&#x00A0;</mml:mtext><mml:msub><mml:mi>&#x03C3;</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mfrac><mml:mn>1</mml:mn><mml:mi>N</mml:mi></mml:mfrac><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:msqrt></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>To avoid division by 0, biomarkers with zero variance are assigned <italic>&#x03C3;</italic><sub><italic>j</italic></sub>=1. The standardized (<italic>z</italic>-scored) biomarker matrix <italic>z<sub>ij</sub></italic> is then defined as follows:</p><disp-formula id="E3"><label>(3)</label><mml:math id="eqn3"><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x03BC;</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:math></disp-formula><p>This standardization step ensures that all biomarkers contribute on a comparable scale, regardless of their original units or ranges.</p></sec><sec id="s2-3-2"><title>Method 1: PCA-Dubina Algorithm</title><p>The initial part of the computation involves the generation of a biological age score (BAS). As raw biomarker data varied significantly in units and magnitude, the program first performed standardization. PCA is then performed on the standardized biomarker matrix <italic>Z</italic>, and the first principal component (PC1) is extracted.</p><p>Let <italic>l</italic> = (<italic>l</italic><sub>1</sub>,...,<italic>l<sub>m</sub></italic>) denote the loading vector corresponding to PC1. For each participant <italic>i</italic>, the PC1 score is:</p><disp-formula id="E4"><label>(4)</label><mml:math id="eqn4"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mi mathvariant="normal">P</mml:mi><mml:mi mathvariant="normal">C</mml:mi></mml:mrow><mml:msub><mml:mn>1</mml:mn><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>l</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>z</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>To ensure that higher scores correspond to higher CA, the present implementation automatically corrects the directionality of PC1 by inspecting its Pearson correlation with CA. If corr(PC1,CA) &#x003C;0, the loading vector <italic>I</italic> is multiplied by &#x2212;1 so that PC1 is positively associated with age.</p><p>The BAS for participant <italic>i</italic> was then calculated directly in the original biomarker space as a linear combination of the input biomarkers <italic>x<sub>ij</sub></italic> weighted by the component loadings normalized by the biomarker SD. Specifically, we defined weights</p><disp-formula id="E5"><label>(5)</label><mml:math id="eqn5"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x03C3;</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:math></disp-formula><p>and an intercept term <italic>w</italic><sub>0</sub> chosen so that the projection is centered:</p><disp-formula id="E6"><label>(6)</label><mml:math id="eqn6"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:msubsup><mml:mo stretchy="false">&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>&#x03BC;</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:math></disp-formula><p>The governing equation for BAS in the present model is therefore:</p><disp-formula id="E7"><label>(7)</label><mml:math id="eqn7"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>By construction, BAS is dimensionless. Let <italic>&#x03BC;</italic><sub>BAS</sub> and <italic>&#x03C3;</italic><sub>BAS</sub> denote the mean and SD of BAS in the training population, and let <italic>&#x03BC;</italic><sub>CA</sub> and <italic>&#x03C3;</italic><sub>CA</sub> denote the mean and SD of CA in the same group. To convert the dimensionless BAS into a timescale (y), a T-scale transformation is applied:</p><disp-formula id="E8"><label>(8)</label><mml:math id="eqn8"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">S</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:msub><mml:mi>&#x03C3;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub><mml:msub><mml:mi>&#x03C3;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">S</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mfrac><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>This transformation maps the distribution of BA to match the central tendency and spread of CA in the training sample.</p><p>However, BA estimates derived from regression or PCA often exhibit a regression to the mean effect, where older individuals appear younger, whereas younger individuals appear older. To rectify this, the Dubina correction was applied [<xref ref-type="bibr" rid="ref12">12</xref>]. The slope <italic>b</italic> of the regression of the initial BA against CA is calculated as follows:</p><disp-formula id="E9"><label>(9)</label><mml:math id="eqn9"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mi>b</mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>where <italic>&#x03BC;</italic><sub>BA</sub> is the mean of the uncorrected BA values in the training group. The corrected biological age, denoted BA<sub>c</sub>, was then given by:</p><disp-formula id="E10"><label>(10)</label><mml:math id="eqn10"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>&#x03BC;</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:mi>b</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>This step forced the slope of the predicted age against CA to unity, ensuring that deviations from the diagonal represented genuine biological acceleration or deceleration instead of artifacts of regression shrinkage. For interpretability, the program also reported the BA acceleration derived from the PCA-Dubina pipeline:</p><disp-formula id="E11"><label>(11)</label><mml:math id="eqn11"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">l</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>This quantifies how many years older (positive values) or younger (negative values) a participant appears biologically relative to their CA.</p></sec><sec id="s2-3-3"><title>Method 2: KDM</title><p>The second module uses the KDM, which assumes that BA is a latent variable driving the linear deterioration of biomarkers. For each biomarker <italic>j</italic>, a simple linear model is fitted with CA as the predictor:</p><disp-formula id="E12"><label>(12)</label><mml:math id="eqn12"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>&#x03F5;</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>where <italic>k<sub>j</sub></italic> is the slope, <italic>q<sub>j</sub></italic> is the intercept, and <italic>&#x2208;<sub>ij</sub></italic> are residuals. These parameters are estimated via ordinary least squares regression. The root mean square error (RMSE) for biomarker <italic>j</italic> is given by</p><disp-formula id="E13"><label>(13)</label><mml:math id="eqn13"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mi>s</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:msqrt><mml:mfrac><mml:mn>1</mml:mn><mml:mi>N</mml:mi></mml:mfrac><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mover><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:msqrt></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>where <inline-formula><mml:math id="ieqn1"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:msub><mml:mrow><mml:mover><mml:mi>x</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula> is the model prediction. In the implementation, <italic>s<sub>j</sub></italic> is constrained to a small positive minimum to avoid division by 0. For each biomarker, the Pearson correlation coefficient <italic>r<sub>j</sub></italic> between <italic>x<sub>j</sub></italic> and CA is determined.</p><p>The algorithm first computes the BA estimate (BA<italic><sub>E</sub></italic>) for each participant, which aggregates the contributions of all biomarkers. A weight <italic>w<sub>j</sub></italic> is assigned to each biomarker, defined as the square of the signal-to-noise ratio:</p><disp-formula id="E14"><label>(14)</label><mml:math id="eqn14"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math></disp-formula><p>For participant <italic>i</italic>, the KDM BA estimate BA<sub>E</sub><italic><sub>,i</sub></italic> was then computed as the weighted average of the ages predicted by each individual biomarker:</p><disp-formula id="E15"><label>(15)</label><mml:math id="eqn15"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">E</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mfrac><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>In addition, our program implements a variance-based adjustment to calculate the corrected biological age (BA<sub>EC</sub>). This requires the estimation of the characteristic correlation (<italic>r</italic><sub>char</sub>) of the biomarker set. Based on the individual correlations <italic>r<sub>j</sub></italic>, the characteristic correlation is computed by:</p><disp-formula id="E16"><label>(16)</label><mml:math id="eqn16"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mi>r</mml:mi><mml:mrow><mml:mtext>char</mml:mtext></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:mfrac><mml:msubsup><mml:mi>r</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:msqrt><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msubsup><mml:mi>r</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:msqrt></mml:mfrac></mml:mrow><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:mfrac><mml:msub><mml:mi>r</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msqrt><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msubsup><mml:mi>r</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:msqrt></mml:mfrac></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>with numerical safeguards applied when |<italic>r<sub>j</sub></italic>| is extremely small or close to unity.</p><p>This metric was then used to estimate the population variance of BA, <inline-formula><mml:math id="ieqn2"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula>. In the implementation, 2 components are considered. First, the variance of the difference between the KDM estimate and CA is computed:</p><disp-formula id="E17"><label>(17)</label><mml:math id="eqn17"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mi>Var</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>Var</mml:mi><mml:mo>&#x2061;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mi>E</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>Second, the variance of CA is approximated from its range:</p><disp-formula id="E18"><label>(18)</label><mml:math id="eqn18"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mover><mml:mrow><mml:mrow><mml:mi mathvariant="normal">V</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:mrow></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>&#x2248;</mml:mo><mml:mfrac><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:munder><mml:mo form="prefix">max</mml:mo><mml:mi>i</mml:mi></mml:munder><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:munder><mml:mo form="prefix">min</mml:mo><mml:mi>i</mml:mi></mml:munder><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mn>12</mml:mn></mml:mfrac></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>Following Klemera and Doubal, a correction term that depends on <italic>r</italic><sub>char</sub> and the number of biomarkers <italic>m</italic> is then subtracted:</p><disp-formula id="E28"><label>(19)</label><mml:math id="eqn19"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mo movablelimits="true" form="prefix">max</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mo movablelimits="true" form="prefix">min</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msub><mml:mi>Var</mml:mi><mml:mrow><mml:mi mathvariant="normal">&#x0394;</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:msubsup><mml:mi>r</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mrow><mml:msubsup><mml:mi>r</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mfrac><mml:mo>&#x22C5;</mml:mo><mml:mfrac><mml:mrow><mml:mrow><mml:mover><mml:mi>Var</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mi>m</mml:mi></mml:mfrac></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>where <inline-formula><mml:math id="ieqn3"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula> is a small positive floor (set to 0.1 in the present implementation) to avoid unrealistically small or negative variance estimates.</p><p>Finally, for each participant <italic>i</italic>, the corrected KDM BA BA<sub>EC</sub><italic><sub>,i</sub></italic> is computed by combining the biomarker-based BA estimate (BA<sub>E</sub><italic><sub>,i</sub></italic>) with CA (CA<italic><sub>i</sub></italic>) in a Bayesian fashion:</p><disp-formula id="E20"><label>(20)</label><mml:math id="eqn20"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">E</mml:mi><mml:mi mathvariant="normal">C</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">E</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x22C5;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mfrac><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>m</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mi>w</mml:mi><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:msubsup><mml:mi>S</mml:mi><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mfrac><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>This formulation effectively reduces the prediction error by anchoring the estimate to the CA when the biomarker data are noisy or incoherent, while still allowing large deviations when the biomarker pattern strongly supports them.</p><p>Analogous to the PCA-Dubina pipeline, the KDM module reports a BA acceleration measure based on the corrected KDM estimate:</p><disp-formula id="E21"><label>(21)</label><mml:math id="eqn21"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mtext>Acce</mml:mtext><mml:msub><mml:mtext>l</mml:mtext><mml:mrow><mml:msub><mml:mrow><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mtext>EC,i</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">E</mml:mi><mml:mi mathvariant="normal">C</mml:mi></mml:mrow><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula></sec></sec><sec id="s2-4"><title>Program Output and Computational Scheme</title><p>The program generates three main output files for each user-defined group: (1) the row-wise predictions, (2) the regression statistics, and (3) the explicit linear equations and PCA loadings. The predictions file stores, for each participant, the CA, the intermediate BAS, the PCA-derived BA and BA<sub>c</sub>, the KDM-derived BA<sub>E</sub> and BA<sub>EC</sub>, and the corresponding acceleration measured (BA<italic><sub>c</sub> &#x2013;</italic> CA and BA<sub>EC</sub> &#x2013; CA). The statistics file contained global goodness-of-fit metrics for each method (PCA-Dubina and KDM), including the coefficient of determination (<italic>R</italic><sup>2</sup>), Pearson correlation coefficient (<italic>r</italic>), RMSE, and mean absolute error (MAE) between each BA estimate and CA.</p><p>For a given method, let <italic>y<sub>i</sub></italic> denote the CA of participant <italic>i</italic> and <inline-formula><mml:math id="ieqn4"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula> the corresponding estimated BA (eg, BA<sub>c</sub><italic><sub>,i</sub></italic> or BA<sub>EC,</sub><italic><sub>i</sub></italic>). The coefficient of determination was calculated using:</p><disp-formula id="E22"><label>(22)</label><mml:math id="eqn22"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msup><mml:mi>R</mml:mi><mml:mn>2</mml:mn></mml:msup><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x2212;</mml:mo><mml:mfrac><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mover><mml:mi>y</mml:mi><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>where <inline-formula><mml:math id="ieqn5"><mml:mover accent="false"><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mo>&#x00AF;</mml:mo></mml:mover></mml:math></inline-formula> is the mean of <italic>y<sub>i</sub></italic>. The RMSE and MAE are given by:</p><disp-formula id="E23"><label>(23)</label><mml:math id="eqn23"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mi mathvariant="normal">R</mml:mi><mml:mi mathvariant="normal">M</mml:mi><mml:mi mathvariant="normal">S</mml:mi><mml:mi mathvariant="normal">E</mml:mi></mml:mrow><mml:mo>=</mml:mo><mml:msqrt><mml:mfrac><mml:mn>1</mml:mn><mml:mi>N</mml:mi></mml:mfrac><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:msqrt></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><disp-formula id="E24"><label>(24)</label><mml:math id="eqn24"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mi mathvariant="normal">M</mml:mi><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">E</mml:mi></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:mi>N</mml:mi></mml:mfrac><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mo>|</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:mo>|</mml:mo></mml:mrow></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>Pearson correlation coefficient between <italic>y<sub>i</sub></italic> and <inline-formula><mml:math id="ieqn6"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo stretchy="false">^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula> is reported:</p><disp-formula id="E25"><label>(25)</label><mml:math id="eqn25"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mi>r</mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mover><mml:mi>y</mml:mi><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mover><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:msqrt><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mover><mml:mi>y</mml:mi><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup><mml:msqrt><mml:munderover><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover><mml:msup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:mover><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:msqrt></mml:msqrt></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>with <inline-formula><mml:math id="ieqn7"><mml:mstyle><mml:mrow><mml:mstyle displaystyle="false"><mml:mover><mml:mrow><mml:mover><mml:mi>y</mml:mi><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mo accent="false">&#x00AF;</mml:mo></mml:mover></mml:mstyle></mml:mrow></mml:mstyle></mml:math></inline-formula> being the mean of the estimated ages.</p><p>The generation of explicit equations allows users to apply the trained models externally without rerunning the optimization pipeline, which is useful in the development of portable apps on mobile devices where computational resources are rather limited. For each group, the program writes a human-readable summary that includes the PCA-based BAS and BA equations, the Dubina-corrected BA<sub>c</sub> equation as a function of CA and biomarker values, and the full set of KDM parameters (<italic>k<sub>j</sub></italic>, <italic>q<sub>j</sub></italic>, <italic>s<sub>j</sub></italic>, and <italic>w<sub>j</sub></italic>) together with the final BA<sub>E</sub> and BA<sub>EC</sub> formulas. In addition to tabular outputs, the program generated plots for graphical illustration. For each group, scatterplots of BA<sub>c</sub> vs CA and BA<sub>EC</sub> vs CA are generated, together with identity lines and fitted regression lines with 95% confidence bands.</p><p>Beyond predictive accuracy, the computational efficiency of BACalc was a primary design priority. By leveraging the Python NumPy library for high-performance vectorized operations and implementing compact linear models, BACalc achieves significant speed advantages. Even when processing extensive clinical datasets (n&#x003E;10,000), the system is capable of training and evaluation in a matter of seconds on standard hardware, making it highly scalable for large-scale epidemiological studies. The BACalc source code and executable can be downloaded freely from [<xref ref-type="bibr" rid="ref13">13</xref>].</p></sec><sec id="s2-5"><title>Model Validation and Performance Evaluation</title><p>To validate the robustness and accuracy of the proposed model, we used the NHANES dataset as curated by the BioAge R package, with no additional inclusion or exclusion criteria [<xref ref-type="bibr" rid="ref14">14</xref>]. This validation process incorporated a comprehensive panel of 13 physiological biomarkers: albumin, alkaline phosphatase, blood urea nitrogen, creatinine, hemoglobin A<sub>1c</sub> (HbA<sub>1c</sub>), C-reactive protein (CRP), lymphocytes, mean corpuscular volume, glucose, red cell distribution width, total cholesterol, white blood cell (WBC) count, and SBP. Using this standardized feature set, we benchmarked the BA estimates generated by our implementation of the KDM and the PCA-Dubina method against the established KDM projections from the BioAge R package. Furthermore, we have ensured median imputation in the BioAge R package so that it matches the default median imputer implemented in BACalc. To empirically evaluate the impact of imputation choice, we performed a sensitivity analysis on the NHANES dataset using 4 commonly used imputation techniques: median, mean, k-nearest neighbors (k=5), and iterative imputation (MICE [multiple imputation by chained equations]) [<xref ref-type="bibr" rid="ref15">15</xref>]. The NHANES dataset comprised 55,081 participants, taken from the BioAge R package repository.</p><p>To further validate our tool, we conducted a comprehensive Bland-Altman agreement and residual analysis against the established BioAge R package, applying both tools to the same unweighted cohort to ensure a direct, one-to-one methodological comparison. We compared the BACalc KDM implementation (BA_EC) against the standard KDM in the R package, and similarly compared the BACalc PCA-Dubina model (BAc) against the standard. To analyze the sensitivity of the proposed method to age and sex, we then evaluated the calibration across distinct age bins (&#x003C;40, 40&#x2010;60, and &#x003E;60 y) with sub-group analysis between genders.</p></sec><sec id="s2-6"><title>Additional Datasets for Predictive Validity Evaluation</title><p>To validate the clinical relevance of BACalc estimates, we assessed the association between BA acceleration (delta age=BA-CA) and longitudinal clinical outcomes in 2 independent datasets.</p><p>We used a retrospective population-based clinical cohort comprising 2781 patients hospitalized with heart failure from the First Affiliated Hospital of Dalian Medical University (2015&#x2010;2023). To comprehensively capture multisystem aging, BACalc estimates were generated using a 20-biomarker clinical panel. This included markers of cardiovascular/hemodynamic stress (SBP, DBP, B-type natriuretic, and high-sensitivity cardiac troponin I), renal function (creatinine, urea, and uric acid), metabolic/lipid profiles (glucose, total cholesterol, triglycerides, low-density lipoprotein-C, and high-density lipoprotein-C), liver function (alanine aminotransferase, aspartate aminotransferase, and total bilirubin), and hematological/immune status (WBC, neutrophils, hemoglobin, red blood cells [RBC], and platelets). We used Cox proportional hazards models, controlling for CA at baseline, sex, smoking history, and drinking history, with administrative right-censoring applied to surviving patients. We calculated BA acceleration and linked these estimates to longitudinal clinical outcomes using fully adjusted Cox proportional hazards models and Kaplan-Meier survival analyses.</p><p>In addition, we evaluated the predictive validity on the large-scale UK Biobank (UKBB) dataset. We included 501,936 participants with available biomarker data at the initial assessment center visit (assessment instance 0) and linked mortality follow-up. The biomarkers include renal function (creatinine, urea, urate, and cystatin C), metabolic/lipid profiles (glucose, total cholesterol, triglycerides, low-density lipoprotein [direct], high-density lipoprotein-C, and HbA<sub>1c</sub>), liver function (alanine aminotransferase, aspartate aminotransferase, alkaline phosphatase, CRP, albumin, total bilirubin, and total protein), and hematological/immune status (WBC, hemoglobin, RBC, nucleated RBC, platelets, monocytes, neutrophils, lymphocytes, eosinophil, hematocrit percentage, mean corpuscular volume, and mean corpuscular hemoglobin concentration). BA acceleration was calculated using 29 blood count and biochemistry biomarkers measured at this visit, and 54,507 all-cause deaths were observed during follow-ups.</p></sec><sec id="s2-7"><title>Ethical Considerations</title><p>This study used existing deidentified and anonymized data in the public domain directly downloadable from the NHANES website. Thus, according to the Common Rule, this study was exempt from the institutional review board review and the informed consent requirement. NHANES was conducted by the Centers for Disease Control and Prevention National Center for Health Statistics. NHANES survey procedures and protocols were approved by the National Center for Health Statistics ethics review board for each survey cycle [<xref ref-type="bibr" rid="ref16">16</xref>].</p><p>The UKBB analysis was performed under application number 79146 as part of a wider study for predictive modeling for cardiovascular disease. The UKBB was approved by the North West Multi-Centre Research Ethics Committee (number 11/NW/0382) and conducted in accordance with the Declaration of Helsinki.</p><p>For the dataset from the First Affiliated Hospital of Dalian Medical University, this study was a retrospective analysis of existing clinical data and did not involve any interventions or interactions with participants. The study was conducted in accordance with the Declaration of Helsinki and was approved by the Ethics Committee of the First Affiliated Hospital of Dalian Medical University (approval number PJ-KS-KY-2024&#x2010;616). As this was a retrospective study using anonymized data, informed consent was waived by the Ethics Committee.</p></sec></sec><sec id="s3" sec-type="results"><title>Results</title><sec id="s3-1"><title>Initial Validation of the BACalc Model</title><p>Benchmarking studies demonstrate that the BACalc model generates BA estimations in close alignment with the BioAge R package (<xref ref-type="fig" rid="figure1">Figure 1</xref>). This high level of congruency validates the algorithmic integrity of the BACalc implementation. Specifically, when evaluating the KDM model, the BACalc estimations exhibit a near-perfect correlation with the BioAge R package results (<italic>r</italic>=0.9937), accompanied by an MAE of only 2.02 years. Furthermore, the PCA-Dubina model within the BACalc framework shows strong statistical agreement with the R package reference, yielding a correlation coefficient of 0.8871. When analyzing the variance across these methodologies, the data distribution of the BACalc KDM model more closely mirrors that of the BioAge R package than the PCA-based approach. Notably, the accelerated age residuals representing the divergence between BA and CA remained largely within a &#x00B1;20-year window for both the BioAge R package and the BACalc PCA-Dubina model, with the highest data density concentrated within this range.</p><fig position="float" id="figure1"><label>Figure 1.</label><caption><p>Correlation analysis comparing the Klemera-Doubal method (KDM) biological age predictions generated by BACalc and the BioAge R package [<xref ref-type="bibr" rid="ref14">14</xref>] using the National Health and Nutrition Examination Survey (NHANES) IV dataset. MAE: mean absolute error; PCA: principal component analysis.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig01.png"/></fig></sec><sec id="s3-2"><title>Sensitivity Analysis of Imputation Methods</title><p>This dataset reflects a realistic epidemiological scenario with an overall missingness of 9.79% (ranging from ~9% for blood pressure to 29.69% for CRP). As shown in <xref ref-type="fig" rid="figure2">Figure 2</xref>, BA predictions remained highly robust regardless of the imputation method used. The predictions across all 4 methods exhibited near-perfect correlation (Pearson <italic>r</italic>&#x003E;0.991 for all pairwise comparisons). The density distributions of predicted ages (BAc and BA_EC) and the variance of age acceleration were visually and statistically indistinguishable across the median, mean, k-nearest neighbors, and MICE techniques.</p><fig position="float" id="figure2"><label>Figure 2.</label><caption><p>Sensitivity analysis on the effect of missing data imputation method (k-nearest neighbors [KNNs], mean, median, and MICE [multiple imputation by chained equations]) on the results. KDM: Klemera-Doubal method; PCA: principal component analysis.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig02.png"/></fig></sec><sec id="s3-3"><title>KDM vs PCA-Dubina: Comparison With CA</title><p>The comparative performance of the 2 methods, PCA-Dubina and KDM, implemented in BACalc is shown in <xref ref-type="fig" rid="figure3">Figure 3</xref>. When evaluated against CA, the KDM approach demonstrated superior predictive precision, achieving a higher coefficient of determination (<italic>R<sup>2</sup></italic>=0.597) and correlation coefficient (<italic>r</italic>=0.844) compared to the PCA method (<italic>R<sup>2</sup></italic>=0.174; <italic>r</italic>=0.740).</p><fig position="float" id="figure3"><label>Figure 3.</label><caption><p>Comparative analysis of biological age (BA) estimation methods in BACalc. (A-B) The linear regression results of BAs derived from BACalc Klemera-Doubal method (KDM) and principal component analysis (PCA) against chronological age (CA); (C) the regression between the BAs derived from BACalc KDM and PCA; (D) and (E) the distribution of aging acceleration and its dispersion against CA.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig03.png"/></fig><p>There is a strong, positive correlation between the 2 BA estimates (<italic>R<sup>2</sup></italic>=0.803; <italic>r</italic>=0.896). The Bland-Altman agreement analysis further elucidates this relationship, showing a mean difference of 0.00 years, indicating no systematically fixed bias between the 2 estimators. However, the limits of agreement are notably wide (&#x00B1;21.68 y), implying substantial random variation in individual predictions. Furthermore, the discrepancy between the 2 methods tends to increase as the average BA increases.</p></sec><sec id="s3-4"><title>KDM vs PCA-Dubina: Comparison With Standard KDM</title><p>The Bland-Altman analysis demonstrated exceptional calibration between the BACal and standard KDM models, yielding an overall mean bias of 0.000 years and highly constrained limits of agreement ([&#x2212;10.68, 10.68] y; <xref ref-type="fig" rid="figure4">Figure 4A</xref>). The overall MAE was 4.14 years, with an RMSE of 5.45 years, confirming high precision between the 2 models. As shown in <xref ref-type="fig" rid="figure4">Figure 4C</xref>, the residuals are normally distributed and centered around 0.</p><p>Between BACalc PCA-Dubina model (BAc) and the standard KDM, the limits of agreement widen to [&#x2212;21.51, 21.51] years (<xref ref-type="fig" rid="figure4">Figure 4B</xref>), with an RMSE of 10.97 years. This illustrates the fundamental mathematical divergence between a variance-based paradigm (PCA) and a regression-based paradigm (KDM) when assessing physiological decline. Crucially, despite this expected individual-level variance, the 2 algorithms maintain an overall mean bias of 0.000 years.</p><p>Regarding the calibration across distinct age ranges (&#x003C;40, 40&#x2010;60, and &#x003E;60 y). For both methods (KDM and PCA in BACalc), the mean bias against standard KDM in BA estimation remained near-absolute zero across all age groups (eg, maximum age-group bias for PCA vs KDM was merely 0.42 y). Subgroup analysis by gender revealed only a marginal mean difference (males: &#x2212;2.05 y; females: +1.90 y). These robust agreement metrics confirm that BACalc replicates biological aging methodologies with high mathematical fidelity and remains highly stable across all demographic subgroups without systematic drift.</p><fig position="float" id="figure4"><label>Figure 4.</label><caption><p>Comparative analysis of biological age (BA) estimation errors of Klemera-Doubal method (KDM) and principal component analysis (PCA) methods in BACalc. (A) and (B) the Bland-Altman results; (C) and (D) the distribution of estimation errors.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig04.png"/></fig></sec><sec id="s3-5"><title>Explicit Linear Equations</title><p>The explicit linear equations derived from the BACalc model provide a quantitative framework for assessing biological aging through the integration of 13 key biomarkers. <xref ref-type="disp-formula" rid="E26">Equation (26)</xref> illustrates the multivariate regression model. Notably, biomarkers associated with metabolic dysregulation (HbA<sub>1c</sub> and glucose) and inflammation (CRP) exhibit positive coefficients, contributing to an acceleration of the BA estimate. Conversely, markers of synthetic liver function, such as albumin, display negative coefficients, consistent with the age-associated decline in hepatic protein synthesis.</p><p><xref ref-type="table" rid="table1">Table 1</xref> further decomposes these relationships using the KDM parametrization. The specific weights assigned to each biomarker reflect their relative reliability in predicting CA within the NHANES cohort. SBP and blood urea nitrogen emerged as highly weighted parameters, suggesting that vascular and renal stiffness are most associated with aging in this specific model.</p><table-wrap id="t1" position="float"><label>Table 1.</label><caption><p>Klemera-Doubal method (KDM) parameters for explicit equations generated by the BACalc model.</p></caption><table id="table1" frame="hsides" rules="groups"><thead><tr><td align="left" valign="bottom">Biomarker</td><td align="left" valign="bottom"><italic>k</italic> (slope)</td><td align="left" valign="bottom"><italic>q</italic> (intercept)</td><td align="left" valign="bottom">Weight</td></tr></thead><tbody><tr><td align="left" valign="top">Albumin</td><td align="left" valign="top">&#x2212;0.002527</td><td align="left" valign="top">4.348</td><td align="left" valign="top">5.521&#x00D7;10<sup>&#x2212;5</sup></td></tr><tr><td align="left" valign="top">Alkaline phosphatase</td><td align="left" valign="top">0.1383</td><td align="left" valign="top">64.15</td><td align="left" valign="top">4.087&#x00D7;10<sup>&#x2212;5</sup></td></tr><tr><td align="left" valign="top">Blood urea nitrogen</td><td align="left" valign="top">0.1131</td><td align="left" valign="top">7.822</td><td align="left" valign="top">0.0005984</td></tr><tr><td align="left" valign="top">Creatinine</td><td align="left" valign="top">0.003724</td><td align="left" valign="top">0.6939</td><td align="left" valign="top">0.0002474</td></tr><tr><td align="left" valign="top">Hemoglobin A<sub>1c</sub></td><td align="left" valign="top">0.01395</td><td align="left" valign="top">4.946</td><td align="left" valign="top">0.0003087</td></tr><tr><td align="left" valign="top">Log-normalized C-reactive protein</td><td align="left" valign="top">0.0006252</td><td align="left" valign="top">0.2306</td><td align="left" valign="top">6.166&#x00D7;10<sup>&#x2212;6</sup></td></tr><tr><td align="left" valign="top">Lymphocytes</td><td align="left" valign="top">&#x2212;0.04888</td><td align="left" valign="top">32.63</td><td align="left" valign="top">3.644&#x00D7;10<sup>&#x2212;5</sup></td></tr><tr><td align="left" valign="top">Mean corpuscular volume</td><td align="left" valign="top">0.05397</td><td align="left" valign="top">86.79</td><td align="left" valign="top">0.0001006</td></tr><tr><td align="left" valign="top">Glucose</td><td align="left" valign="top">0.3578</td><td align="left" valign="top">80.71</td><td align="left" valign="top">0.0001787</td></tr><tr><td align="left" valign="top">Red cell distribution width</td><td align="left" valign="top">0.01022</td><td align="left" valign="top">12.62</td><td align="left" valign="top">8.125&#x00D7;10<sup>&#x2212;5</sup></td></tr><tr><td align="left" valign="top">Total cholesterol</td><td align="left" valign="top">0.183</td><td align="left" valign="top">186.3</td><td align="left" valign="top">2.18&#x00D7;10<sup>&#x2212;5</sup></td></tr><tr><td align="left" valign="top">Systolic blood pressure</td><td align="left" valign="top">0.4536</td><td align="left" valign="top">102</td><td align="left" valign="top">0.0007404</td></tr><tr><td align="left" valign="top">White blood cell count</td><td align="left" valign="top">&#x2212;0.009997</td><td align="left" valign="top">7.715</td><td align="left" valign="top">2.469&#x00D7;10<sup>&#x2212;5</sup></td></tr></tbody></table></table-wrap><p>In contrast, although inflammatory markers, such as CRP, show a steep slope (ie, <italic>k</italic>), they are assigned lower weights, likely due to higher interindividual variance. Finally, equation 28 applies a corrective transformation to the calculated BA (ie, BA<sub>E</sub>). This step integrates a CA anchor to mitigate the characteristic regression to the mean bias often observed in biological clocks, thereby improving prediction accuracy at the extremes of the age range.</p><disp-formula id="E26"><label>(26)</label><mml:math id="eqn26"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mtable columnalign="right left right left right left right left right left right left" rowspacing="3pt" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="normal">c</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow/></mml:mtd><mml:mtd><mml:mi/><mml:mo>&#x2212;</mml:mo><mml:mn>60.999</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.58257</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mn>9.8184</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.15875</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">k</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">e</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.61715</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">g</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>9.804</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">e</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>6.6414</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">g</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:msub><mml:mi mathvariant="normal">A</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mi mathvariant="normal">c</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>14.637</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">g</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">z</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">C</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">v</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mn>0.27053</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">y</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">y</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">s</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mo>&#x2212;</mml:mo><mml:mn>0.34334</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">v</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">e</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.18261</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">g</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">e</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>3.3212</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">w</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">h</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.0032436</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">l</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>0.17593</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">y</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">c</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">p</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">s</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">e</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd/><mml:mtd><mml:mi/><mml:mo>+</mml:mo><mml:mo stretchy="false">(</mml:mo><mml:mn>1.1794</mml:mn><mml:mo>&#x00D7;</mml:mo><mml:mrow><mml:mi mathvariant="normal">w</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">t</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">b</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">d</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mi mathvariant="normal">l</mml:mi><mml:mtext>&#x00A0;</mml:mtext><mml:mi mathvariant="normal">c</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">u</mml:mi><mml:mi mathvariant="normal">n</mml:mi><mml:mi mathvariant="normal">t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><disp-formula id="E27"><label>(27)</label><mml:math id="eqn27"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:msub><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">E</mml:mi></mml:msub></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">W</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">g</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">t</mml:mi></mml:mrow><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x00D7;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">o</mml:mi><mml:mi mathvariant="normal">m</mml:mi><mml:mi mathvariant="normal">a</mml:mi><mml:mi mathvariant="normal">r</mml:mi><mml:mi mathvariant="normal">k</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">r</mml:mi></mml:mrow><mml:mi>i</mml:mi></mml:msub><mml:mo>&#x2212;</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow><mml:msub><mml:mi>k</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mfrac></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>&#x2211;</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="normal">W</mml:mi><mml:mi mathvariant="normal">e</mml:mi><mml:mi mathvariant="normal">i</mml:mi><mml:mi mathvariant="normal">g</mml:mi><mml:mi mathvariant="normal">h</mml:mi><mml:mi mathvariant="normal">t</mml:mi></mml:mrow><mml:mi>i</mml:mi></mml:msub><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mstyle></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><disp-formula id="E35"><label>(28)</label><mml:math id="eqn28"><mml:mstyle displaystyle="true" scriptlevel="0"><mml:mrow><mml:mstyle displaystyle="true" scriptlevel="0"><mml:msub><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mi mathvariant="normal">E</mml:mi><mml:mi mathvariant="normal">C</mml:mi></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi mathvariant="normal">B</mml:mi><mml:msub><mml:mi mathvariant="normal">A</mml:mi><mml:mi mathvariant="normal">E</mml:mi></mml:msub></mml:mrow><mml:mo>&#x00D7;</mml:mo><mml:mn>0.0024406</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:mrow><mml:mi mathvariant="normal">C</mml:mi><mml:mi mathvariant="normal">A</mml:mi></mml:mrow><mml:mn>397.1</mml:mn></mml:mfrac><mml:mo>)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mn>0.0024406</mml:mn><mml:mo>+</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mfrac><mml:mn>1</mml:mn><mml:mn>397.1</mml:mn></mml:mfrac><mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mstyle></mml:mrow></mml:mstyle></mml:math></disp-formula><p>The BACalc model generated explicit linear equations that successfully capture the multisystem nature of biological aging. The model parameterization (<xref ref-type="table" rid="table1">Table 1</xref>) reveals that renal function and vascular health are the most heavily weighted predictors of age in the NHANES dataset. The resulting algorithm integrates these weighted physiological inputs with a CA correction to produce a BA estimate that is both physiologically interpretable and mathematically stable despite variance in individual biomarkers.</p></sec><sec id="s3-6"><title>Predictive Validity of BACalc Estimates for Clinical Outcomes</title><p>Both models generated by BACalc demonstrated highly significant predictive validity for all-cause mortality using 2 additional datasets. Thus, on the UKBB dataset, both biological age acceleration measures generated by BACalc were significantly associated with all-cause mortality in unadjusted Cox models in the UKBB. A 1-year increase in PCA-Dubina&#x2013;derived age acceleration was associated with a 1.77% higher hazard of all-cause mortality (hazard ratio [HR] 1.018, 95% CI 1.017&#x2010;1.018; <italic>P</italic>&#x003C;.001). Similarly, KDM-derived age acceleration was associated with a 1.59% higher hazard of mortality per year of accelerated aging (HR 1.016, 95% CI 1.016&#x2010;1.016; <italic>P</italic>&#x003C;.001; <xref ref-type="fig" rid="figure5">Figure 5</xref>).</p><fig position="float" id="figure5"><label>Figure 5.</label><caption><p>Application of BACalc-derived aging acceleration using PCA-Dubina and KDM in predicting all-cause mortality on the UK Biobank (UKBB) dataset of normal population. KDM: Klemera-Doubal method; PCA: principal component analysis.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig05.png"/></fig><p>In the Dalian heart failure cohort, a 1-year increase in age acceleration derived from the PCA-Dubina model (BAc) independently predicted mortality with a 2.84% increased hazard per year (HR 1.028, 95% CI 1.022-1.035; <italic>P</italic>&#x003C;.001). Similarly, KDM-derived age acceleration (BA_EC) was associated with a 1.26% increased hazard of mortality per year of accelerated aging (HR 1.013, 95% CI 1.007-1.018; <italic>P</italic>&#x003C;.001). Kaplan-Meier survival analysis demonstrated clear risk stratification for mortality based on BACalc estimations. Across both the PCA-Dubina and KDM models, participants in the highest quartile of age acceleration (Q4, fastest aging) exhibited significantly lower overall survival probabilities compared to those in the lowest quartile (Q1, slowest aging; <xref ref-type="fig" rid="figure6">Figure 6</xref>). These distinct survival trajectories for all-cause mortality were highly statistically significant (log-rank <italic>P</italic>&#x003C;.001), visually underscoring the prognostic capability of the toolkit.</p><fig position="float" id="figure6"><label>Figure 6.</label><caption><p>Application of BACalc-derived aging acceleration using PCA-Dubina and KDM in predicting all-cause mortality on the Dalian dataset of patients hospitalized for heart failure. KDM: Klemera-Doubal method; PCA: principal component analysis.</p></caption><graphic alt-version="no" mimetype="image" position="float" xlink:type="simple" xlink:href="formative_v10i1e95321_fig06.png"/></fig><p>On the UKBB dataset, both BA acceleration measures generated by BACalc were significantly associated with all-cause mortality in unadjusted Cox models. A 1-year increase in PCA-Dubina&#x2013;derived age acceleration was associated with a 1.77% higher hazard of all-cause mortality (HR 1.018, 95% CI 1.017&#x2010;1.018; <italic>P</italic>&#x003C;.001). Similarly, KDM-derived age acceleration was associated with a 1.59% higher hazard of mortality per year of accelerated aging (HR 1.016, 95% CI 1.016&#x2010;1.016; <italic>P</italic>&#x003C;.001; <xref ref-type="fig" rid="figure6">Figure 6</xref>).</p></sec></sec><sec id="s4" sec-type="discussion"><title>Discussion</title><sec id="s4-1"><title>KDM vs PCA-Dubina</title><p>The BACalc model generates BA estimations in close alignment with the BioAge R package. When evaluating the KDM model, the BACalc estimates exhibit a near-perfect correlation with the BioAge R package results (<italic>r</italic>=0.9937), accompanied by an MAE of only 2.02 years. The PCA-Dubina model within the BACalc framework also shows strong statistical agreement with the R package reference, yielding a correlation coefficient of 0.8871. The accelerated age residuals, representing the divergence between BA and CA, remained largely within a &#x00B1;20-year window for both the BioAge R package and the BACalc PCA-Dubina model, with the highest data density concentrated within this range.</p><p>While both KDM and PCA-Dubina methods show a positive linear relationship with CA, the PCA-Dubina model exhibits significantly higher variance and dispersion around the regression line, particularly in older age groups (<xref ref-type="fig" rid="figure3">Figure 3A-D</xref>), suggesting less stability in its predictions relative to the KDM model.</p><p>The distribution of age acceleration highlights distinct characteristics in how these models quantify aging. The PCA method produces a platykurtic distribution with a wider spread of acceleration values compared to the more leptokurtic distribution of the KDM (<xref ref-type="fig" rid="figure3">Figure 3E</xref>). Importantly, the acceleration bias check reveals systematic bias in the PCA method; as CA increases, the PCA-derived age acceleration shows a positive upward trend. In contrast, the KDM model displays a consistent, flat distribution across the age spectrum, indicating that it has reduced residual bias and likely serves as a more robust metric for biological aging independent of time.</p><p>PCA models are simple and straightforward and can therefore be used for screening aging markers or solving covariance problems, whereas the assumption of linearity limits the accuracy [<xref ref-type="bibr" rid="ref17">17</xref>]. In comparison, the KDM models improve accuracy by adjusting the weights of variances. Although KDM models have a higher computational burden, they are more accurate and stable with less dispersion and distortion at either end of the age spectrum [<xref ref-type="bibr" rid="ref18">18</xref>]. Based on our results and the conclusions of existing studies, we recommend that KDM models are preferable to PCA ones especially when BA has a wide spectrum and heterogeneous biomarkers are included.</p><p>Regarding the predictive validity, the aging accelerations derived from both KDM models showed high performance on the datasets of patients with cardiovascular diseases and normal population. The BA-related biomarkers in these datasets cover the liver, renal, and immune functions and comprehensively reflect the health status of the participants [<xref ref-type="bibr" rid="ref19">19</xref>]. The survival curves on the Dalian dataset of patients who are hospitalized differ from the UKBB ones in shape. The former indicates that the mortality rate was high since the observation, while the latter reflects the common trend that deaths happen at higher ages in the general population. Therefore, both KDM models show the potential to predict long-term health status in both patients and healthy participants. An earlier study on a smaller UKBB subset showed that the biomarkers in KDM-based BA models significantly improved the prediction of mortality and hospital admissions over CA alone [<xref ref-type="bibr" rid="ref20">20</xref>]. A recent study on 2 large Chinese cohorts showed that KDM-based BA could predict mortality independently from CA and other potential confounders [<xref ref-type="bibr" rid="ref5">5</xref>]. Therefore, by lowering the technical barrier for BA estimation, our proposed tool may provide a potential tool of not only BA estimation but also clinical risk prediction, particularly for health researchers and public health practitioners who may not be familiar with R-based tools.</p></sec><sec id="s4-2"><title>Analysis of Aging Factors: Neglected Long-Term Health Issues</title><p>Some well-established biomarkers such as blood urea nitrogen and creatinine are reflected in our results [<xref ref-type="bibr" rid="ref21">21</xref>], while their relationships with aging might be nonlinear [<xref ref-type="bibr" rid="ref22">22</xref>]. Meanwhile, the results revealed some aging-related biomarkers that are often neglected, including HbA<sub>1c</sub>, mean corpuscular volume, and glucose. HbA<sub>1c</sub> and glucose levels reflect the risk of metabolic disorder and diabetes, which is a lasting and increasing public health problem especially in lower-income countries [<xref ref-type="bibr" rid="ref23">23</xref>], where the pathological changes during prediabetes and multiple complications consist of a major challenge in the aging population. Mean corpuscular volume has recently been proposed as a predictive marker for colorectal or esophageal cancer, chronic renal disease, and ischemic stroke or coronary procedures [<xref ref-type="bibr" rid="ref24">24</xref>]. Further investigation on these factors in different cohorts can indicate the aging acceleration for different organs and systems.</p></sec><sec id="s4-3"><title>Limitations and Future Directions</title><p>Despite the good performance of BACalc, there are several methodological constraints: (1) the current implementation is limited to cross-sectional datasets and relies on linear imputation using the median for missing values, which may introduce bias when missingness is systematic or when biomarkers exhibit skewed distributions; (2) both the PCA-Dubina and KDM pipelines assume linear relationships between individual biomarkers and CA, which can obscure biologically relevant nonlinear or interaction effects; and (3) the present model currently supports only a single modal set of blood-based chemistry variables, restricting its applicability to cohorts that have incorporated emerging omics layers (eg, DNA methylation [<xref ref-type="bibr" rid="ref25">25</xref>], proteomics [<xref ref-type="bibr" rid="ref26">26</xref>], and metabolomics [<xref ref-type="bibr" rid="ref27">27</xref>], or imaging-derived phenotypes [<xref ref-type="bibr" rid="ref28">28</xref>]).</p><p>Future development will address these gaps by extending BACalc to longitudinal analyses, enabling the estimation of individual aging trajectories and the computation of rate of change metrics that are less susceptible to regression-to-the-mean artifacts. Incorporating flexible nonlinear modeling frameworks such as generalized additive models [<xref ref-type="bibr" rid="ref29">29</xref>], penalized splines [<xref ref-type="bibr" rid="ref30">30</xref>], machine learning, or neural networks [<xref ref-type="bibr" rid="ref31">31</xref>] will allow the capture of curvature and interaction effects while preserving interpretability. We also plan to integrate a modular multiomics interface, wherein users can supply heterogeneous biomarker matrices and BACalc will automatically harmonize scales, perform feature selection, and combine modalities through stacked ensemble learning [<xref ref-type="bibr" rid="ref32">32</xref>]. Finally, to improve robustness to missingness, advanced imputation strategies (MICE and matrix completion) and uncertainty propagation will be implemented.</p></sec><sec id="s4-4"><title>Conclusions</title><p>We developed an open-source and versatile dataset-agnostic model named BACalc; this model employs PCA-Dubina and KDM models for predicting BA from biomarkers and CA. We have validated our model using previous methods and obtained good agreement. BACalc has the ability to accurately estimate BA from biomarkers, produce detailed plots, and provide explicit linear equations for a specific user-supplied cohort. The present toolkit and its open-source nature will be useful in reducing discrepancies in BA estimation through a transparent and reproducible framework.</p></sec></sec></body><back><ack><p>The authors acknowledge Dr. Ying Liu and Dr. Xinxin Zhang from Department of Cardiology, Institute of Cardiovascular Diseases, First Affiliated Hospital of Dalian Medical University, Dalian, Liaoning Province, China, for their support in data curation, validation, and critical review of the revised manuscript.</p></ack><notes><sec><title>Generative AI Use</title><p>The authors declare that they used generative AI (GenAI) in the research and writing processes. According to the GAIDeT taxonomy (2025), the following tasks were delegated to GenAI tools under full human supervision: proofreading and editing. The GenAI tool used was GPT-5.4. Responsibility for the final manuscript lies entirely with the authors. GenAI tools are not listed as authors and do not bear responsibility for the final outcomes. Declaration submitted by: Haipeng Liu</p></sec><sec><title>Funding</title><p>This project has received funding from the Research Grants Committee of Hong Kong (grant R7054). The material presented and views expressed here are the responsibility of the authors only. The Research Grants Committee of Hong Kong takes no responsibility for any use made of the information set out.</p></sec><sec><title>Data Availability</title><p>The entire source code and executable version of BACalc can be freely downloaded from GitHub [<xref ref-type="bibr" rid="ref13">13</xref>]. The dataset used in this paper, the fourth National Health and Nutrition Examination Survey (NHANES), is publicly available online [<xref ref-type="bibr" rid="ref16">16</xref>]. Reviewers can test the present model without installing using our deployed web-based interface from BioageSolutions [<xref ref-type="bibr" rid="ref33">33</xref>].</p></sec></notes><fn-group><fn fn-type="conflict"><p>None declared.</p></fn></fn-group><glossary><title>Abbreviations</title><def-list><def-item><term id="abb1">BA</term><def><p>biological age</p></def></def-item><def-item><term id="abb2">BAS</term><def><p>biological age score</p></def></def-item><def-item><term id="abb3">CA</term><def><p>chronological age</p></def></def-item><def-item><term id="abb4">CRP</term><def><p>C-reactive protein</p></def></def-item><def-item><term id="abb5">DBP</term><def><p>diastolic blood pressure</p></def></def-item><def-item><term id="abb6">HbA<sub>1c</sub></term><def><p>hemoglobin A<sub>1c</sub></p></def></def-item><def-item><term id="abb7">HR</term><def><p>hazard ratio</p></def></def-item><def-item><term id="abb8">KDM</term><def><p>Klemera-Doubal method</p></def></def-item><def-item><term id="abb9">MAE</term><def><p>mean absolute error</p></def></def-item><def-item><term id="abb10">MAP</term><def><p>mean arterial pressure</p></def></def-item><def-item><term id="abb11">MICE</term><def><p>multiple imputation by chained equations</p></def></def-item><def-item><term id="abb12">NHANES</term><def><p>National Health and Nutrition Examination Survey</p></def></def-item><def-item><term id="abb13">PCA</term><def><p>principal component analysis</p></def></def-item><def-item><term id="abb14">RBC</term><def><p>red blood cells</p></def></def-item><def-item><term id="abb15">RMSE</term><def><p>root mean square error</p></def></def-item><def-item><term id="abb16">SBP</term><def><p>systolic blood pressure</p></def></def-item><def-item><term id="abb17">UKBB</term><def><p>UK Biobank</p></def></def-item><def-item><term id="abb18">WBC</term><def><p>white blood cell</p></def></def-item></def-list></glossary><ref-list><title>References</title><ref id="ref1"><label>1</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Gianfredi</surname><given-names>V</given-names> </name><name name-style="western"><surname>Nucci</surname><given-names>D</given-names> </name><name name-style="western"><surname>Pennisi</surname><given-names>F</given-names> </name><name name-style="western"><surname>Maggi</surname><given-names>S</given-names> </name><name name-style="western"><surname>Veronese</surname><given-names>N</given-names> </name><name name-style="western"><surname>Soysal</surname><given-names>P</given-names> </name></person-group><article-title>Aging, longevity, and healthy aging: the public health approach</article-title><source>Aging Clin Exp Res</source><year>2025</year><month>04</month><day>17</day><volume>37</volume><issue>1</issue><fpage>125</fpage><pub-id pub-id-type="doi">10.1007/s40520-025-03021-8</pub-id><pub-id pub-id-type="medline">40244306</pub-id></nlm-citation></ref><ref id="ref2"><label>2</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Jackson</surname><given-names>SHD</given-names> </name><name name-style="western"><surname>Weale</surname><given-names>MR</given-names> </name><name name-style="western"><surname>Weale</surname><given-names>RA</given-names> </name></person-group><article-title>Biological age&#x2014;what is it and can it be measured?</article-title><source>Arch Gerontol Geriatr</source><year>2003</year><volume>36</volume><issue>2</issue><fpage>103</fpage><lpage>115</lpage><pub-id pub-id-type="doi">10.1016/s0167-4943(02)00060-2</pub-id><pub-id pub-id-type="medline">12849085</pub-id></nlm-citation></ref><ref id="ref3"><label>3</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Chen</surname><given-names>Z</given-names> </name><name name-style="western"><surname>Collings</surname><given-names>PJ</given-names> </name><name name-style="western"><surname>Wang</surname><given-names>M</given-names> </name><etal/></person-group><article-title>Physical fitness, biological aging, and healthy longevity</article-title><source>J Am Med Dir Assoc</source><year>2025</year><month>10</month><volume>26</volume><issue>10</issue><fpage>105792</fpage><pub-id pub-id-type="doi">10.1016/j.jamda.2025.105792</pub-id><pub-id pub-id-type="medline">40789340</pub-id></nlm-citation></ref><ref id="ref4"><label>4</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Zhang</surname><given-names>R</given-names> </name><name name-style="western"><surname>Zhong</surname><given-names>W</given-names> </name><name name-style="western"><surname>Gao</surname><given-names>Y</given-names> </name><name name-style="western"><surname>Duan</surname><given-names>X</given-names> </name><name name-style="western"><surname>Ye</surname><given-names>Q</given-names> </name></person-group><article-title>Biological age acceleration predicts osteoporosis and reduced longevity in a large prospective cohort</article-title><source>Bone</source><year>2025</year><month>11</month><volume>200</volume><fpage>117609</fpage><pub-id pub-id-type="doi">10.1016/j.bone.2025.117609</pub-id><pub-id pub-id-type="medline">40816510</pub-id></nlm-citation></ref><ref id="ref5"><label>5</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Wang</surname><given-names>K</given-names> </name><name name-style="western"><surname>Gao</surname><given-names>J</given-names> </name><name name-style="western"><surname>Liu</surname><given-names>Y</given-names> </name><etal/></person-group><article-title>Biological age construction for prediction of mortality in the Chinese population</article-title><source>Geroscience</source><year>2025</year><month>08</month><volume>47</volume><issue>4</issue><fpage>5869</fpage><lpage>5880</lpage><pub-id pub-id-type="doi">10.1007/s11357-025-01612-x</pub-id><pub-id pub-id-type="medline">40148729</pub-id></nlm-citation></ref><ref id="ref6"><label>6</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Jylh&#x00E4;v&#x00E4;</surname><given-names>J</given-names> </name><name name-style="western"><surname>Pedersen</surname><given-names>NL</given-names> </name><name name-style="western"><surname>H&#x00E4;gg</surname><given-names>S</given-names> </name></person-group><article-title>Biological age predictors</article-title><source>EBioMedicine</source><year>2017</year><month>07</month><volume>21</volume><fpage>29</fpage><lpage>36</lpage><pub-id pub-id-type="doi">10.1016/j.ebiom.2017.03.046</pub-id><pub-id pub-id-type="medline">28396265</pub-id></nlm-citation></ref><ref id="ref7"><label>7</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Li</surname><given-names>Z</given-names> </name><name name-style="western"><surname>Zhang</surname><given-names>W</given-names> </name><name name-style="western"><surname>Duan</surname><given-names>Y</given-names> </name><etal/></person-group><article-title>Progress in biological age research</article-title><source>Front Public Health</source><year>2023</year><month>04</month><day>12</day><volume>11</volume><fpage>1074274</fpage><pub-id pub-id-type="doi">10.3389/fpubh.2023.1074274</pub-id><pub-id pub-id-type="medline">37124811</pub-id></nlm-citation></ref><ref id="ref8"><label>8</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Srour</surname><given-names>L</given-names> </name><name name-style="western"><surname>Bejaoui</surname><given-names>Y</given-names> </name><name name-style="western"><surname>She</surname><given-names>J</given-names> </name><name name-style="western"><surname>Alam</surname><given-names>T</given-names> </name><name name-style="western"><surname>El Hajj</surname><given-names>N</given-names> </name></person-group><article-title>Deep aging clocks: AI-powered strategies for biological age estimation</article-title><source>Ageing Res Rev</source><year>2025</year><month>12</month><volume>112</volume><fpage>102889</fpage><pub-id pub-id-type="doi">10.1016/j.arr.2025.102889</pub-id><pub-id pub-id-type="medline">40902671</pub-id></nlm-citation></ref><ref id="ref9"><label>9</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Hao</surname><given-names>M</given-names> </name><name name-style="western"><surname>Zhang</surname><given-names>H</given-names> </name><name name-style="western"><surname>Wu</surname><given-names>J</given-names> </name><etal/></person-group><article-title>Gompertz law-based biological age (GOLD BioAge): a simple and practical measurement of biological ageing to capture morbidity and mortality risks</article-title><source>Adv Sci (Weinh)</source><year>2025</year><month>08</month><volume>12</volume><issue>32</issue><fpage>e01765</fpage><pub-id pub-id-type="doi">10.1002/advs.202501765</pub-id><pub-id pub-id-type="medline">40600465</pub-id></nlm-citation></ref><ref id="ref10"><label>10</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Rutledge</surname><given-names>J</given-names> </name><name name-style="western"><surname>Oh</surname><given-names>H</given-names> </name><name name-style="western"><surname>Wyss-Coray</surname><given-names>T</given-names> </name></person-group><article-title>Measuring biological age using omics data</article-title><source>Nat Rev Genet</source><year>2022</year><month>12</month><volume>23</volume><issue>12</issue><fpage>715</fpage><lpage>727</lpage><pub-id pub-id-type="doi">10.1038/s41576-022-00511-7</pub-id><pub-id pub-id-type="medline">35715611</pub-id></nlm-citation></ref><ref id="ref11"><label>11</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Salih</surname><given-names>A</given-names> </name><name name-style="western"><surname>Nichols</surname><given-names>T</given-names> </name><name name-style="western"><surname>Szabo</surname><given-names>L</given-names> </name><name name-style="western"><surname>Petersen</surname><given-names>SE</given-names> </name><name name-style="western"><surname>Raisi-Estabragh</surname><given-names>Z</given-names> </name></person-group><article-title>Conceptual overview of biological age estimation</article-title><source>Aging Dis</source><year>2023</year><month>06</month><day>1</day><volume>14</volume><issue>3</issue><fpage>583</fpage><lpage>588</lpage><pub-id pub-id-type="doi">10.14336/AD.2022.1107</pub-id><pub-id pub-id-type="medline">37191413</pub-id></nlm-citation></ref><ref id="ref12"><label>12</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Dubina</surname><given-names>TL</given-names> </name><name name-style="western"><surname>AYa</surname><given-names>M</given-names> </name><name name-style="western"><surname>Zhuk</surname><given-names>EV</given-names> </name></person-group><article-title>Biological age and its estimation. III. Introduction of a correction to the multiple regression model of biological age in cross-sectional and longitudinal studies</article-title><source>Exp Gerontol</source><year>1984</year><volume>19</volume><issue>2</issue><fpage>133</fpage><lpage>143</lpage><pub-id pub-id-type="doi">10.1016/0531-5565(84)90016-0</pub-id><pub-id pub-id-type="medline">6610563</pub-id></nlm-citation></ref><ref id="ref13"><label>13</label><nlm-citation citation-type="web"><article-title>msbCyricTohoku/BACalc</article-title><source>GitHub</source><access-date>2026-08-25</access-date><comment><ext-link ext-link-type="uri" xlink:href="https://github.com/msbCyricTohoku/BACalc">https://github.com/msbCyricTohoku/BACalc</ext-link></comment></nlm-citation></ref><ref id="ref14"><label>14</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Kwon</surname><given-names>D</given-names> </name><name name-style="western"><surname>Belsky</surname><given-names>DW</given-names> </name></person-group><article-title>A toolkit for quantification of biological age from blood chemistry and organ function test data: BioAge</article-title><source>Geroscience</source><year>2021</year><month>12</month><volume>43</volume><issue>6</issue><fpage>2795</fpage><lpage>2808</lpage><pub-id pub-id-type="doi">10.1007/s11357-021-00480-5</pub-id><pub-id pub-id-type="medline">34725754</pub-id></nlm-citation></ref><ref id="ref15"><label>15</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Selvakumar</surname><given-names>H</given-names> </name><name name-style="western"><surname>Duraisamy</surname><given-names>GNR</given-names> </name></person-group><article-title>Novel biomarker identification for blood diseases using PCA-enhanced multiscale neural framework</article-title><source>Neural Comput Applic</source><year>2026</year><month>04</month><volume>38</volume><issue>8</issue><fpage>265</fpage><pub-id pub-id-type="doi">10.1007/s00521-026-11983-7</pub-id></nlm-citation></ref><ref id="ref16"><label>16</label><nlm-citation citation-type="web"><article-title>NHANES questionnaires, datasets, and related documentation</article-title><source>Centers for Disease Control and Prevention (CDC)</source><access-date>2026-08-25</access-date><comment><ext-link ext-link-type="uri" xlink:href="https://wwwn.cdc.gov/nchs/nhanes/">https://wwwn.cdc.gov/nchs/nhanes/</ext-link></comment></nlm-citation></ref><ref id="ref17"><label>17</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Li</surname><given-names>Z</given-names> </name><name name-style="western"><surname>Zhang</surname><given-names>W</given-names> </name><name name-style="western"><surname>Duan</surname><given-names>Y</given-names> </name><etal/></person-group><article-title>Biological age models based on a healthy Han Chinese population</article-title><source>Arch Gerontol Geriatr</source><year>2023</year><month>04</month><volume>107</volume><fpage>104905</fpage><pub-id pub-id-type="doi">10.1016/j.archger.2022.104905</pub-id><pub-id pub-id-type="medline">36542874</pub-id></nlm-citation></ref><ref id="ref18"><label>18</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Jee</surname><given-names>H</given-names> </name><name name-style="western"><surname>Park</surname><given-names>J</given-names> </name></person-group><article-title>Selection of an optimal set of biomarkers and comparative analyses of biological age estimation models in Korean females</article-title><source>Arch Gerontol Geriatr</source><year>2017</year><volume>70</volume><fpage>84</fpage><lpage>91</lpage><pub-id pub-id-type="doi">10.1016/j.archger.2017.01.005</pub-id><pub-id pub-id-type="medline">28110151</pub-id></nlm-citation></ref><ref id="ref19"><label>19</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Wang</surname><given-names>Z</given-names> </name><name name-style="western"><surname>Liao</surname><given-names>J</given-names> </name><name name-style="western"><surname>Fan</surname><given-names>D</given-names> </name><etal/></person-group><article-title>Accelerated biological aging is associated with faster multimorbidity progression: a UK biobank study</article-title><source>Geroscience</source><year>2026</year><month>04</month><day>7</day><pub-id pub-id-type="doi">10.1007/s11357-026-02213-y</pub-id><pub-id pub-id-type="medline">41945275</pub-id></nlm-citation></ref><ref id="ref20"><label>20</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Chan</surname><given-names>MS</given-names> </name><name name-style="western"><surname>Arnold</surname><given-names>M</given-names> </name><name name-style="western"><surname>Offer</surname><given-names>A</given-names> </name><etal/></person-group><article-title>A biomarker-based biological age in UK Biobank: composition and prediction of mortality and hospital admissions</article-title><source>J Gerontol A Biol Sci Med Sci</source><year>2021</year><month>06</month><day>14</day><volume>76</volume><issue>7</issue><fpage>1295</fpage><lpage>1302</lpage><pub-id pub-id-type="doi">10.1093/gerona/glab069</pub-id><pub-id pub-id-type="medline">33693684</pub-id></nlm-citation></ref><ref id="ref21"><label>21</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Chen</surname><given-names>XX</given-names> </name><name name-style="western"><surname>Chen</surname><given-names>ZX</given-names> </name><name name-style="western"><surname>Zhou</surname><given-names>WJ</given-names> </name><name name-style="western"><surname>Wang</surname><given-names>Y</given-names> </name><name name-style="western"><surname>Su</surname><given-names>J</given-names> </name><name name-style="western"><surname>Zhou</surname><given-names>Q</given-names> </name></person-group><article-title>Blood urea nitrogen to creatinine ratio is associated with physical frailty in older-aged Chinese: a cross-sectional study</article-title><source>Aging Clin Exp Res</source><year>2023</year><volume>35</volume><issue>3</issue><fpage>581</fpage><lpage>589</lpage><pub-id pub-id-type="doi">10.1007/s40520-022-02332-4</pub-id><pub-id pub-id-type="medline">36629995</pub-id></nlm-citation></ref><ref id="ref22"><label>22</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Shen</surname><given-names>S</given-names> </name><name name-style="western"><surname>Yan</surname><given-names>X</given-names> </name><name name-style="western"><surname>Xu</surname><given-names>B</given-names> </name></person-group><article-title>The blood urea nitrogen/creatinine (BUN/cre) ratio was U-shaped associated with all-cause mortality in general population</article-title><source>Ren Fail</source><year>2022</year><month>12</month><volume>44</volume><issue>1</issue><fpage>184</fpage><lpage>190</lpage><pub-id pub-id-type="doi">10.1080/0886022X.2022.2030359</pub-id><pub-id pub-id-type="medline">35166184</pub-id></nlm-citation></ref><ref id="ref23"><label>23</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><collab>GBD 2021 Diabetes Collaborators</collab></person-group><article-title>Global, regional, and national burden of diabetes from 1990 to 2021, with projections of prevalence to 2050: a systematic analysis for the Global Burden of Disease Study 2021</article-title><source>Lancet</source><year>2023</year><month>07</month><day>15</day><volume>402</volume><issue>10397</issue><fpage>203</fpage><lpage>234</lpage><pub-id pub-id-type="doi">10.1016/S0140-6736(23)01301-6</pub-id><pub-id pub-id-type="medline">37356446</pub-id></nlm-citation></ref><ref id="ref24"><label>24</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Yadav</surname><given-names>S</given-names> </name><name name-style="western"><surname>Deepika</surname><given-names>D</given-names> </name><name name-style="western"><surname>Maurya</surname><given-names>PK</given-names> </name></person-group><article-title>A systematic review of red blood cells biomarkers in human aging</article-title><source>J Gerontol A Biol Sci Med Sci</source><year>2024</year><month>04</month><day>1</day><volume>79</volume><issue>4</issue><fpage>glae004</fpage><pub-id pub-id-type="doi">10.1093/gerona/glae004</pub-id><pub-id pub-id-type="medline">38190437</pub-id></nlm-citation></ref><ref id="ref25"><label>25</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Shan</surname><given-names>J</given-names> </name><name name-style="western"><surname>Tay</surname><given-names>JH</given-names> </name><name name-style="western"><surname>Wang</surname><given-names>W</given-names> </name><etal/></person-group><article-title>Physical activity and biological age measured by DNA methylation clocks: a systematic review and meta-analysis</article-title><source>Lancet Healthy Longev</source><year>2026</year><month>04</month><volume>7</volume><issue>4</issue><fpage>100835</fpage><pub-id pub-id-type="doi">10.1016/j.lanhl.2026.100835</pub-id><pub-id pub-id-type="medline">42068988</pub-id></nlm-citation></ref><ref id="ref26"><label>26</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Ma</surname><given-names>LZ</given-names> </name><name name-style="western"><surname>Liu</surname><given-names>WS</given-names> </name><name name-style="western"><surname>He</surname><given-names>Y</given-names> </name><etal/></person-group><article-title>Plasma proteomics identify novel biomarkers and dynamic patterns of biological aging</article-title><source>J Adv Res</source><year>2026</year><month>02</month><volume>80</volume><fpage>691</fpage><lpage>704</lpage><pub-id pub-id-type="doi">10.1016/j.jare.2025.05.004</pub-id><pub-id pub-id-type="medline">40328427</pub-id></nlm-citation></ref><ref id="ref27"><label>27</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Lassen</surname><given-names>JK</given-names> </name><name name-style="western"><surname>Wang</surname><given-names>T</given-names> </name><name name-style="western"><surname>Nielsen</surname><given-names>KL</given-names> </name><name name-style="western"><surname>Hasselstr&#x00F8;m</surname><given-names>JB</given-names> </name><name name-style="western"><surname>Johannsen</surname><given-names>M</given-names> </name><name name-style="western"><surname>Villesen</surname><given-names>P</given-names> </name></person-group><article-title>Large-scale metabolomics: predicting biological age using 10,133 routine untargeted LC-MS measurements</article-title><source>Aging Cell</source><year>2023</year><month>05</month><volume>22</volume><issue>5</issue><fpage>e13813</fpage><pub-id pub-id-type="doi">10.1111/acel.13813</pub-id><pub-id pub-id-type="medline">36935524</pub-id></nlm-citation></ref><ref id="ref28"><label>28</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>D&#x00F6;rfel</surname><given-names>RP</given-names> </name><name name-style="western"><surname>Ozenne</surname><given-names>B</given-names> </name><name name-style="western"><surname>Ganz</surname><given-names>M</given-names> </name><name name-style="western"><surname>Svensson</surname><given-names>JE</given-names> </name><name name-style="western"><surname>Plav&#x00E9;n-Sigray</surname><given-names>P</given-names> </name></person-group><article-title>Prediction of brain age using structural magnetic resonance imaging: a comparison of clinical utility of publicly available software packages</article-title><source>EBioMedicine</source><year>2026</year><month>01</month><volume>123</volume><fpage>106094</fpage><pub-id pub-id-type="doi">10.1016/j.ebiom.2025.106094</pub-id><pub-id pub-id-type="medline">41483685</pub-id></nlm-citation></ref><ref id="ref29"><label>29</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Wei</surname><given-names>J</given-names> </name><name name-style="western"><surname>Li</surname><given-names>Y</given-names> </name><name name-style="western"><surname>Liu</surname><given-names>Y</given-names> </name></person-group><article-title>Association of biological age acceleration with all-cause and cardiovascular mortality in HSV-positive adults: a population-based longitudinal cohort study</article-title><source>PLoS One</source><year>2025</year><volume>20</volume><issue>10</issue><fpage>e0334621</fpage><pub-id pub-id-type="doi">10.1371/journal.pone.0334621</pub-id><pub-id pub-id-type="medline">41086172</pub-id></nlm-citation></ref><ref id="ref30"><label>30</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Mutz</surname><given-names>J</given-names> </name><name name-style="western"><surname>Gilchrist</surname><given-names>L</given-names> </name><name name-style="western"><surname>Pain</surname><given-names>O</given-names> </name><name name-style="western"><surname>Proitsi</surname><given-names>P</given-names> </name><name name-style="western"><surname>Lewis</surname><given-names>CM</given-names> </name></person-group><article-title>Metabolomic ageing (MileAge) in mid-life predicts incident vascular, unspecified and all-cause dementia</article-title><source>Alzheimers Dement</source><year>2026</year><month>05</month><volume>22</volume><issue>5</issue><fpage>e71280</fpage><pub-id pub-id-type="doi">10.1002/alz.71280</pub-id><pub-id pub-id-type="medline">42126002</pub-id></nlm-citation></ref><ref id="ref31"><label>31</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Qiu</surname><given-names>W</given-names> </name><name name-style="western"><surname>Chen</surname><given-names>H</given-names> </name><name name-style="western"><surname>Kaeberlein</surname><given-names>M</given-names> </name><name name-style="western"><surname>Lee</surname><given-names>SI</given-names> </name></person-group><article-title>ExplaiNAble BioLogical Age (ENABL Age): an artificial intelligence framework for interpretable biological age</article-title><source>Lancet Healthy Longev</source><year>2023</year><month>12</month><volume>4</volume><issue>12</issue><fpage>e711</fpage><lpage>e723</lpage><pub-id pub-id-type="doi">10.1016/S2666-7568(23)00189-7</pub-id><pub-id pub-id-type="medline">37944549</pub-id></nlm-citation></ref><ref id="ref32"><label>32</label><nlm-citation citation-type="journal"><person-group person-group-type="author"><name name-style="western"><surname>Al Zoubi</surname><given-names>O</given-names> </name><name name-style="western"><surname>Ki Wong</surname><given-names>C</given-names> </name><name name-style="western"><surname>Kuplicki</surname><given-names>RT</given-names> </name><etal/></person-group><article-title>Predicting age from brain EEG signals&#x2014;a machine learning approach</article-title><source>Front Aging Neurosci</source><year>2018</year><volume>10</volume><fpage>184</fpage><pub-id pub-id-type="doi">10.3389/fnagi.2018.00184</pub-id><pub-id pub-id-type="medline">30013472</pub-id></nlm-citation></ref><ref id="ref33"><label>33</label><nlm-citation citation-type="web"><article-title>BACalc</article-title><source>BioageSolutions</source><access-date>2026-08-25</access-date><comment><ext-link ext-link-type="uri" xlink:href="https://bioage.solutions/">https://bioage.solutions/</ext-link></comment></nlm-citation></ref></ref-list></back></article>