From 526a55b6f4f572559a87df293ad6261191cbadab Mon Sep 17 00:00:00 2001 From: Mario Graff <11542693+mgraffg@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:39:52 +0000 Subject: [PATCH 1/3] Diff (3) --- CompStats/__init__.py | 2 +- CompStats/interface.py | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/CompStats/__init__.py b/CompStats/__init__.py index 2e65c6d..668920e 100644 --- a/CompStats/__init__.py +++ b/CompStats/__init__.py @@ -11,7 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -__version__ = '0.1.7' +__version__ = '0.1.8' from CompStats.bootstrap import StatisticSamples from CompStats.measurements import CI, SE, difference_p_value from CompStats.performance import performance, difference, all_differences, plot_performance, plot_difference diff --git a/CompStats/interface.py b/CompStats/interface.py index 6e0b8b4..4ef310c 100644 --- a/CompStats/interface.py +++ b/CompStats/interface.py @@ -604,19 +604,40 @@ def p_value(self, right:bool=True): def dataframe(self, value_name:str='Score', var_name:str='Best', alg_legend:str='Algorithm', - perf_names:str=None): + sig_legend:str='Significant', + perf_names:str=None, + CI:float=0.05): """Dataframe""" if perf_names is None and isinstance(self.best, np.ndarray): perf_names = [f'{alg}({k})' for k, alg in enumerate(self.best)] - return dataframe(self, value_name=value_name, - var_name=var_name, - alg_legend=alg_legend, - perf_names=perf_names) + df = dataframe(self, value_name=value_name, + var_name=var_name, + alg_legend=alg_legend, + perf_names=perf_names) + df[sig_legend] = False + if isinstance(self.best, str): + for name, p in self.p_value().items(): + if p >= CI: + continue + df.loc[df[alg_legend] == name, sig_legend] = True + else: + p_values = self.p_value() + systems = list(p_values.keys()) + p_values = np.array([p_values[k] for k in systems]) + for name, p_value in zip(perf_names, p_values.T): + mask = df[var_name] == name + for alg, p in zip(systems, p_value): + if p >= CI: + continue + _ = mask & (df[alg_legend] == alg) + df.loc[_, sig_legend] = True + return df def plot(self, value_name:str='Difference', var_name:str='Best', alg_legend:str='Algorithm', + sig_legend:str='Significant', perf_names:list=None, CI:float=0.05, kind:str='point', linestyle:str='none', @@ -644,7 +665,10 @@ def plot(self, value_name:str='Difference', import seaborn as sns df = self.dataframe(value_name=value_name, var_name=var_name, - alg_legend=alg_legend, perf_names=perf_names) + alg_legend=alg_legend, + sig_legend=sig_legend, + perf_names=perf_names, + CI=CI) title = var_name if var_name not in df.columns: var_name = None @@ -653,7 +677,9 @@ def plot(self, value_name:str='Difference', f_grid = sns.catplot(df, x=value_name, errorbar=ci, y=alg_legend, col=var_name, kind=kind, linestyle=linestyle, - col_wrap=col_wrap, capsize=capsize, **kwargs) + col_wrap=col_wrap, capsize=capsize, + hue=sig_legend, + **kwargs) if set_refline: f_grid.refline(x=0) if isinstance(self.best, str): From e89f0d7cf5f8dbd26679e572768c5d184dd70de6 Mon Sep 17 00:00:00 2001 From: Mario Graff <11542693+mgraffg@users.noreply.github.com> Date: Sun, 23 Feb 2025 17:00:35 +0000 Subject: [PATCH 2/3] Diff (4) - Bug Significant --- CompStats/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CompStats/interface.py b/CompStats/interface.py index 4ef310c..f9864b0 100644 --- a/CompStats/interface.py +++ b/CompStats/interface.py @@ -618,7 +618,7 @@ def dataframe(self, value_name:str='Score', df[sig_legend] = False if isinstance(self.best, str): for name, p in self.p_value().items(): - if p >= CI: + if p < CI: continue df.loc[df[alg_legend] == name, sig_legend] = True else: From d935820f10f61a32c0f96b3b8c6cf743db20f310 Mon Sep 17 00:00:00 2001 From: Mario Graff <11542693+mgraffg@users.noreply.github.com> Date: Sun, 23 Feb 2025 20:38:39 +0000 Subject: [PATCH 3/3] Diff (5) --- CompStats/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CompStats/interface.py b/CompStats/interface.py index f9864b0..4ef310c 100644 --- a/CompStats/interface.py +++ b/CompStats/interface.py @@ -618,7 +618,7 @@ def dataframe(self, value_name:str='Score', df[sig_legend] = False if isinstance(self.best, str): for name, p in self.p_value().items(): - if p < CI: + if p >= CI: continue df.loc[df[alg_legend] == name, sig_legend] = True else: