def correlation_p_anovar2(data_group, data_y): # Compute observed F-test statistic. F, n_groups = anovar2(data_group, data_y) if math.isnan(F): return float('NaN') n = len(data_group) assert n == len(data_y) # Compute p-value for F-test. return stats.f_sf(F, n_groups - 1, n - n_groups)
def test_f_sf(): # Non-positive degrees of freedom should throw an error. with pytest.raises(ValueError): stats.f_sf(0,0,0) with pytest.raises(ValueError): stats.f_sf(2,-10,0) with pytest.raises(ValueError): stats.f_sf(2,0,-10) with pytest.raises(ValueError): stats.f_sf(2,-1,1) with pytest.raises(ValueError): stats.f_sf(2,1,-1) # Survival of x = 0 should be 1. assert relerr(1, stats.f_sf(0,1,12)) < .05 assert relerr(1, stats.f_sf(0,6,0.5)) < .05 assert relerr(1, stats.f_sf(0,130,121)) < .05 # Survival of x < 0 should be 1. assert relerr(1, stats.f_sf(-1,1,12)) < .05 assert relerr(1, stats.f_sf(-100,6,0.5)) < .05 assert relerr(1, stats.f_sf(-0.02,130,121)) < .05 # Test against reference values. assert relerr(.5173903, stats.f_sf(1,12,8)) < .05 assert relerr(.2618860, stats.f_sf(1.9,1,3)) < .05 assert relerr(.5000000, stats.f_sf(1,100,100)) < .05 assert relerr(.1781364, stats.f_sf(19,14,1)) < .05 assert relerr(.7306588, stats.f_sf(0.76,23,15)) < .05 assert relerr(.0602978, stats.f_sf(4.3,1,12)) < .05 assert relerr(.5590169, stats.f_sf(1.1,2,1)) < .05 assert relerr(.1111111, stats.f_sf(8,2,2)) < .05 assert relerr(.9999999, stats.f_sf(0.2,432,123)) < .05 assert relerr(.9452528, stats.f_sf(0.8,432,123)) < .05 assert relerr(.0434186, stats.f_sf(10,5,3)) < .05 # Test against reference very close to zero. assert abserr(.0158130, stats.f_sf(11,19,4)) < .01 assert abserr(.0022310, stats.f_sf(14,9,6)) < .01 assert abserr(.1458691e-112, stats.f_sf(200,432,123)) < .01 assert abserr(.2489256e-13, stats.f_sf(29,23,29)) < .01 assert abserr(.1656276e-06, stats.f_sf(31,11,13)) < .01 assert abserr(.6424023e-5, stats.f_sf(18,14,12)) < .01