{"example":"Waterfall Plot: Tumour Response","labtools_version":"0.14.3","generated":"2026-09-23","calls":[{"label":"stats.describe","method":"stats.describe","params":{},"result":{"columns":[{"excess_kurtosis":-0.6198644555505592,"iqr":31.950000000000003,"max":20.3,"mean":-23.540000000000003,"median":-26.0,"min":-76.0,"n":30,"n_missing":0,"name":"Best change (%)","q1":-42.7,"q3":-10.75,"range":96.3,"sd":26.138867875122354,"sem":4.772282520950547,"skewness":-0.028740357781580593,"sum":-706.2,"variance":683.2404137931035}],"n_columns":1,"notes":[],"source":{"kind":"arrays"}},"error":null},{"label":"stats.normality","method":"stats.normality","params":{"method":"shapiro_wilk"},"result":{"all_normal":true,"alpha":0.05,"method":"shapiro_wilk","notes":[],"results":[{"excess_kurtosis":-0.6198644555505592,"group":"Best change (%)","interpretation":"Data is consistent with normality (W = 0.9669, p = 0.4574)","n":30,"normality_rejected":false,"p_value":0.45741121852761163,"skewness":-0.028740357781580593,"statistic":0.9668682427754974,"test":"Shapiro-Wilk"}],"source":{"kind":"arrays"}},"error":null},{"label":"stats.normality","method":"stats.normality","params":{"method":"anderson_darling"},"result":{"all_normal":true,"alpha":0.05,"method":"anderson_darling","notes":[],"results":[{"excess_kurtosis":-0.6198644555505592,"group":"Best change (%)","interpretation":"Data is consistent with normality (A² = 0.3206, p = 0.5155)","n":30,"normality_rejected":false,"p_value":0.5154888487012332,"skewness":-0.028740357781580593,"statistic":0.3205595685246543,"test":"Anderson-Darling"}],"source":{"kind":"arrays"}},"error":null},{"label":"stats.normality","method":"stats.normality","params":{"method":"kolmogorov_smirnov"},"result":{"all_normal":true,"alpha":0.05,"method":"kolmogorov_smirnov","notes":[],"results":[{"excess_kurtosis":-0.6198644555505592,"group":"Best change (%)","interpretation":"Data is consistent with normality (D = 0.1062, p = 0.5244)","n":30,"normality_rejected":false,"p_value":0.5243896506286116,"skewness":-0.028740357781580593,"statistic":0.10624139236141306,"test":"Kolmogorov-Smirnov (Lilliefors)"}],"source":{"kind":"arrays"}},"error":null},{"label":"stats.outliers","method":"stats.outliers","params":{"method":"grubbs"},"result":{"alpha":0.05,"method":"grubbs","notes":[],"results":[{"critical_value":2.9084730597410564,"group":"Best change (%)","interpretation":"No outliers detected (G = 2.007, critical = 2.908)","n":30,"outlier_count":0,"outliers":[],"test":"Grubbs"}],"source":{"kind":"arrays"},"total_outliers":0},"error":null},{"label":"stats.outliers","method":"stats.outliers","params":{"method":"generalized_esd","max_outliers":5},"result":{"alpha":0.05,"method":"generalized_esd","notes":[],"results":[{"critical_value":2.9084730597410564,"group":"Best change (%)","interpretation":"No outliers detected (tested up to 5 outliers)","n":30,"outlier_count":0,"outliers":[],"test":"Generalized ESD"}],"source":{"kind":"arrays"},"total_outliers":0},"error":null},{"label":"stats.outliers","method":"stats.outliers","params":{"method":"dixon_q"},"result":{"alpha":0.05,"method":"dixon_q","notes":[],"results":[{"critical_value":0.625,"group":"Best change (%)","interpretation":"No outliers detected (Q_low = 0.055, Q_high = 0.012, critical = 0.625)","n":30,"outlier_count":0,"outliers":[],"test":"Dixon Q"}],"source":{"kind":"arrays"},"total_outliers":0},"error":null},{"label":"stats.outliers","method":"stats.outliers","params":{"method":"modified_z"},"result":{"alpha":0.05,"method":"modified_z","notes":[],"results":[{"critical_value":3.5,"group":"Best change (%)","interpretation":"No outliers detected (threshold = 3.50)","n":30,"outlier_count":0,"outliers":[],"test":"Modified Z-Score"}],"source":{"kind":"arrays"},"total_outliers":0},"error":null},{"label":"stats.outliers","method":"stats.outliers","params":{"method":"iqr"},"result":{"alpha":0.05,"method":"iqr","notes":["The IQR rule is descriptive — it has no p-value and flags roughly 0.7% of a perfectly normal sample by construction."],"results":[{"critical_value":1.5,"group":"Best change (%)","interpretation":"No outliers detected (bounds: [-90.625, 37.175], k = 1.5)","n":30,"outlier_count":0,"outliers":[],"test":"IQR Method"}],"source":{"kind":"arrays"},"total_outliers":0},"error":null},{"label":"stats.ttest","method":"stats.ttest","params":{"test":"one_sample","mu":0},"result":{"alpha":0.05,"alternative":"two_sided","assumptions":{"alpha":0.05,"homogeneity_of_variance":null,"independence":"Assumed, not tested — observations must come from independent sampling units. Repeated measures on the same unit require a paired or mixed-model analysis instead.","normality":[{"group":"data","normality_rejected":false,"p_value":0.45741121852761163,"statistic":0.9668682427754974,"test":"Shapiro-Wilk"}]},"ci_of_difference":{"conf_level":0.95,"lower":-33.30041367248083,"method":"t","upper":-13.779586327519178},"df":29.0,"effect_size":{"cohens_d":-0.9005745815947973,"estimate":-0.9005745815947973,"interpretation":"Mean minus mu, in sample standard deviations.","magnitude":"large","name":"cohens_d"},"groups":[{"excess_kurtosis":-0.6198644555505592,"iqr":31.950000000000003,"max":20.3,"mean":-23.540000000000003,"median":-26.0,"min":-76.0,"n":30,"n_missing":0,"name":"data","q1":-42.7,"q3":-10.75,"range":96.3,"sd":26.138867875122354,"sem":4.772282520950547,"skewness":-0.028740357781580593,"sum":-706.2,"variance":683.2404137931035}],"mean_difference":-23.540000000000003,"notes":[],"p_two_sided":3.0588354427055676e-05,"p_value":3.0588354427055676e-05,"significant":true,"source":{"kind":"arrays"},"statistic":-4.9326501305524735,"test":"one_sample"},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"conf_level":0.95},"result":{"conf_level":0.95,"estimate":-23.540000000000003,"interpretation":"Over repeated sampling, intervals built this way contain the true mean at the stated rate. It is not the probability that this particular interval contains it.","kind":"mean","lower":-33.30041367248083,"margin_of_error":9.760413672480826,"method":"t","n":30,"name":"data","notes":[],"sd":26.138867875122354,"source":{"kind":"arrays_or_dataset"},"upper":-13.779586327519176},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"conf_level":0.99},"result":{"conf_level":0.99,"estimate":-23.540000000000003,"interpretation":"Over repeated sampling, intervals built this way contain the true mean at the stated rate. It is not the probability that this particular interval contains it.","kind":"mean","lower":-36.69425226908256,"margin_of_error":13.154252269082559,"method":"t","n":30,"name":"data","notes":[],"sd":26.138867875122354,"source":{"kind":"arrays_or_dataset"},"upper":-10.385747730917444},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":14,"n":30,"method":"wilson"},"result":{"conf_level":0.95,"estimate":0.4666666666666667,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.30232388896218615,"margin_of_error":0.16812655748235464,"method":"wilson","n":30,"notes":[],"source":{"kind":"counts"},"successes":14,"upper":0.6385770039268954},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":14,"n":30,"method":"wald"},"result":{"conf_level":0.95,"estimate":0.4666666666666667,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.28814529361042174,"margin_of_error":0.17852137305624494,"method":"wald","n":30,"notes":["The Wald interval's true coverage is well below nominal for small n or for proportions near 0 or 1. Use method='wilson' unless a specific protocol demands Wald."],"source":{"kind":"counts"},"successes":14,"upper":0.6451880397229116},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":1,"n":30,"method":"wilson"},"result":{"conf_level":0.95,"estimate":0.03333333333333333,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.005908590374926512,"margin_of_error":0.08039765984864439,"method":"wilson","n":30,"notes":["Fewer than 5 successes or 5 failures — any normal-approximation interval is shaky here. Wilson degrades most gracefully; an exact (Clopper–Pearson) interval would be better still."],"source":{"kind":"counts"},"successes":1,"upper":0.1667039100722153},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":1,"n":30,"method":"wald"},"result":{"conf_level":0.95,"estimate":0.03333333333333333,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.0,"margin_of_error":0.04878368447881566,"method":"wald","n":30,"notes":["The Wald interval's true coverage is well below nominal for small n or for proportions near 0 or 1. Use method='wilson' unless a specific protocol demands Wald.","Fewer than 5 successes or 5 failures — any normal-approximation interval is shaky here. Wilson degrades most gracefully; an exact (Clopper–Pearson) interval would be better still."],"source":{"kind":"counts"},"successes":1,"upper":0.09756736895763132},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":29,"n":30,"method":"wilson"},"result":{"conf_level":0.95,"estimate":0.9666666666666667,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.8332960899277848,"margin_of_error":0.08039765984864433,"method":"wilson","n":30,"notes":["Fewer than 5 successes or 5 failures — any normal-approximation interval is shaky here. Wilson degrades most gracefully; an exact (Clopper–Pearson) interval would be better still."],"source":{"kind":"counts"},"successes":29,"upper":0.9940914096250735},"error":null},{"label":"stats.ci","method":"stats.ci","params":{"kind":"proportion","successes":29,"n":30,"method":"wald"},"result":{"conf_level":0.95,"estimate":0.9666666666666667,"interpretation":"Over repeated sampling, intervals built this way contain the true proportion at the stated rate. It is not the probability that this particular interval contains it.","kind":"proportion","lower":0.9024326310423687,"margin_of_error":0.04878368447881565,"method":"wald","n":30,"notes":["The Wald interval's true coverage is well below nominal for small n or for proportions near 0 or 1. Use method='wilson' unless a specific protocol demands Wald.","Fewer than 5 successes or 5 failures — any normal-approximation interval is shaky here. Wilson degrades most gracefully; an exact (Clopper–Pearson) interval would be better still."],"source":{"kind":"counts"},"successes":29,"upper":1.0},"error":null}]}