Source code for verona.visualization.stattests

import pandas as pd
import plotly.graph_objects as go

from verona.evaluation.stattests.plackettluce import PlackettLuceResults, PlackettLuceRanking


[docs] def plot_posteriors_plackett(plackett_results: PlackettLuceResults, save_path=None): """ Plot the posteriors of the Plackett-Luce model (quantiles 95%, 05% and 50%). If two approaches do not overlap, they have a significative different ranking. Parameters save_path: String that indicates the path where the plot will be saved. If None, the plot will not be saved. Returns Matplotlib Figure : ``Matplotlib Figure of the aforementioned plot Examples: >>> result_matrix = pd.DataFrame([[0.75, 0.6, 0.8], [0.8, 0.7, 0.9], [0.9, 0.8, 0.7]]) >>> plackett_ranking = PlackettLuceRanking(result_matrix, ["a1", "a2", "a3"]) >>> results = plackett_ranking.run(n_chains=10, num_samples=300000, mode="max") >>> plot = plot_posteriors_plackett(results, save_path=None) >>> print(plot) """ if plackett_results is None or plackett_results.posterior is None: raise ValueError("You must run the model first") posterior = plackett_results.posterior y95 = posterior.quantile(q=0.95, axis=0) y05 = posterior.quantile(q=0.05, axis=0) y50 = posterior.quantile(q=0.5, axis=0) df_boxplot = pd.concat([y05, y50, y95], axis=1) df_boxplot.columns = ["y05", "y50", "y95"] df_boxplot["Approaches"] = posterior.columns y50 = df_boxplot["y50"] yerr_lower = df_boxplot["y50"] - df_boxplot["y05"] yerr_upper = df_boxplot["y95"] - df_boxplot["y50"] fig = go.Figure() fig.add_trace(go.Scatter( x=df_boxplot["Approaches"], y=y50, error_y=dict( type='data', symmetric=False, array=yerr_upper, arrayminus=yerr_lower ), mode='markers' )) fig.update_layout( xaxis_title="", yaxis_title="Probability", xaxis=dict(tickmode='array', tickvals=list(range(len(df_boxplot["Approaches"]))), ticktext=df_boxplot["Approaches"]) ) if save_path is not None: fig.write_image(save_path) return fig