<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article
  PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD with MathML3 v1.2 20190208//EN" "JATS-journalpublishing1-mathml3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ali="http://www.niso.org/schemas/ali/1.0/" article-type="research-article" dtd-version="1.2" xml:lang="en">
<front>
<journal-meta><journal-id journal-id-type="publisher-id">METH</journal-id><journal-id journal-id-type="nlm-ta">Methodology</journal-id>
<journal-title-group>
<journal-title>Methodology</journal-title><abbrev-journal-title abbrev-type="pubmed">Methodology</abbrev-journal-title>
</journal-title-group>
<issn pub-type="ppub">1614-1881</issn>
<issn pub-type="epub">1614-2241</issn>
<publisher><publisher-name>PsychOpen</publisher-name></publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">meth.18873</article-id>
<article-id pub-id-type="doi">10.5964/meth.18873</article-id>
<article-categories>
<subj-group subj-group-type="heading"><subject>Original Article</subject></subj-group>

<subj-group subj-group-type="badge">
<subject>Code</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>How to Use Independent Validation in Python</article-title>
	<alt-title alt-title-type="right-running">Independent Validation In Python</alt-title>
	<alt-title specific-use="APA-reference-style" xml:lang="en">How to use independent validation in Python</alt-title>
</title-group>
<contrib-group content-type="authors">
<contrib id="author-1" contrib-type="author" corresp="yes"><name name-style="western"><surname>von Oertzen</surname><given-names>Thede</given-names></name><xref ref-type="corresp" rid="cor1">*</xref><xref ref-type="aff" rid="aff1">1</xref></contrib>
<contrib id="author-2" contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">https://orcid.org/0009-0002-6027-9181</contrib-id><name name-style="western"><surname>Diemerling</surname><given-names>Hannes</given-names></name><xref ref-type="aff" rid="aff1">1</xref><xref ref-type="aff" rid="aff2">2</xref></contrib>
<contrib id="author-3" contrib-type="author"><contrib-id contrib-id-type="orcid" authenticated="false">https://orcid.org/0000-0002-3830-235X</contrib-id><name name-style="western"><surname>von Oertzen</surname><given-names>Timo</given-names></name><xref ref-type="aff" rid="aff1">1</xref></contrib>
<contrib contrib-type="editor">
<name>
	<surname>Nájera Álvarez</surname>
	<given-names>Pablo</given-names>
</name>
<xref ref-type="aff" rid="aff3"/>
</contrib>
<aff id="aff1"><label>1</label><institution>Thomas Bayes Institute</institution>, <country country="">Berlin, Germany</country></aff>
<aff id="aff2"><label>2</label><institution>Humboldt University</institution>, <country country="">Berlin, Germany</country></aff>
	<aff id="aff3">Universidad Pontificia Comillas, Madrid, <country>Spain</country></aff>
</contrib-group>
<author-notes>
	<corresp id="cor1">Thomas Bayes Institute, Junker Jörg Str. 3, 10318 Berlin, Germany. <email xlink:href="thede.vonoertzen@thomasbayes.de">thede.vonoertzen@thomasbayes.de</email></corresp>
</author-notes>
<pub-date pub-type="epub"><day>30</day><month>06</month><year>2026</year></pub-date>
<pub-date pub-type="collection" publication-format="electronic"><year>2026</year></pub-date>
<volume>22</volume>
<issue>2</issue>

<fpage>151</fpage>
<lpage>171</lpage>
<history>
<date date-type="received">
<day>16</day>
<month>07</month>
<year>2025</year>
</date>
<date date-type="accepted">
<day>15</day>
<month>02</month>
<year>2026</year>
</date>
</history>
<permissions><copyright-year>2026</copyright-year><copyright-holder>von Oertzen, Diemerling, &amp; von Oertzen</copyright-holder><license license-type="open-access" specific-use="CC BY 4.0" xlink:href="https://creativecommons.org/licenses/by/4.0/"><ali:license_ref>https://creativecommons.org/licenses/by/4.0/</ali:license_ref><license-p>This is an open access article distributed under the terms of the Creative Commons Attribution 4.0 International License, CC BY 4.0, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.</license-p></license></permissions>
<abstract>
<p>To statistically test whether two groups or models differ, classifier accuracy is compared. However, common accuracy estimates like cross-validation have unknown distributions, making them unsuitable for statistical inference. Alternatives like permutation tests or train-test splits are computationally expensive and limited to frequentist tests against chance. Independent Validation (IV) is a more flexible alternative providing a known estimate distribution. This enables both conventional hypothesis testing and Bayesian analysis of classifier performance. Although Python is most widely used for machine learning, a Python implementation of IV has been lacking so far. This article introduces such an implementation; beyond the core IV algorithm, the package allows to: (1) plot accuracy against training set size, (2) estimate the posterior distribution of the asymptotic accuracy, and (3) query the posterior for statistics and credible intervals. This makes it easy to apply IV when comparing accuracy posteriors across classes, datasets, or classifiers on the same data.</p>
</abstract>
<kwd-group kwd-group-type="author"><kwd>machine learning</kwd><kwd>classification</kwd><kwd>Python implementation</kwd><kwd>independent validation</kwd><kwd>cross validation</kwd></kwd-group>

</article-meta>
</front>
<body>
	<sec sec-type="intro" id="intro"><title/>
		<p>Research in behavioral and social science frequently uses group comparisons, as evidenced by a plethora of research papers (e.g., <xref ref-type="bibr" rid="Xbib35">Wee, 2000</xref>; <xref ref-type="bibr" rid="Xbib36">Weisberg et al., 2011</xref>; <xref ref-type="bibr" rid="Xbib37">Zhao et al., 2020</xref>). A variety of statistical tools are available for univariate comparisons, including parametric tests such as <italic>z</italic>-tests, <italic>t</italic>-tests, ANOVAs and Levene’s test (<xref ref-type="bibr" rid="Xbib12">Fisher, 1970</xref>; <xref ref-type="bibr" rid="Xbib20">Levene, 1960</xref>; <xref ref-type="bibr" rid="Xbib23">Pearson, 1900</xref>; <xref ref-type="bibr" rid="Xbib32">Student, 1908</xref>). In fact, in a systematic review of major Canadian psychology journals, <xref ref-type="bibr" rid="Xbib8">Counsell and Harlow (2017)</xref> found that 40% of analyses used simple mean comparisons like ANOVA. A variety of methods is available for group comparisons for multidimensional purposes. However, all of those are predicated on assumptions regarding the model that the data is assumed to follow (<xref ref-type="bibr" rid="Xbib18">Kim &amp; von Oertzen, 2018</xref>). In instances where these assumptions are not well-founded, an alternative approach for comparing groups is necessary.</p>
		<p>In this context, classifiers (<xref ref-type="bibr" rid="Xbib2">Bay &amp; Pazzani, 2001</xref>; <xref ref-type="bibr" rid="Xbib3">Boucheron et al., 2005</xref>) have been proposed as a universal non-parametric alternative for group comparisons (<xref ref-type="bibr" rid="Xbib18">Kim &amp; von Oertzen, 2018</xref>). Group comparisons by classifier are done by training the classifier on the dataset to distinguish the groups. If the groups are identical, the classifier will be unable to classify better than by guessing. Therefore, if the classifier predicts better than guessing, it can be concluded that there is a group difference. In classical group comparison methods (e.g., ANOVA, <italic>t</italic>-tests, or <inline-formula><mml:math id="x1" display="inline"><mml:msup><mml:mrow><mml:mi>χ</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>-based tests), the group membership is an independent variable, and some dependent variables of the groups are compared. In group comparison by classifiers, group labels are generated by the classifier trained on the dependent variables, and the checks against the true group memberships (which are, again, independent variables) are then used to establish how strongly the groups differ in the dependent variables. Group comparison by classifiers is a generalization of non-parametric group comparisons, which is usually the most viable choice whenever no distributional assumptions about the dependent variables can be made. If the optimal classifier is chosen (i.e., one that asymptotically will reach a correctness exhausting all available shared entropy), the classifier group comparison will always be the most powerful group comparison.</p>
