Anova de una vía con el tamaño de efecto :)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import numpy as np
import scipy.special as special
def FPvalue( *args):
""" Return F an p value
"""
df_btwn, df_within = __degree_of_freedom_( *args)
mss_btwn = __ss_between_( *args) / float( df_btwn)
mss_within = __ss_within_( *args) / float( df_within)
F = mss_btwn / mss_within
P = special.fdtrc( df_btwn, df_within, F)
return( F, P)
def EffectSize( *args):
""" Return the eta squared as the effect size for ANOVA
"""
return( float( __ss_between_( *args) / __ss_total_( *args)))
def __concentrate_( *args):
""" Concentrate input list-like arrays
"""
v = list( map( np.asarray, args))
vec = np.hstack( np.concatenate( v))
return( vec)
def __ss_total_( *args):
""" Return total of sum of square
"""
vec = __concentrate_( *args)
ss_total = sum( (vec - np.mean( vec)) **2)
return( ss_total)
def __ss_between_( *args):
""" Return between-subject sum of squares
"""
# grand mean
grand_mean = np.mean( __concentrate_( *args))
ss_btwn = 0
for a in args:
ss_btwn += ( len(a) * ( np.mean( a) - grand_mean) **2)
return( ss_btwn)
def __ss_within_( *args):
"""Return within-subject sum of squares
"""
return( __ss_total_( *args) - __ss_between_( *args))
def __degree_of_freedom_( *args):
"""Return degree of freedom
Output-
Between-subject dof, within-subject dof
"""
args = list( map( np.asarray, args))
# number of groups minus 1
df_btwn = len( args) - 1
# total number of samples minus number of groups
df_within = len( __concentrate_( *args)) - df_btwn - 1
return( df_btwn, df_within)
if __name__ = "__main__":
print( 'Sorry, you can not use it in this way.')