tompollard / tableone

Create "Table 1" for research papers in Python
https://pypi.python.org/pypi/tableone/
MIT License
161 stars 38 forks source link

support user defined tests. ref #92 #96

Closed tompollard closed 4 years ago

tompollard commented 4 years ago

Allow the user to specify a statistical test. e.g.

# imports
from tableone import TableOne
from scipy import stats
import numpy as np
import pandas as pd
# create a sample dataset
np.random.seed(12345678)
n1 = 200
n2 = 300

# Baseline distribution
rvs1 = stats.norm.rvs(size=n1, loc=0., scale=1)

# Different to rvs1
rvs2 = stats.norm.rvs(size=n2, loc=0.5, scale=1.5)

# Combine values into a single DataFrame
df1 = pd.DataFrame({'rvs': 'rvs1', 'val': rvs1})
df2 = pd.DataFrame({'rvs': 'rvs2', 'val': rvs2})
different = df1.append(df2)
# define a custom test that takes a list of numpy array as an argument
# and that returns a test result
def mytest(*args):
    mytest.__name__ = "BOING"
    _, pval= stats.ks_2samp(*args)
    return pval
t1_diff = TableOne(data=different, columns = ["val"], pval=True,
                           groupby="rvs", pval_test={"val": mytest})

print(t1_diff._significance_table['P-Value'].val)
# 4.6674975515806996e-05

print(stats.ks_2samp(rvs1, rvs2)))
# Ks_2sampResult(statistic=0.20833333333333337, pvalue=4.6674975515806996e-05)