<p>In the domain of machine learning, classifiers are a prevalent instrument for distinguishing between groups. A variety of classifiers exist, including, for example, Decision Trees (<xref ref-type="bibr" rid="Xbib6">Breiman et al., 2017</xref>), Random Forests (<xref ref-type="bibr" rid="Xbib16">Ho, 1995</xref>), Support Vector Machines (<xref ref-type="bibr" rid="Xbib7">Cortes &amp; Vapnik, 1995</xref>), or <italic>k</italic>-Nearest Neighbor (<xref ref-type="bibr" rid="Xbib9">Cover &amp; Hart, 1967</xref>). To use classifiers for testing, it is necessary to estimate a classifier’s prediction accuracy. That can be achieved in various ways; typical examples include a train-test split, Cross Validation (CV), or bootstrap (<xref ref-type="bibr" rid="Xbib19">Kohavi, 1995</xref>).</p>
<p>Train-test split works by splitting the data into a train set and a test set. The training set is used to train the classifier, which then predicts the elements of the test set (<xref ref-type="bibr" rid="Xbib19">Kohavi, 1995</xref>). The accuracy is then the number of correct classifications over the total number of classifications, which is binomially distributed and hence allows for all kinds of statistical tests. For instance, a binomial test against a null hypothesis of a guessing classifier can be used to determine if the groups differ significantly in a frequentistic analysis. However, since the amount of data is limited (<xref ref-type="bibr" rid="Xbib28">Sahiner et al., 2008</xref>), splitting the data reduces the size of both the training set, giving less learning opportunities for the classifier, and the test set, adding more standard error in the binomial test. In consequence, this leads to a decline in the accuracy of the model (<xref ref-type="bibr" rid="Xbib30">Santafe et al., 2015</xref>) and a less precise estimate of the accuracy. This also limits the statistical power, which is undesirable (<xref ref-type="bibr" rid="Xbib27">Rossi, 2013</xref>). Consequently, the train-test split is an uncommon method; usually, variants of CV are used instead (<xref ref-type="bibr" rid="Xbib10">Devroye &amp; Wagner, 1979</xref>; <xref ref-type="bibr" rid="Xbib13">Geisser, 1975</xref>; <xref ref-type="bibr" rid="Xbib19">Kohavi, 1995</xref>; <xref ref-type="bibr" rid="Xbib31">Stone, 1974</xref>).</p>
<p>In the CV process, the dataset is split into <italic>k</italic> subsets called “folds.” Then, a procedure analogous to the train-test split is repeated for each fold, in which the classifier is trained on <inline-formula><mml:math id="x2" display="inline"><mml:mi>k</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:math></inline-formula> folds and subsequently predicts the items of the remaining fold. In total, every element is tested, so that the test set size equals the size of the full dataset, and the size of the training set is <inline-formula><mml:math id="x3" display="inline"><mml:mfrac><mml:mrow><mml:mi>k</mml:mi><mml:mo>−</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:mfrac></mml:math></inline-formula> times the size of the full dataset. This approach addresses the problem posed by the reduced dataset sizes, thereby eliminating the diminished statistical power inherent to the train-test split method. As the value of <italic>k</italic> increases, the training set size concomitantly increases. In the particular case where <italic>k</italic> is equal to the dataset size, this method is referred to as Leave-One-Out (LOO; <xref ref-type="bibr" rid="Xbib14">Hastie et al., 2009</xref>), maximizing training-and test set size.</p>
<p>It is often believed that the accuracy of CV predictions also follows a binomial distribution (<xref ref-type="bibr" rid="Xbib29">Salzberg, 1997</xref>). However, this is incorrect due to the dependency inherent in the repeated training and testing procedure, which results in an increased variance, as conjectured by <xref ref-type="bibr" rid="Xbib4">Bouckaert (2003)</xref> and proven by <xref ref-type="bibr" rid="Xbib17">Kim and von Oertzen (2017)</xref>. This results in alpha inflation of frequentistic tests, as has already been observed by <xref ref-type="bibr" rid="Xbib11">Dietterich (1998)</xref>. It also makes Bayesian estimation of the accuracy impossible. This effect should not be confused with the alpha inflation caused by actual dependency between the samples of the dataset themselves (<xref ref-type="bibr" rid="Xbib19">Kohavi, 1995</xref>). The alpha inflation in this case is caused by the repeated training and testing process, which creates dependencies of the probabilities that samples are classified correctly, even if the data samples themselves are independent. The accuracy distribution of CV is an unknown distribution that depends on the choice of classifier.</p>
<p>One approach to conducting a hypothesis test against the null hypothesis of no difference between the groups is to utilize permutation tests (<xref ref-type="bibr" rid="Xbib24">Pesarin &amp; Salmaso, 2010</xref>). Permutation tests repeatedly estimate the CV accuracy on the dataset while shuffling the group labels. This allows one to approximate the distribution of the accuracy under the assumption of no difference between the groups. Comparing the CV accuracy with the original labels to this distribution allows one to generate a significance test against the null hypothesis of no group difference. However, permutation tests are computationally expensive, as they have to repeat the CV procedure multiple times. In addition, they can only be used for frequentistic tests against the null hypothesis of no group differences, not for any other significance test (e.g., whether one classifier outperforms another) or any Bayesian analysis.</p>
<p>Another possibility is to repeatedly sample a training set by bootstrapping and then testing those samples that have not been sampled in the bootstrap (<xref ref-type="bibr" rid="Xbib19">Kohavi, 1995</xref>). This emulates a Bayesian approach, as it generates a distribution around the point estimate on training set sizes identical to the full dataset size. However, the method introduces a dependency between the training and test data samples, as some of those are repeated, which compromises the resulting distribution. In general, the distribution is not the posterior distribution, so that it cannot correctly be used for frequentistic or Bayesian testing.</p>
<p>As all of these methods are not suitable for Bayesian estimates and computationally expensive, Independent Validation (IV) was proposed by <xref ref-type="bibr" rid="Xbib18">Kim and von Oertzen (2018)</xref>. IV uses samples for training exclusively after they have been predicted, ensuring independence between the predictions. In this way, the training set size increases during the validation procedure, and tests on almost all samples of the dataset. This consequently leads to a binomial distribution of the accuracy. With this known distribution of the accuracy, it is possible to perform frequentistic tests against different null hypotheses and, more importantly, Bayesian estimation and testing of the accuracy.</p>
<p>However, for small datasets IV shows a tendency to underestimate the accuracy, since testing in the first few steps has a small training set size. The issue was addressed by <xref ref-type="bibr" rid="Xbib5">Braun et al. (2023)</xref> by using an estimate of the asymptotic accuracy as the training set size approaches infinity. This utilizes the fact that IV provides correctness of items on differing training set sizes, which allows one to estimate the function mapping training set size to the accuracy distribution.</p>
<p>A preliminary version of this method was implemented in R (<xref ref-type="bibr" rid="Xbib5">Braun et al., 2023</xref>; <xref ref-type="bibr" rid="Xbib26">R Development Core Team., 2010</xref>). R is a useful tool for statistical computing, with a wide range of statistical libraries and packages. However, R is not explicitly built for machine learning applications. Instead, <xref ref-type="bibr" rid="Xbib22">Mooney (2022)</xref> reports that the by far most common language for machine learning applications is Python (<xref ref-type="bibr" rid="Xbib34">van Rossum, 1995</xref>). To make IV commonly available for the machine learning community, an implementation in Python is required. In addition, the R implementation of IV does not estimate the asymptotical accuracy in a Bayesian way, which is one of the most important advantages of IV.</p>
<p>Although the majority of the article can be understood without explicit programming skills, it is helpful to have some basic Python knowledge. We recommend the beginner-friendly Python course, “Python for Beginners” by Open HPI, which can be found freely available online at <ext-link ext-link-type="uri" xlink:href="https://open.hpi.de/courses/python2025">https://open.hpi.de/courses/python2025</ext-link>. It provides a practical introduction to Python programming. The official Python website <ext-link ext-link-type="uri" xlink:href="https://www.python.org/">https://www.python.org/</ext-link> also offers comprehensive documentation and tutorials for getting started. As an IDE for running IV, we suggest using PyCharm, though alternatives such as Visual Studio Code or Jupyter Notebooks are equally suitable.</p>
		<p>In this article, an implementation of IV in Python is introduced<xref rid="fn1" ref-type="fn"><sup>1</sup>.</xref><fn id="fn1"><label>1</label><p>The package can be downloaded at <xref ref-type="bibr" rid="bib34.5">von Oertzen (2026)</xref>.</p></fn> It applies a Bayesian algorithm that can compute the accuracy of the classifier within each class (e.g., the specificity and sensitivity for detecting a depression), on the whole dataset, and the Balanced Accuracy (BAC) for a weighted comparison of the classes. For each of these accuracies, the posterior distribution can be obtained for the asymptotic accuracy or for every training set size. A real data example is provided to explain the usage of the package and to demonstrate the results. The article closes with a discussion of the package for the research field.</p></sec>
