trevismd / statannotations

add statistical significance annotations on seaborn plots. Further development of statannot, with bugfixes, new features, and a different API.
Other
619 stars 67 forks source link

Only displaying tests that are significant #110

Closed JasonMendoza2008 closed 9 months ago

JasonMendoza2008 commented 1 year ago

The tests that are displayed are defined by what's fed into the argument pairs of Annotator but we don't know prior to running apply_and_annotate what tests are significant. I don't think there's an easy way to eliminate from the list fed to pairs the pairs that are not significant.

biagio-lunit commented 1 year ago

I was going to ask for a similar feature. I would like to filter p-values before we know the answer. In my case, I want to show only NS, which I cannot know prior to run the code and it is hard work to select pairs one-by-one afterwards. I would like to automate this process.

JasonMendoza2008 commented 1 year ago

It would be welcome to have both features indeed, with an optional parameter which, by default, would not filter anything. I don't have enough knowledge of the package to dive into the code unfortunately.

pdec commented 1 year ago

+1

This might be a workaround to annotate only the significant p-values BUT it affects the p-values in multiple test corrections.

# create annotator
annotator = Annotator(axs, pairs, data=df, x=x, y=y, order=order)
# configure
annotator.configure(test=test, comparisons_correction=corr, text_format='star', loc='inside')
# apply ONLY tests
annotator.apply_test()
# pick the pairs producing significant p-value
sig_pairs = [annotator.pairs[i] for i, x in enumerate(annotator.get_annotations_text()) if x != "ns"]
# decide what to do
if len(sig_pairs) == len(pairs): # all pairs gave significant p-values -> annotate
    annotator.annotate()
elif len(sig_pairs) == 0: # there are no significant pairs so don't add anything to the plot
    pass
else:  # some pairs were not significant -> use only those
    annotator = Annotator(axs, sig_pairs, data=df, x=x, y=y, order=order)
    annotator.configure(test=test, comparisons_correction=corr, text_format='star', loc='inside')
    annotator.apply_and_annotate()
trevismd commented 1 year ago

For hiding non significant results, we merged #95 into our dev branch, so you can check it out. Just pass hide_non_significant=True when creating the Annotator.

JasonMendoza2008 commented 11 months ago

Shouldn't this issue be closed? It has been working for a while on the dev branch. PR https://github.com/trevismd/statannotations/pull/127 corrects a bugfix related to this issue but otherwise it seems fine.

EDIT: I'll let @trevismd close it if deemed adequate.

trevismd commented 9 months ago

Merged today and released in v0.6.0!