benmiroglio / pymatch

MIT License
274 stars 128 forks source link

`chi2_distance` function fails when length of bins variable is equal to zero. #14

Open tammymendt opened 5 years ago

tammymendt commented 5 years ago
def chi2_distance(t, c):
    tb, cb, bins = which_bin_hist(t, c)
    tb, cb = bin_hist(tb, cb, bins)
    return _chi2_distance(tb,cb)

Instead of failing, I would suggest ending gracefully but lifting a warning.

noahaskell commented 5 years ago

I came to create a new issue, but I think it's this same issue. Is this (like) the error you get?

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-41-7a5faa30bec8> in <module>
----> 1 cc = m.compare_continuous(return_table=True)

/apps/python3/lib/python3.6/site-packages/pymatch/Matcher.py in compare_continuous(self, save, return_table)
    303                 std_diff_med_before, std_diff_mean_before = uf.std_diff(trb, cob)
    304                 std_diff_med_after, std_diff_mean_after = uf.std_diff(tra, coa)
--> 305                 pb, truthb = uf.grouped_permutation_test(uf.chi2_distance, trb, cob)
    306                 pa, trutha = uf.grouped_permutation_test(uf.chi2_distance, tra, coa)
    307                 ksb = round(uf.ks_boot(trb, cob, nboots=1000), 6)

/apps/python3/lib/python3.6/site-packages/pymatch/functions.py in grouped_permutation_test(f, t, c, n_samples)
     76 
     77 def grouped_permutation_test(f, t, c, n_samples=1000):
---> 78     truth = f(t, c)
     79     comb = np.concatenate((t, c))
     80     times_geq=0

/apps/python3/lib/python3.6/site-packages/pymatch/functions.py in chi2_distance(t, c)
     51 def chi2_distance(t, c):
     52     tb, cb, bins = which_bin_hist(t, c)
---> 53     tb, cb = bin_hist(tb, cb, bins)
     54     return _chi2_distance(tb,cb)
     55 

/apps/python3/lib/python3.6/site-packages/pymatch/functions.py in bin_hist(t, c, bins)
     72         return result
     73 
---> 74     return idx_to_value(tc, bins), idx_to_value(cc, bins)
     75 
     76 

/apps/python3/lib/python3.6/site-packages/pymatch/functions.py in idx_to_value(d, bins)
     69         result = {}
     70         for k, v, in d.items():
---> 71             result[int(bins[k-1])] = v
     72         return result
     73 

IndexError: index -1 is out of bounds for axis 0 with size 0
tammymendt commented 5 years ago

Yes, it looks like the same issue.

On Tue, Jun 4, 2019, 7:52 PM Noah Silbert notifications@github.com wrote:

I came to create a new issue, but I think it's this same issue. Is this (like) the error you get?


IndexError Traceback (most recent call last)

in ----> 1 cc = m.compare_continuous(return_table=True) /apps/python3/lib/python3.6/site-packages/pymatch/Matcher.py in compare_continuous(self, save, return_table) 303 std_diff_med_before, std_diff_mean_before = uf.std_diff(trb, cob) 304 std_diff_med_after, std_diff_mean_after = uf.std_diff(tra, coa) --> 305 pb, truthb = uf.grouped_permutation_test(uf.chi2_distance, trb, cob) 306 pa, trutha = uf.grouped_permutation_test(uf.chi2_distance, tra, coa) 307 ksb = round(uf.ks_boot(trb, cob, nboots=1000), 6) /apps/python3/lib/python3.6/site-packages/pymatch/functions.py in grouped_permutation_test(f, t, c, n_samples) 76 77 def grouped_permutation_test(f, t, c, n_samples=1000): ---> 78 truth = f(t, c) 79 comb = np.concatenate((t, c)) 80 times_geq=0 /apps/python3/lib/python3.6/site-packages/pymatch/functions.py in chi2_distance(t, c) 51 def chi2_distance(t, c): 52 tb, cb, bins = which_bin_hist(t, c) ---> 53 tb, cb = bin_hist(tb, cb, bins) 54 return _chi2_distance(tb,cb) 55 /apps/python3/lib/python3.6/site-packages/pymatch/functions.py in bin_hist(t, c, bins) 72 return result 73 ---> 74 return idx_to_value(tc, bins), idx_to_value(cc, bins) 75 76 /apps/python3/lib/python3.6/site-packages/pymatch/functions.py in idx_to_value(d, bins) 69 result = {} 70 for k, v, in d.items(): ---> 71 result[int(bins[k-1])] = v 72 return result 73 IndexError: index -1 is out of bounds for axis 0 with size 0 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub , or mute the thread .