<sec sec-type="body" id="s2"><title>Background and Implementation</title>
<p>This section introduces the mathematical foundations of the IV process and a Markov Chain Monte Carlo simulation (MCMC; <xref ref-type="bibr" rid="Xbib21">Metropolis et al., 1953</xref>) used for the improvements of the methods.</p>
<sec id="s2_1"><title>IV Process</title>
<p>To reiterate, <xref ref-type="bibr" rid="Xbib18">Kim and von Oertzen (2018)</xref> showed that independence of the results is ensured if every tested point has not been used for training beforehand. To achieve this, IV starts with a small starting set as the initial training set, tests a batch of points, records the result, and then adds this batch to the training set. The classifier is subsequently retrained on the updated training set. This process continues iteratively until the entire dataset has been used. A flowchart illustrating this procedure is shown in <xref ref-type="fig" rid="fig1">Figure 1</xref>.</p><fig id="fig1" position="anchor" orientation="portrait"><label>Figure 1</label><caption><title>Iterative IV Procedure That Maintains Predictive Independence by Testing Data Before Training Inclusion</title><p><italic>Note</italic>. The algorithm partitions the total dataset into an initial training set and a test pool. Repeatedly, batches are sampled without replacement, predicted by the current model, and added to the training set until the test pool is exhausted. The test results are then used to compute the likelihood in the Metropolis-Hastings MCMC algorithm, which estimates the posterior distribution of the asymptotic accuracy.</p></caption><graphic mimetype="image" mime-subtype="png" xlink:href="meth.18873-f1.png" position="anchor" orientation="portrait"/></fig>
<p>In theory, the initial training set size can be zero, which causes the classifier to begin by guessing the class of the first batch of samples before adding it to the training set. However, in practice, the training set is typically initialized with a small number of samples. This is because the first classifications provide no information while still introducing noise. Additionally, some classifiers require a certain minimum number of samples to function; for instance, a <italic>k</italic>-Nearest-Neighbor classifier needs at least <italic>k</italic> elements in the training set.</p><p>In the current implementation, the default initial training set size is two. For larger datasets, increasing this size to ten or more is recommended.</p>
	<p>After being trained on the current training set, the classifier predicts the next batch of samples. The number of correct classifications in this batch is recorded for each class, along with the corresponding training set size. By default, the batch size is set to one. However, for larger datasets increasing the batch size is recommended. Larger batch sizes have minimal effect on the information for large datasets while significantly reducing computational costs.</p></sec><?figure fig1?>
<sec id="s2_2"><title>Mathematical Model for the Likelihood</title>
<p>In the next step, the recorded training set sizes and corresponding correctness data are used to estimate the parameters of the function that maps training set size to correctness probability. <xref ref-type="bibr" rid="Xbib5">Braun et al. (2023)</xref> showed that the accuracy within each class can be approximated by:</p>
<p><disp-formula id="eqn-1"><label>1</label>
<mml:math id="x1-5001r1" display="block"><mml:mtable columnalign="left"><mml:mtr><mml:mtd columnalign="right"><mml:mi>P</mml:mi><mml:mo stretchy="false">(</mml:mo><mml:mtext>outcome</mml:mtext><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mi>a</mml:mi><mml:mo>−</mml:mo><mml:mfrac><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:mfrac></mml:mtd></mml:mtr></mml:mtable></mml:math>
</disp-formula></p>
<p>where <inline-formula><mml:math id="x4" display="inline"><mml:mi>a</mml:mi></mml:math></inline-formula> is the asymptotic accuracy, that is, the theoretical accuracy as <inline-formula><mml:math id="x5" display="inline"><mml:mi>n</mml:mi><mml:mo>→</mml:mo><mml:mi>∞</mml:mi></mml:math></inline-formula>, and b is an offset factor that determines the deviation from this asymptote for finite training sample size <italic>n</italic>.</p>
<p>The likelihood for a correct classification at any value of (<italic>a, b</italic>) is given by Equation 1, while the likelihood of a misclassification is one minus this value. The overall likelihood of the complete set of classification results is the product of the likelihoods for each classification result. To prevent numerical underflow and improve computational stability, the current implementation uses the log likelihood.</p></sec>
<sec id="s2_3"><title>Markov Chain Monte Carlo</title>
<p>An MCMC is then used to sample from the posterior distribution of <italic>a</italic> and <italic>b</italic>. A uniform prior between 0 and 1 is used for <italic>a</italic>, and a flat prior on the positive numbers for <italic>b</italic>. The MCMC implemented here is a Metropolis Hastings algorithm, chosen for its computational efficiency and robustness (<xref ref-type="bibr" rid="Xbib15">Hastings, 1970</xref>).</p>
<p>The MCMC can be initialized with various parameters, including burn-in size (default 100), thinning (default 50), target number of samples (default 1000), and step size for the next proposed candidate (default 0.2 in both directions). Larger burn-in sizes, more samples, and greater thinning will improve sample quality, but at the cost of increased runtime. However, since the MCMC operates on precomputed classification results, computational costs remain manageable even with large numbers of samples.</p>
<p>The MCMC is performed separately for each class to obtain the posterior distribution for <italic>a</italic> and <italic>b</italic>, where a represents the asymptotical accuracy in that class, i.e., the accuracy the classifier would reach for an infinite amount of training data.</p></sec>
<sec id="s2_4"><title>Output of the Analysis</title>
<p>The user of the package can access the distribution of <italic>a</italic> for each class directly as a list of samples. Additionally, they can request specific metrics, such as the Maximum A-Posteriori (MAP) accuracy for that class, the posterior mean, the standard deviation, the probability of exceeding a certain threshold (i.e., the cumulative distribution function), or the probability that the asymptotic accuracy exceeds the asymptotic accuracy of a second distribution (e.g., a different classifier that the user wishes to compare against).</p>
<p>In addition to the within-class accuracy, the package provides the accuracy and BAC for the entire dataset, as well as any other weighted combination of class accuracies. These metrics are computed as a weighted sum of the individual class accuracies. In the case of the BAC, all classes are weighted equally, yielding an accuracy index that is independent of the class sizes in the dataset.</p>
<p>The combined class accuracies are computed by first multiplying the random variable for each class by its corresponding weight, then convolving the distributions to obtain the distribution for the weighted sum.</p>
<p>The package also combines the posteriors of <italic>a</italic> and <italic>b</italic> to provide a distribution of the expected accuracy for any finite sample size. Similar to the asymptotic accuracies, the expected accuracy for each class, for the entire dataset, or the expected BAC for the entire dataset can be accessed. Using the same methods as described above, the package provides metrics such as the MAP, mean, standard deviation, or any cumulative probability of the probability distributions. <xref ref-type="table" rid="t1">Table 1</xref> provides a summary of the functionalities of the IV package that will be used throughout the illustrative example.</p>
<table-wrap id="t1" position="anchor" orientation="portrait">
<label>Table 1</label><caption><title>Summary of Available Analysis Outputs</title></caption>
<table frame="hsides" rules="groups" style="compact-1"><colgroup span="1">
<col width="" align="left"/>
<col width="" align="left"/></colgroup>
<thead>
<tr>
<th>
<p>Description</p></th>
<th>
<p>Command</p></th>
</tr>
</thead>
<tbody>
<tr>
<td>Distribution of the accuracy within that class</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">iv.get_label_accuracy(label)</code></td>
</tr>
<tr>
<td>Weighted combination of the class accuracies</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">iv.get(key=weights)</code></td>
</tr>
<tr>
<td>Class accuracies weighted by frequency in dataset</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">iv.get_acc_dist()</code></td>
</tr>
<tr>
<td>Class accuracies equally weighted</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">iv.get_bacc_dist()</code></td>
</tr>
<tr>
<td>Multiple metrics dependent on sample size</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">iv.get_development(key)</code></td>
</tr>
	<tr style="background-lightblue; white-border-bottom">
<th align="left" colspan="2">Distribution functions from the Scipy.stats package</th>
</tr>
<tr>
<td>Cumulative distribution for the accuracy</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">dist.cdf(x)</code></td>
</tr>
<tr>
<td>Mean of the distribution</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">dist.mean()</code></td>
</tr>
<tr>
<td>Standard deviation of the distribution</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">dist.std()</code></td>
</tr>
	<tr style="background-lightblue; white-border-bottom">
<th align="left" colspan="2">Distribution functions from the IV package</th>
</tr>
<tr>
<td>Maximum a-posteriori (MAP)</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">dist.map()</code></td>
</tr>
<tr>
<td>Comparison of two distributions</td>
<td><code position="anchor" orientation="portrait" xml:space="preserve">dist1.is_greater_than(dist2)</code></td>
</tr>
</tbody>
</table>
<table-wrap-foot>
	<p><italic>Note</italic>. Further functions for distribution from Scipy.stats can be found at <ext-link ext-link-type="uri" xlink:href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuou">https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.html#scipy.stats.rv_continuou</ext-link></p>
</table-wrap-foot>
</table-wrap></sec></sec>
<sec sec-type="body" id="s3"><title>Illustrative Example</title>
<p>This section will introduce an example of when and how to use the package in order to use machine learning in Bayesian hypothesis testing.</p>
<sec id="s3_1"><title>Is There a Group Difference?</title>
<p>Assume we want to find out if there is a difference between three types of wine called Barolo, Lugana, and Primitivo. The different types of wine could represent different treatment groups in a psychological experiment, different gender identities in a social science study, or different conditions in a neurological study.</p>
<p>Our dataset consists of the chemical features for 59 different Barolo, 71 Lugana, and 48 Primitivo wines<xref rid="fn2" ref-type="fn"><sup>2</sup>.</xref><fn id="fn2"><label>2</label><p>The dataset for this example is available as the ‘Wine’ dataset at <ext-link ext-link-type="uri" xlink:href="https://archive.ics.uci.edu">https://archive.ics.uci.edu</ext-link>. The Python code for the examples presented here can be found at <xref ref-type="bibr" rid="bib34.5">von Oertzen (2026)</xref>.</p></fn> The dataset is structured as shown in <xref ref-type="table" rid="t2">Table 2</xref>.</p>
<table-wrap id="t2" position="anchor" orientation="portrait">
<label>Table 2</label><caption><title>Structure of the Wine Data Set</title></caption>
<table frame="hsides" rules="groups"><colgroup span="1">
<col width="" align="left"/>
<col width=""/>
<col width=""/>
<col width=""/>
<col width=""/>
<col width=""/>
<col width=""/>
<col width=""/></colgroup>
<thead>
<tr>
<th>
<p>Wine</p></th>
<th>
<p>Alcohol</p></th>
<th>
<p>Malicacid</p></th>
<th>
<p>Ash</p></th>
<th>
<p>Ash Alcalinity</p></th>
<th>
<p>Mg</p></th>
<th>
<p>Phenols</p></th>
<th>
<p>Flavanoids</p></th>
</tr>
</thead>
<tbody>
<tr>
<td>Barolo</td>
<td align="char" char=".">14.23</td>
<td align="char" char=".">1.71</td>
<td align="char" char=".">2.43</td>
<td align="char" char=".">15.6</td>
<td>127</td>
<td align="char" char=".">2.8</td>
<td align="char" char=".">3.06</td>
</tr>
<tr>
<td>Barolo</td>
<td align="char" char=".">13.2</td>
<td align="char" char=".">1.78</td>
<td align="char" char=".">2.14</td>
<td align="char" char=".">11.2</td>
<td>100</td>
<td align="char" char=".">2.65</td>
<td align="char" char=".">2.76</td>
</tr>
<tr>
<td>Lugana</td>
<td align="char" char=".">12.37</td>
<td align="char" char=".">.94</td>
<td align="char" char=".">1.36</td>
<td align="char" char=".">10.6</td>
<td>88</td>
<td align="char" char=".">1.98</td>
<td align="char" char=".">.57</td>
</tr>
<tr>
<td>Lugana</td>
<td align="char" char=".">12.33</td>
<td align="char" char=".">1.1</td>
<td align="char" char=".">2.28</td>
<td>16</td>
<td>101</td>
<td align="char" char=".">2.05</td>
<td align="char" char=".">1.09</td>
</tr>
<tr>
<td>Primitivo</td>
<td align="char" char=".">12.86</td>
<td align="char" char=".">1.35</td>
<td align="char" char=".">2.32</td>
<td>18</td>
<td>122</td>
<td align="char" char=".">1.51</td>
<td align="char" char=".">1.25</td>
</tr>
<tr>
<td>Primitivo</td>
<td align="char" char=".">12.88</td>
<td align="char" char=".">2.99</td>
<td align="char" char=".">2.4</td>
<td>20</td>
<td>104</td>
<td align="char" char=".">1.3</td>
<td align="char" char=".">1.22</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
	<p><italic>Note.</italic> Wine origin and chemical features of the wine. Only seven columns and six lines of the data set are shown here.</p>
</table-wrap-foot>
</table-wrap>
<p>Assuming all three types of wine are indistinguishable with respect to the chemical features under investigation, no classifier would be able to perform better than guessing, which corresponds to a BAC of <inline-formula><mml:math id="x6" display="inline"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula>. Our research hypothesis, in terms of the BAC, is whether the BAC is above <inline-formula><mml:math id="x7" display="inline"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula> for a classifier that asymptotically should be able to detect the difference.</p>
<p>We choose a Support Vector Machine (SVM) as our classifier, import the IV package, and initialize the IV object with this classifier and our dataset. Then, we select an initial training set size of five and the default batch size of one since our dataset is relatively small. With this setup, we run the IV process. In the following we will illustrate the code we use in simplified code snippets. Since there are random processes involved the code will not always yield the exact same results.</p><code position="anchor" orientation="portrait" xml:space="preserve">
1      <italic># Numpy</italic>
2      <bold>import numpy as np</bold>
3      <italic># Scikit-Learn</italic>
4      <bold>from sklearn.datasets import</bold> load_wine
5      <bold>from sklearn.svm import</bold> SVC
6      <bold>from sklearn.neighbors import</bold> KNeighborsClassifier
7      <bold>from sklearn.linear_model import</bold> LogisticRegression
8      <bold>from sklearn.ensemble import</bold> RandomForestClassifier
9      <italic># Independent validation</italic>
10     <bold>from independent_validation import</bold> *
11
12     <italic># Part 1 Group Diﬀerence</italic>
13     wine = load_wine()
14     X, y = wine.data, wine.target
15
16     <italic># use Independent validation</italic>
17     iv_svm = IV(X, y, SVC(gamma='scale')) <italic># initiating</italic>
18     iv_svm.run_iv(start_trainset_size=5) <italic># classify samples</italic>
</code>
<p>We then start the estimation process to obtain the posterior distribution for <italic>a</italic> and <italic>b</italic>. Using a burn-in phase of 1500 samples, a thinning factor of 10, and the default step size of 0.2, we generate 1000 samples from the posterior.</p><code position="anchor" orientation="portrait" xml:space="preserve">
1      <italic># use mcmc to compute posterior</italic>
2      iv_svm.compute_posterior(burn_in=1500, thin=10, step_size=0.2, num_samples=1000)
</code>
<p>We can now extract various numerical values and distributions from this object; <xref ref-type="fig" rid="fig2">Figure 2</xref> shows the corresponding plot. To investigate whether the model can predict the different wines, we calculate the posterior probability, assuming a flat prior, that the BAC exceeds <inline-formula><mml:math id="x8" display="inline"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula>. We find that, within the limits of machine precision, the probability that the BAC is less than or equal to <inline-formula><mml:math id="x9" display="inline"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula> is effectively zero.</p><fig id="fig2" position="anchor" orientation="portrait"><label>Figure 2</label><caption><title>Posterior Distribution of the BAC for the SVM Classifier</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="meth.18873-f2.png" position="anchor" orientation="portrait"/></fig><code position="anchor" orientation="portrait" xml:space="preserve">
1      bacc_svm_dist = iv_svm.get_bacc_dist() <italic># get desired output</italic>
2
3      <italic># MAP</italic>
4      print(”Mode (MAP) value:”, bacc_svm_dist.map())
5
6      <italic># 95% CI</italic>
7      lower_bound = bacc_svm_dist.ppf(0.025)
8      upper_bound = bacc_svm_dist.ppf(0.975)
9      print(”95% CI:”, lower_bound, ”-”, upper_bound)
10
11     <italic># calculate below 1/3</italic>
12     density_at_one_third = bacc_svm_dist.cdf(1/3) <italic># this is density up to one third</italic>
13     print(”Density up to 1/3:”, density_at_one_third)
14
15     iv_svm.get_bacc_dist(plot=<bold>True</bold>) <italic># (Note: The plot in the article has been adapted)</italic>
</code>
<p>We extract the MAP of the distribution from the IV object, obtaining MAP = 65.46% with a 95% CI of [58.1%, 72.1%]. To further illustrate the results, we use the plot parameter of the distribution function to visualize the BAC. Since the distribution is precomputed, the function immediately generates the plot, allowing us to visually inspect the distribution around the MAP. The lower bound of the CI is at 58.1%, the guessing threshold of <inline-formula><mml:math id="x10" display="inline"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:mfrac></mml:math></inline-formula> is not within that interval. This confirms that the prediction is better than chance. Based on these findings, we conclude that there are identifiable differences among the types of wine and that the model is capable of distinguishing between them.</p>
<p>We are now interested in determining whether two of our wine types, Barolo and Lugana, differ substantially in their chemical composition. To investigate this, we select a subset of our dataset containing only these two wines. We then create a new IV object and run the compute posterior method using the same default parameters as before, still using the SVM to distinguish between Barolo and Lugana. We are interested in the performance in terms of sensitivity and specificity of detecting Barolo wine. Again, this could also be the sensitivity and specificity of a screening tool in clinical psychology. We access those in the IV class by specifying the two wine labels in the accuracy method. The sensitivity, which reflects how well the model successfully identifies Barolo wines, is 76.92%. The specificity, i.e., the number of correct classifications of the other wine type, Lugana, is reported as 98.07%. The result suggests that although the classifier performs well overall, its ability to distinguish Barolo is lower than its ability to identify Lugana. Encouraged by these insights, we now turn our attention to a broader question: could another classifier perform even better?</p><code position="anchor" orientation="portrait" xml:space="preserve">
1      selected_indices = np.where(y != 2)[0] <italic># Select only Barolo and Lugana</italic>
2
3      X_bin = X[selected_indices]
4      y_bin = y[selected_indices]
5
6      iv_svm = IV(X_bin, y_bin, SVC(gamma=’scale’))
7
8      iv_svm.run_iv(start_trainset_size=5)
9      iv_svm.compute_posterior(burn_in=1500, thin=10, step_size=0.2, num_samples=1000)
10
11     <italic># get sensitivity</italic>
12     barolo = iv_svm.get(key=0)
13     print(”Barolo (MAP) value:”, barolo.map())
14
15     <italic># get specificity</italic>
16     lugana = iv_svm.get(key=1)
17     print(”Lugana (MAP) value:”, lugana.map())
</code></sec>
<sec id="s3_2"><title>Which Classifier is Best?</title>
<p>We have already found a model that can distinguish between the wines, but we are not satisfied and want to know if there is a better model available. We create three more IV objects using the classifiers k-Nearest Neighbor (kNN), Random Forest (RF), and Logistic Regression (LR). We then run the IV and compute the posterior for each. To compare the different classifiers, we decide to evaluate them based on their BAC distributions, with higher values being better. See code in the next subsection (run with argument mode=“bacc” in Line 10). <xref ref-type="fig" rid="fig3">Figure 3</xref> shows the plotted distributions. As can be seen, the SVM and the kNN perform noticeably worse than the LR and the RF. The RF shows the best performance with a MAP of 95.64%, which is nearly perfect for our data. The LR has a MAP of 93.53% and thus is very similar. We therefore are curious about the probability that the RF outperforms the LR. A service function tests whether one random variable is greater than another, resulting in a probability of 77.59% for the hypothesis that the RF outperforms the LR on a latent level. We therefore change our model to the RF, now having a model that improves our ability to determine the wine type based on its chemical ingredients.</p><fig id="fig3" position="anchor" orientation="portrait"><label>Figure 3</label><caption><title>Comparison of BAC Distributions for Different Classifiers</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="meth.18873-f3.png" position="anchor" orientation="portrait"/></fig></sec>
<sec id="s3_3"><title>Which Classifier has the Best Global Accuracy?</title>
<p>Suppose we want to create a tool that can predict the type of wine based on its chemical ingredients. We are paid per correctly classified wine, so we are not interested in the BAC but in the global accuracy, which is the percentage of wines correctly classified. We now want to plot the accuracy distributions of our classifiers to find the best option. See code below (run with argument mode=“acc”). <xref ref-type="fig" rid="fig4">Figure 4</xref> shows the plot, and again the RF performs best with a MAP of 98.58% while the probability that it outperforms the LR is 98.38%. Therefore, we choose the RF.</p><?figure fig3?><fig id="fig4" position="anchor" orientation="portrait"><label>Figure 4</label><caption><title>Comparison of Global Accuracy Distributions for Different Classifiers</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="meth.18873-f4.png" position="anchor" orientation="portrait"/></fig><code position="anchor" orientation="portrait" xml:space="preserve">
1      <italic># Define the classifiers.</italic>
2      classifiers = {
3      ’Logistic_Regression’: LogisticRegression(solver=’newton-cg’),
4      ’Support_Vector_Machine’: SVC(gamma=’scale’),
5      ’K_Nearest_Neighbors’: KNeighborsClassifier(),
6      ’Random_Forest’: RandomForestClassifier()
7      }
8
9      <italic># Define the metric</italic>
10     mode = ”acc” <italic># change this to ”bacc” to get the balanced accuracy instead.</italic>
11     <bold>assert</bold> mode <bold>in</bold> [’bacc’, ’acc’]
12     bacc = mode == ’bacc’
13     acc = mode == ’acc’
14
15     <italic># Dictionary to store the accuracy distributions.</italic>
16     dists = {}
17     <bold>for</bold> clf_name, clf <bold>in</bold> classifiers.items():
18         print(f”\nRunning IV for classifier: {clf_name}”)
19
20         iv_instance = IV(X, y, clf)
21         iv_instance.run_iv(start_trainset_size=5)
22         iv_instance.compute_posterior(burn_in=1500, thin=10, step_size=0.2,num_samples=1000)
23
24         <bold>if</bold> bacc:
25             dist_clf = iv_instance.get_bacc_dist(plot=<bold>False</bold>)
26         <bold>if</bold> acc:
27             dist_clf = iv_instance.get_acc_dist(plot=<bold>False</bold>)
28         dists[clf_name] = dist_clf
29
30      <italic># compare Random Forest and Logistic Regression</italic>
31      prob_RF_gt_LR = dists[’Random_Forest’].is_greater_than(dists[’Logistic_Regression’])
32      print(’Probability that RF accuracy is greater than LR accuracy:’, prob_RF_gt_LR)
</code></sec>
<sec id="s3_4"><title>What is the Expected Accuracy for Finite Sample Sizes?</title>
<p>There is one more thing we can do. To reduce costs, we want to use as few wines as possible for training, and we need to determine the optimal size. We investigate the impact of an increasing training set size on the expected accuracy by examining the development of the accuracy with respect to the training size. The IV object generates this posterior distribution for each possible test set size, and generates a plot showing the mean along with the first and third quartiles for every training set size from 1 to 100, which is the default value. This results in <xref ref-type="fig" rid="fig5">Figure 5</xref>. We look at the plot and determine that the first 20 samples are the most impactful, so we will purchase only 20 samples to save money.</p><fig id="fig5" position="anchor" orientation="portrait"><label>Figure 5</label><caption><title>Development of Expected Accuracy as a Function of Training Set Size</title></caption><graphic mimetype="image" mime-subtype="png" xlink:href="meth.18873-f5.png" position="anchor" orientation="portrait"/></fig><code position="anchor" orientation="portrait" xml:space="preserve">
1      max_trainset_size = 100
2      
3      iv_dev = IV(X, y, RandomForestClassifier())
4      iv_dev.run_iv(start_trainset_size=5)
5      iv_dev.compute_posterior(burn_in=1000, thin=10, step_size=0.1, num_samples=1000)
6      trainset_sizes = np.arange(1, max_trainset_size + 1)
7      
8      mean_acc_list, lower_bound_list, upper_bound_list = iv_dev.get_development(key=’acc’, n=101, plot=<bold>True</bold>, confidence_range=0.5)
9      <italic># (Note: The plot in the article has been adapted)</italic>
</code></sec></sec>
<sec sec-type="body" id="s4"><title>Discussion</title>
<p>IV is a method for evaluating classifier accuracy based on known data likelihood. Existing implementations are limited to R and are not widely available as packages (e.g., on CRAN; <xref ref-type="bibr" rid="Xbib5">Braun et al., 2023</xref>). This article introduces a Python package, integrated with the scikit-learn library, which is currently the most widely used programming language in machine learning. The package employs a Metropolis-Hastings MCMC algorithm to estimate the posterior probability of classifier accuracy within each class and aggregates these estimates into multiple relevant metrics and distributions. An empirical example using the Wine dataset (<xref ref-type="bibr" rid="Xbib1">Aeberhard et al., 1994</xref>) demonstrates the package’s functionality and output.</p>
<sec id="s4_1"><title>Interpretations</title>
<p>To the best of the authors’ knowledge, no other implementation exists that computes the Bayesian posterior of a classifier’s asymptotic within-class accuracy. Existing methods that approximate at least frequentist baseline distributions for a purely guessing classifier have significant drawbacks: some are computationally expensive (e.g., permutation tests), others reduce available data (e.g., training-test set separation), and some do not work correctly to begin with (e.g., CV using a binomial null distribution). Moreover, none of these methods allow comparisons beyond anything but chance performance or support a Bayesian approach.</p>
<p>The Bayesian distributions of the asymptotic within-class accuracy serve as the foundation for computing the posterior of key indices describing classifier performance. They also enable Bayesian inference on empirical hypotheses, such as whether two groups differ or one classifier outperforms another.</p>
<p>These indices include the classifier’s specificity and sensitivity (i.e., within-class accuracy for two classes), the asymptotic total classifier accuracy, the asymptotic balanced accuracy, and any other weighted sum of class accuracies. For all of these performance measures, the researcher can also use the package to compute the expectation for a final training set size (again represented as a Bayesian posterior). Each posterior distribution can be accessed either through the full set of samples or via summary descriptors, including the MAP, mean, standard deviation, credible intervals and percentile intervals of any size, and specific probabilities for defined thresholds. For example, researchers can determine the probability that the classifier performs better than chance or better than a chosen performance threshold.</p>
<p>Using these capabilities, the package enables researchers in the behavioral sciences to address various common research questions. For example, if clinical research wants to use a classifier — such as a threshold on a sum score — as a screening tool for a psychological disorder, the package provides Bayesian estimates of the sensitivity and specificity of the test. This allows one to test hypotheses about these, such as whether the sensitivity exceeds 90 percent.</p>
<p>Similarly, a sociologist may want to examine whether individuals with low socio-economic status (SES) perform differently from those with high SES on a diverse set of cognitive tasks that cannot be easily combined into a single score. By training a classifier on the two groups, they can use the Bayesian posterior of balanced accuracy (BAC) to determine the probability that the classifier performs better than chance, providing evidence of a meaningful group difference.</p>
<p>Analogously, a neurologist might investigate whether brain activities differ between two experimental conditions. Again, by training a classifier on imaging data, they can use the package to obtain a Bayesian posterior probability that the classification performance exceeds guessing.</p>
<p>Finally, an expert in machine learning may be interested in comparing a newly developed classifier to an existing one on a benchmark dataset. The package allows them to obtain the posterior distributions of both classifiers and visualize the posterior probability that one outperforms the other in terms of accuracy, BAC, or any other weighted accuracy measure.</p></sec>
<sec id="s4_2"><title>Limitations</title>
<p>A limitation of IV is that the assumed functional form mapping training set size to classifier performance within a group is a good approximation for training set sizes around ten samples but less accurate on very low sample sizes. Additionally, testing is not entirely independent when sample sizes are very low, as misclassified items added to the training set can bias subsequent classifications. Overly small starting sets may lead to Heywood cases in the Bayesian estimation.</p>
<p>However, for moderate sample sizes, this issue largely disappears, as the initial training set size can be made sufficiently large. For small datasets, though, this approach results in some data loss, albeit less than in methods like train-test splitting. To mitigate this effect for small <italic>N</italic>, the Python package introduced constraints on the minimal expected success rate probability to the guessing probability. While this improves the approximation, it does not fully resolve the issue. Therefore, whenever possible, users are advised to use sufficiently large initial test sets.</p>
<p>The batch size used to add items to the training set in IV involves a tradeoff. From an estimation perspective, a batch size of one is optimal. However, for large datasets with thousands of samples, this approach is computationally expensive. For such large datasets, using larger batch sizes — in the order of magnitude of one tenth of the total dataset — results only in negligible loss of information, while significantly accelerating processing.</p></sec>
<sec id="s4_3"><title>Future Directions and Conclusions</title>
<p>A promising future direction in this line of research is to mathematically investigate whether an improved model for expected accuracy at very low training set sizes can be developed, and possibly integrated with the existing model, which performs well for moderate sample sizes.</p>
<p>Another open question is to what extent IV can be applied to evaluate machine learning regression results or in the context of Large Language Models (<xref ref-type="bibr" rid="Xbib33">Touvron et al., 2023</xref>). Similar to categorical classification, CV is commonly employed to assess regression performance, with various suggestions for loss functions (<xref ref-type="bibr" rid="Xbib25">Picard &amp; Cook, 1984</xref>). Accurately quantifying uncertainty in loss may require an independent validation technique analogous to the one proposed here for categorical classification.</p>
<p>Independent validation is the preferred method for optimizing statistically accurate accuracy estimation. With the Python implementation introduced here, it can now be seamlessly integrated with classifiers in empirical research. This will help researchers in nearly all empirical research fields to improve their research and strengthen the progress of science.</p></sec></sec>
</body>
<back>
<ref-list><title>References</title>
<ref id="Xbib1"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Aeberhard</surname>, <given-names>S.</given-names></string-name>, <string-name name-style="western"><surname>Coomans</surname>, <given-names>D.</given-names></string-name>, &amp; <string-name name-style="western"><surname>De Vel</surname>, <given-names>O.</given-names></string-name> (<year>1994</year>). <article-title>Comparative analysis of statistical pattern recognition methods in high dimensional settings</article-title>. <source><italic>Pattern Recognition</italic></source>, <volume>27</volume>(<issue>8</issue>), <fpage>1065</fpage>–<lpage>1077</lpage>.</mixed-citation></ref>
<ref id="Xbib2"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Bay</surname>, <given-names>S. D.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Pazzani</surname>, <given-names>M. J.</given-names></string-name> (<year>2001</year>). <article-title>Detecting group differences: Mining contrast sets</article-title>. <source><italic>Data Mining and Knowledge Discovery</italic></source>, <volume>5</volume>(<issue>3</issue>), <fpage>213</fpage>–<lpage>246</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1023/A:1011429418057">https://doi.org/10.1023/A:1011429418057</ext-link></mixed-citation></ref>
<ref id="Xbib3"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Boucheron</surname>, <given-names>S.</given-names></string-name>, <string-name name-style="western"><surname>Bousquet</surname>, <given-names>O.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Lugosi</surname>, <given-names>G.</given-names></string-name> (<year>2005</year>). <article-title>Theory of classification: A survey of some recent advances</article-title>. <source><italic>ESAIM: Probability and Statistics</italic></source>, <volume>9</volume>, <fpage>323</fpage>–<lpage>375</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1051/ps:2005018">https://doi.org/10.1051/ps:2005018</ext-link></mixed-citation></ref>
<ref id="Xbib4"><mixed-citation publication-type="author"><string-name name-style="western"><surname>Bouckaert</surname>, <given-names>R. R.</given-names></string-name> (<year>2003</year>). <article-title>Choosing between two learning algorithms based on calibrated tests</article-title>. <source><italic>Proceedings of the Twentieth International Conference on International Conference on Machine Learning</italic></source> (pp. 51–58).</mixed-citation></ref>
<ref id="Xbib5"><mixed-citation publication-type="book"><string-name name-style="western"><surname>Braun</surname>, <given-names>T.</given-names></string-name>, <string-name name-style="western"><surname>Eckert</surname>, <given-names>H.</given-names></string-name>, &amp; <string-name name-style="western"><surname>von Oertzen</surname>, <given-names>T.</given-names></string-name> (<year>2023</year>). <chapter-title>Independent validation as a validation method for classification</chapter-title>. <source><italic>Quantitative and Computational Methods in Behavioral Sciences</italic></source>, <volume>3</volume>, <fpage>1</fpage>–<lpage>30</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.5964/qcmb.12069">https://doi.org/10.5964/qcmb.12069</ext-link></mixed-citation></ref>
<ref id="Xbib6"><mixed-citation publication-type="web"><string-name name-style="western"><surname>Breiman</surname>, <given-names>L.</given-names></string-name>, <string-name name-style="western"><surname>Friedman</surname>, <given-names>J.</given-names></string-name>, <string-name name-style="western"><surname>Olshen</surname>, <given-names>R. A.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Stone</surname>, <given-names>C. J.</given-names></string-name> (<year>2017</year>, October). <source><italic>Classification and regression trees</italic></source>. <comment>Chapman Hall/CRC</comment>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1201/9781315139470">https://doi.org/10.1201/9781315139470</ext-link></mixed-citation></ref>
<ref id="Xbib7"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Cortes</surname>, <given-names>C.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Vapnik</surname>, <given-names>V.</given-names></string-name> (<year>1995</year>). <article-title>Support-vector networks</article-title>. <source><italic>Machine Learning</italic></source>, <volume>20</volume>(<issue>3</issue>), <fpage>273</fpage>–<lpage>297</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1007/BF00994018">https://doi.org/10.1007/BF00994018</ext-link></mixed-citation></ref>
<ref id="Xbib8"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Counsell</surname>, <given-names>A.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Harlow</surname>, <given-names>L. L.</given-names></string-name> (<year>2017</year>). <article-title>Reporting practices and use of quantitative methods in Canadian journal articles in psychology</article-title>. <source><italic>Canadian Psychology / Psychologie canadienne</italic></source>, <volume>58</volume>(<issue>2</issue>), <fpage>140</fpage>–<lpage>147</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1037/cap0000074">https://doi.org/10.1037/cap0000074</ext-link></mixed-citation></ref>
<ref id="Xbib9"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Cover</surname>, <given-names>T.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Hart</surname>, <given-names>P.</given-names></string-name> (<year>1967</year>). <article-title>Nearest neighbor pattern classification</article-title>. <source><italic>IEEE Transactions on Information Theory</italic></source>, <volume>13</volume>(<issue>1</issue>), <fpage>21</fpage>–<lpage>27</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/TIT.1967.1053964">https://doi.org/10.1109/TIT.1967.1053964</ext-link></mixed-citation></ref>
<ref id="Xbib10"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Devroye</surname>, <given-names>L.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Wagner</surname>, <given-names>T.</given-names></string-name> (<year>1979</year>). <article-title>Distribution-free performance bounds for potential function rules</article-title>. <source><italic>IEEE Transactions on Information Theory</italic></source>, <volume>25</volume>(<issue>5</issue>), <fpage>601</fpage>–<lpage>604</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/TIT.1979.1056087">https://doi.org/10.1109/TIT.1979.1056087</ext-link></mixed-citation></ref>
<ref id="Xbib11"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Dietterich</surname>, <given-names>T. G.</given-names></string-name> (<year>1998</year>). <article-title>Approximate statistical tests for comparing supervised classification learning algorithms</article-title>. <source><italic>Neural Computation</italic></source>, <volume>10</volume>(<issue>7</issue>), <fpage>1895</fpage>–<lpage>1923</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1162/089976698300017197">https://doi.org/10.1162/089976698300017197</ext-link></mixed-citation></ref>
<ref id="Xbib12"><mixed-citation publication-type="book"><string-name name-style="western"><surname>Fisher</surname>, <given-names>R. A.</given-names></string-name> (<year>1970</year>). <chapter-title>Statistical methods for research workers</chapter-title>. <source><italic>Breakthroughs in statistics: Methodology and distribution</italic></source> (pp. 66–70). <publisher-name>Oliver and Boyd</publisher-name>.</mixed-citation></ref>
<ref id="Xbib13"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Geisser</surname>, <given-names>S.</given-names></string-name> (<year>1975</year>). <article-title>The predictive sample reuse method with applications</article-title>. <source><italic>Journal of the American Statistical Association</italic></source>, <volume>70</volume>(<issue>350</issue>), <fpage>320</fpage>–<lpage>328</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1080/01621459.1975.10479865">https://doi.org/10.1080/01621459.1975.10479865</ext-link></mixed-citation></ref>
	<ref id="Xbib14"><mixed-citation publication-type="book"><string-name name-style="western"><surname>Hastie</surname>, <given-names>T.</given-names></string-name>, <string-name name-style="western"><surname>Tibshirani</surname>, <given-names>R.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Friedman</surname>, <given-names>J.</given-names></string-name> (<year>2009</year>). <italic>The elements of statistical learning: Data mining, inference, and prediction</italic>. Springer.</mixed-citation></ref>
	<ref id="Xbib15"><mixed-citation publication-type="other"><string-name name-style="western"><surname>Hastings</surname>, <given-names>W. K.</given-names></string-name> (<year>1970</year>). <article-title>Monte Carlo sampling methods using Markov chains and their applications</article-title>. <source><italic>Biometrika</italic></source>, <volume>57</volume>(<issue>1</issue>), <fpage>97</fpage>–<lpage>109</lpage>.</mixed-citation></ref>
<ref id="Xbib16"><mixed-citation publication-type="author"><string-name name-style="western"><surname>Ho</surname>, <given-names>T. K.</given-names></string-name> (<year>1995</year>). <article-title>Random decision forests</article-title>. <source><italic>Proceedings of the 3<sup>rd</sup> International Conference on Document Analysis and Recognition</italic></source> (Vol. 1, pp. 278–282). <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1109/ICDAR.1995.598994">https://doi.org/10.1109/ICDAR.1995.598994</ext-link></mixed-citation></ref>
<ref id="Xbib17"><mixed-citation publication-type="report"><string-name name-style="western"><surname>Kim</surname>, <given-names>B.</given-names></string-name>, &amp; <string-name name-style="western"><surname>von Oertzen</surname>, <given-names>T.</given-names></string-name> (<year>2017</year>). <source><italic>Independent validation remedies alpha inflation in classifier accuracy testing</italic></source> (<comment>Technical Report</comment>). <publisher-name>Department of Psychology, University of Virginia-Charlottesville</publisher-name>.</mixed-citation></ref>
<ref id="Xbib18"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Kim</surname>, <given-names>B.</given-names></string-name>, &amp; <string-name name-style="western"><surname>von Oertzen</surname>, <given-names>T.</given-names></string-name> (<year>2018</year>). <article-title>Classifiers as a model-free group comparison test</article-title>. <source><italic>Behavior Research Methods</italic></source>, <volume>50</volume>(<issue>1</issue>), <fpage>416</fpage>–<lpage>426</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3758/s13428-017-0880-z">https://doi.org/10.3758/s13428-017-0880-z</ext-link></mixed-citation></ref>
	<ref id="Xbib19"><mixed-citation publication-type="author"><string-name name-style="western"><surname>Kohavi</surname>, <given-names>R.</given-names></string-name> (<year>1995</year>). <article-title>A study of cross-validation and bootstrap for accuracy estimation and model selection</article-title>. <source><italic>Proceedings of the 14<sup>th</sup> International Joint Conference on Artificial Intelligence</italic></source> (Vol. 2, pp. 1137–1143).</mixed-citation></ref>
	<ref id="Xbib20"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Levene</surname>, <given-names>H.</given-names></string-name> (<year>1960</year>). <article-title>Robust tests for equality of variances</article-title>. <source>Journal of the American Statistical Association</source>, <volume>69</volume>(<issue>346</issue>), <fpage>364</fpage>-<lpage>367</lpage></mixed-citation></ref>
<ref id="Xbib21"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Metropolis</surname>, <given-names>N.</given-names></string-name>, <string-name name-style="western"><surname>Rosenbluth</surname>, <given-names>A. W.</given-names></string-name>, <string-name name-style="western"><surname>Rosenbluth</surname>, <given-names>M. N.</given-names></string-name>, <string-name name-style="western"><surname>Teller</surname>, <given-names>A. H.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Teller</surname>, <given-names>E.</given-names></string-name> (<year>1953</year>). <article-title>Equation of state calculations by fast computing machines</article-title>. <source><italic>Journal of Chemical Physics</italic></source>, <volume>21</volume>(<issue>6</issue>), <fpage>1087</fpage>–<lpage>1092</lpage>.</mixed-citation></ref>
<ref id="Xbib22"><mixed-citation publication-type="other"><string-name name-style="western"><surname>Mooney</surname>, <given-names>P.</given-names></string-name> (<year>2022</year>). <italic>The 2022 Kaggle Machine Learning Data Science Survey</italic>.  Kaggle.</mixed-citation></ref>
<ref id="Xbib23"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Pearson</surname>, <given-names>K.</given-names></string-name> (<year>1900</year>). <article-title>X. on the criterion that a given system of deviations from the probable in the case of a correlated system of variables is such that it can be reasonably supposed to have arisen from random sampling</article-title>. <source><italic>The London, Edinburgh, and Dublin Philosophical Magazine and Journal of Science</italic></source>, <volume>50</volume>(<issue>302</issue>), <fpage>157</fpage>–<lpage>175</lpage>.</mixed-citation></ref>
<ref id="Xbib24"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Pesarin</surname>, <given-names>F.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Salmaso</surname>, <given-names>L.</given-names></string-name> (<year>2010</year>). <article-title>The permutation testing approach: A review</article-title>. <source><italic>Statistica</italic></source>, <volume>70</volume>(<issue>4</issue>), <fpage>481</fpage>–<lpage>509</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.6092/issn.1973-2201/3599">https://doi.org/10.6092/issn.1973-2201/3599</ext-link></mixed-citation></ref>
<ref id="Xbib25"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Picard</surname>, <given-names>R. R.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Cook</surname>, <given-names>R. D.</given-names></string-name> (<year>1984</year>). <article-title>Cross-validation of regression models</article-title>. <source><italic>Journal of the American Statistical Association</italic></source>, <volume>79</volume>(<issue>387</issue>), <fpage>575</fpage>–<lpage>583</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1080/01621459.1984.10478083">https://doi.org/10.1080/01621459.1984.10478083</ext-link></mixed-citation></ref>
<ref id="Xbib26"><mixed-citation publication-type="book"><collab>R Development Core Team</collab> (<year>2010</year>). <source><italic>R: A language and environment for statistical computing: Reference index</italic></source> <comment>[OCLC: 1120300286]</comment>. <publisher-name>R Foundation for Statistical Computing</publisher-name>.</mixed-citation></ref>
	<ref id="Xbib27"><mixed-citation publication-type="book"><string-name name-style="western"><surname>Rossi</surname>, <given-names>J. S.</given-names></string-name> (<year>2013</year>). <article-title>Statistical power analysis</article-title>. <comment>In J. A. Schinka &amp; W. F. Velicer (Eds.)</comment> <italic>Handbook of psychology: Research methods in psychology, 2<sup>nd</sup> ed.</italic> (Vol. 2, pp. 71–108). <publisher-name>John Wiley &amp; Sons.</publisher-name></mixed-citation></ref>
<ref id="Xbib28"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Sahiner</surname>, <given-names>B.</given-names></string-name>, <string-name name-style="western"><surname>Chan</surname>, <given-names>H.-P.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Hadjiiski</surname>, <given-names>L.</given-names></string-name> (<year>2008</year>). <article-title>Classifier performance estimation under the constraint of a finite sample size: Resampling schemes applied to neural network classifiers</article-title>. <source><italic>Neural Networks</italic></source>, <volume>21</volume>(<issue>2</issue>), <fpage>476</fpage>–<lpage>483</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/j.neunet.2007.12.012">https://doi.org/10.1016/j.neunet.2007.12.012</ext-link></mixed-citation></ref>
<ref id="Xbib29"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Salzberg</surname>, <given-names>S. L.</given-names></string-name> (<year>1997</year>). <article-title>On comparing classifiers: Pitfalls to avoid and a recommended approach</article-title>. <source><italic>Data Mining and Knowledge Discovery</italic></source>, <volume>1</volume>(<issue>3</issue>), <fpage>317</fpage>–<lpage>328</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1023/A:1009752403260">https://doi.org/10.1023/A:1009752403260</ext-link></mixed-citation></ref>
<ref id="Xbib30"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Santafe</surname>, <given-names>G.</given-names></string-name>, <string-name name-style="western"><surname>Inza</surname>, <given-names>I.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Lozano</surname>, <given-names>J. A.</given-names></string-name> (<year>2015</year>). <article-title>Dealing with the evaluation of supervised classification algorithms</article-title>. <source><italic>Artificial Intelligence Review</italic></source>, <volume>44</volume>(<issue>4</issue>), <fpage>467</fpage>–<lpage>508</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1007/s10462-015-9433-y">https://doi.org/10.1007/s10462-015-9433-y</ext-link></mixed-citation></ref>
<ref id="Xbib31"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Stone</surname>, <given-names>M.</given-names></string-name> (<year>1974</year>). <article-title>Cross-validatory choice and assessment of statistical predictions</article-title>. <source><italic>Journal of the Royal Statistical Society Series B: Statistical Methodology</italic></source>, <volume>36</volume>(<issue>2</issue>), <fpage>111</fpage>–<lpage>133</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1111/j.2517-6161.1974.tb00994.x">https://doi.org/10.1111/j.2517-6161.1974.tb00994.x</ext-link></mixed-citation></ref>
<ref id="Xbib32"><mixed-citation publication-type="book"><collab>Student</collab> (<year>1908</year>). <chapter-title>The probable error of a mean</chapter-title>. <source><italic>Biometrika</italic></source>, <volume>6</volume>(<issue>1</issue>), <fpage>1</fpage>–<lpage>25</lpage>.</mixed-citation></ref>
<ref id="Xbib33"><mixed-citation publication-type="web"><string-name name-style="western"><surname>Touvron</surname>, <given-names>H.</given-names></string-name>, <string-name name-style="western"><surname>Lavril</surname>, <given-names>T.</given-names></string-name>, <string-name name-style="western"><surname>Izacard</surname>, <given-names>G.</given-names></string-name>, <string-name name-style="western"><surname>Martinet</surname>, <given-names>X.</given-names></string-name>, <string-name name-style="western"><surname>Lachaux</surname>, <given-names>M.-A.</given-names></string-name>, <string-name name-style="western"><surname>Lacroix</surname>, <given-names>T.</given-names></string-name>, <string-name name-style="western"><surname>Rozière</surname>, <given-names>B.</given-names></string-name>, <string-name name-style="western"><surname>Goyal</surname>, <given-names>N.</given-names></string-name>, <string-name name-style="western"><surname>Hambro</surname>, <given-names>E.</given-names></string-name>, <string-name name-style="western"><surname>Azhar</surname>, <given-names>F.</given-names></string-name>, <string-name name-style="western"><surname>Rodriguez</surname>, <given-names>A.</given-names></string-name>, <string-name name-style="western"><surname>Joulin</surname>, <given-names>A.</given-names></string-name>, <string-name name-style="western"><surname>Grave</surname>, <given-names>E.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Lample</surname>, <given-names>G.</given-names></string-name> (<year>2023</year>, <comment>February</comment>). <italic>LLaMA: Open and efficient foundation language models</italic> [arXiv:2302.13971]. arXiv. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.48550/arXiv.2302.13971">https://doi.org/10.48550/arXiv.2302.13971</ext-link></mixed-citation></ref>
	<ref id="Xbib34"><mixed-citation publication-type="web"><string-name name-style="western"><surname>van Rossum</surname>, <given-names>G.</given-names></string-name> (<year>1995</year>). <article-title>Python tutorial</article-title>. In <italic>Department of Computer Science [CS]</italic> (R 9526). CWI. <ext-link ext-link-type="uri" xlink:href="https://ir.cwi.nl/pub/5007">https://ir.cwi.nl/pub/5007</ext-link></mixed-citation></ref>
	
	
	<ref id="bib34.5"><mixed-citation publication-type="data">von Oertzen, J. T. (2026). <italic>Implementation of independent validation in Python</italic> [GitHub project page containing Python code for study examples]. GitHub. <ext-link ext-link-type="uri" xlink:href="https://github.com/jonasthedevonoertzen/IV">https://github.com/jonasthedevonoertzen/IV</ext-link></mixed-citation></ref>
	
<ref id="Xbib35"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Wee</surname>, <given-names>A. G.</given-names></string-name> (<year>2000</year>). <article-title>Comparison of impression materials for direct multi-implant impressions</article-title>. <source><italic>Journal of Prosthetic Dentistry</italic></source>, <volume>83</volume>(<issue>3</issue>), <fpage>323</fpage>–<lpage>331</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1016/S0022-3913(00)70136-3">https://doi.org/10.1016/S0022-3913(00)70136-3</ext-link></mixed-citation></ref>
<ref id="Xbib36"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Weisberg</surname>, <given-names>Y. J.</given-names></string-name>, <string-name name-style="western"><surname>DeYoung</surname>, <given-names>C. G.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Hirsh</surname>, <given-names>J. B.</given-names></string-name> (<year>2011</year>). <article-title>Gender differences in personality across the ten aspects of the Big Five</article-title>. <source><italic>Frontiers in Psychology</italic></source>, <volume>2</volume>, <elocation-id>178</elocation-id>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fpsyg.2011.00178">https://doi.org/10.3389/fpsyg.2011.00178</ext-link></mixed-citation></ref>
<ref id="Xbib37"><mixed-citation publication-type="journal"><string-name name-style="western"><surname>Zhao</surname>, <given-names>M.</given-names></string-name>, <string-name name-style="western"><surname>Wang</surname>, <given-names>M.</given-names></string-name>, <string-name name-style="western"><surname>Zhang</surname>, <given-names>J.</given-names></string-name>, <string-name name-style="western"><surname>Gu</surname>, <given-names>J.</given-names></string-name>, <string-name name-style="western"><surname>Zhang</surname>, <given-names>P.</given-names></string-name>, <string-name name-style="western"><surname>Xu</surname>, <given-names>Y.</given-names></string-name>, <string-name name-style="western"><surname>Ye</surname>, <given-names>J.</given-names></string-name>, <string-name name-style="western"><surname>Wang</surname>, <given-names>Z.</given-names></string-name>, <string-name name-style="western"><surname>Ye</surname>, <given-names>D.</given-names></string-name>, <string-name name-style="western"><surname>Pan</surname>, <given-names>W.</given-names></string-name>, <string-name name-style="western"><surname>Shen</surname>, <given-names>B.</given-names></string-name>, <string-name name-style="western"><surname>He</surname>, <given-names>H.</given-names></string-name>, <string-name name-style="western"><surname>Liu</surname>, <given-names>M.</given-names></string-name>, <string-name name-style="western"><surname>Liu</surname>, <given-names>M.</given-names></string-name>, <string-name name-style="western"><surname>Luo</surname>, <given-names>Z.</given-names></string-name>, <string-name name-style="western"><surname>Li</surname>, <given-names>D.</given-names></string-name>, <string-name name-style="western"><surname>Liu</surname>, <given-names>J.</given-names></string-name>, &amp; <string-name name-style="western"><surname>Wan</surname>, <given-names>J.</given-names></string-name> (<year>2020</year>). <article-title>Comparison of clinical characteristics and outcomes of patients with coronavirus disease 2019 at different ages</article-title>. <source><italic>Aging</italic></source>, <volume>12</volume>(<issue>11</issue>), <fpage>10070</fpage>–<lpage>10086</lpage>. <ext-link ext-link-type="uri" xlink:href="https://doi.org/10.18632/aging.103298">https://doi.org/10.18632/aging.103298</ext-link></mixed-citation></ref>
</ref-list>
	<sec sec-type="data-availability" id="das"><title>Data Availability</title>
		<p>The Python code for examples presented in the study can be found at <xref ref-type="bibr" rid="bib34.5">von Oertzen (2026)</xref>.</p>
	</sec>	

	
	
	
	<sec sec-type="supplementary-material" id="sp1"><title>Supplementary Materials</title>
		<table-wrap position="anchor" content-type="supplementary-materials">
			<table frame="void" style="background-#f3f3f3 nobreak">
				<col width="60%" align="left"/>
				<col width="40%" align="left"/>
				<thead>
					<tr>
						<th>Type of supplementary material</th>
						<th>Availability/Access</th>
					</tr></thead>
				<tbody>
					<tr>
						<th colspan="2">Data</th>						
					</tr>
					<tr>
						<td>No study data available</td>		
						<td>&mdash;</td>
					</tr>
					<tr style="grey-border-top-dashed">
						<th colspan="2">Code</th>
					</tr>
					<tr>
						<td>Python code</td>
						<td><xref ref-type="bibr" rid="bib34.5">von Oertzen (2026)</xref></td>
					</tr>
					<tr style="grey-border-top-dashed">
						<th colspan="2">Material</th>
					</tr>
					<tr>
						<td>No study material available</td>
						<td>&mdash;</td>
					</tr>
					<tr style="grey-border-top-dashed">
						<th colspan="2">Study/Analysis preregistration</th>
					</tr>	
					<tr>
						<td>Study was not preregistered</td>
						<td>&mdash;</td>
					</tr>
					<tr style="grey-border-top-dashed">
						<th colspan="2">Other</th>
					</tr>	
					<tr>
						<td>No other study material available</td>
						<td>&mdash;</td>
					</tr>
				</tbody>
			</table> </table-wrap>
	</sec>
			

<fn-group>
<fn fn-type="financial-disclosure"><p>The authors have no funding to report.</p></fn>
</fn-group>
<fn-group>
<fn fn-type="conflict"><p>The authors have declared that no competing interests exist.</p></fn>
</fn-group>
<ack>
<p>The authors have no additional (i.e., non-financial) support to report.</p>
</ack>
</back>
</article>
