def __str__(self): if self == {}: return '(no data in object)' tt_s = TextTable(max_width=0) tt_s.set_cols_dtype(['t', 'a', 'a', 'a', 'a']) tt_s.set_cols_align(['l', 'r', 'r', 'r', 'r']) tt_s.set_deco(TextTable.HEADER) tt_s.header(['Groups', 'Count', 'Sum', 'Average', 'Variance']) for g, c, a, v in zip(self.conditions_list, self['ns'], self['mus'], self['vars']): tt_s.add_row([g, c, c * a, a, v]) tt_o = TextTable(max_width=0) tt_o.set_cols_dtype(['t', 'a', 'a', 'a', 'a', 'a', 'a', 'a']) tt_o.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'r']) tt_o.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_o.header([ 'Source of Variation', 'SS', 'df', 'MS', 'F', 'P-value', 'eta^2', 'Obs. power' ]) tt_o.add_row([ 'Treatments', self['o_ssbn'], self['o_dfbn'], self['o_msbn'], self['o_f'], self['o_p'], self['o_eta2'], self['o_power'] ]) tt_o.add_row([ 'Error', self['o_sswn'], self['o_dfwn'], self['o_mswn'], ' ', ' ', ' ', ' ' ]) tt_o.footer([ 'Total', self['o_ssbn'] + self['o_sswn'], self['o_dfbn'] + self['o_dfwn'], ' ', ' ', ' ', ' ', ' ' ]) tt_a = TextTable(max_width=0) tt_a.set_cols_dtype(['t', 'a', 'a', 'a', 'a', 'a', 'a', 'a']) tt_a.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'r']) tt_a.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_a.header([ 'Source of Variation', 'SS', 'df', 'MS', 'F', 'P-value', 'eta^2', 'Obs. power' ]) tt_a.add_row([ 'Treatments', self['ssbn'], self['dfbn'], self['msbn'], self['f'], self['p'], self['eta2'], self['power'] ]) tt_a.add_row([ 'Error', self['sswn'], self['dfwn'], self['mswn'], ' ', ' ', ' ', ' ' ]) tt_a.footer([ 'Total', self['ssbn'] + self['sswn'], self['dfbn'] + self['dfwn'], ' ', ' ', ' ', ' ', ' ' ]) posthoc = '' if self.posthoc.lower() == 'tukey' and self.multtest != None: tt_m = TextTable(max_width=0) tt_m.set_cols_dtype(['t'] + ['a'] * len(self.conditions_list)) tt_m.set_cols_align(['l'] + ['l'] * len(self.conditions_list)) tt_m.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_m.header([''] + sorted(self.conditions_list)) for a in sorted(self.conditions_list): rline = [a] for b in sorted(self.conditions_list): if a == b: rline.append('0') elif (a, b) in self.multtest: q = self.multtest[(a, b)]['q'] sig = self.multtest[(a, b)]['sig'] rline.append('%s %s' % (_str(q), sig)) else: rline.append(' ') tt_m.add_row(rline) tt_m.footer([''] * (len(self.conditions_list) + 1)) q_crit10 = self.multtest[(a, b)]['q_crit10'] q_crit05 = self.multtest[(a, b)]['q_crit05'] q_crit01 = self.multtest[(a, b)]['q_crit01'] k = self.multtest[(a, b)]['q_k'] df = self.multtest[(a, b)]['q_df'] posthoc = 'POSTHOC MULTIPLE COMPARISONS\n\n' posthoc += 'Tukey HSD: Table of q-statistics\n' posthoc += tt_m.draw() posthoc += '\n + p < .10 (q-critical[%i, %i] = %s)' % (k, df, q_crit10) posthoc += '\n * p < .05 (q-critical[%i, %i] = %s)' % (k, df, q_crit05) posthoc += '\n ** p < .01 (q-critical[%i, %i] = %s)' % (k, df, q_crit01) if self.posthoc.lower() == 'snk' and self.multtest != None: tt_m = TextTable(max_width=0) tt_m.set_cols_dtype(['t', 'i', 'f', 'a', 'a', 'a', 'a', 't']) tt_m.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'l']) tt_m.set_deco(TextTable.HEADER) tt_m.header( ['Pair', 'i', '|diff|', 'q', 'range', 'df', 'p', 'Sig.']) for row in self.multtest: x, y = row[0] tt_m.add_row(['%s vs. %s' % (x, y)] + [(v, '-')[np.isnan(v)] for v in row[1:-1]] + [row[-1]]) posthoc = 'POSTHOC MULTIPLE COMPARISONS\n\n' posthoc += 'SNK: Step-down table of q-statistics\n' posthoc += tt_m.draw() posthoc += '\n + p < .10, * p < .05, ** p < .01, *** p < .001' return 'Anova: Single Factor on %s\n\n'%self.val + \ 'SUMMARY\n%s\n\n'%tt_s.draw() + \ "O'BRIEN TEST FOR HOMOGENEITY OF VARIANCE\n%s\n\n"%tt_o.draw() + \ 'ANOVA\n%s\n\n'%tt_a.draw() + \ posthoc
def __str__(self): if self == {}: return '(no data in object)' tt_s = TextTable(max_width=0) tt_s.set_cols_dtype(['t', 'a', 'a', 'a', 'a']) tt_s.set_cols_align(['l', 'r', 'r', 'r', 'r']) tt_s.set_deco(TextTable.HEADER) tt_s.header( ['Groups','Count','Sum', 'Average','Variance']) for g, c, a, v in zip(self.conditions_list, self['ns'], self['mus'], self['vars']): tt_s.add_row([g, c, c * a, a, v]) tt_o = TextTable(max_width=0) tt_o.set_cols_dtype(['t', 'a', 'a', 'a', 'a', 'a', 'a', 'a']) tt_o.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'r']) tt_o.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_o.header( ['Source of Variation','SS','df','MS','F','P-value','eta^2','Obs. power']) tt_o.add_row(['Treatments',self['o_ssbn'],self['o_dfbn'], self['o_msbn'],self['o_f'],self['o_p'], self['o_eta2'],self['o_power']]) tt_o.add_row(['Error', self['o_sswn'],self['o_dfwn'], self['o_mswn'],' ', ' ',' ', ' ']) tt_o.footer( ['Total',self['o_ssbn']+self['o_sswn'], self['o_dfbn']+self['o_dfwn'],' ',' ',' ',' ', ' ']) tt_a = TextTable(max_width=0) tt_a.set_cols_dtype(['t', 'a', 'a', 'a', 'a', 'a', 'a', 'a']) tt_a.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'r']) tt_a.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_a.header( ['Source of Variation','SS','df','MS','F','P-value','eta^2','Obs. power']) tt_a.add_row(['Treatments',self['ssbn'],self['dfbn'], self['msbn'],self['f'],self['p'], self['eta2'],self['power']]) tt_a.add_row(['Error', self['sswn'],self['dfwn'], self['mswn'],' ', ' ',' ', ' ']) tt_a.footer( ['Total',self['ssbn']+self['sswn'], self['dfbn']+self['dfwn'],' ',' ',' ',' ', ' ']) posthoc = '' if self.posthoc.lower() == 'tukey' and self.multtest != None: tt_m = TextTable(max_width=0) tt_m.set_cols_dtype(['t'] + ['a']*len(self.conditions_list)) tt_m.set_cols_align(['l'] + ['l']*len(self.conditions_list)) tt_m.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_m.header([''] + sorted(self.conditions_list)) for a in sorted(self.conditions_list): rline = [a] for b in sorted(self.conditions_list): if a == b: rline.append('0') elif self.multtest.has_key((a,b)): q = self.multtest[(a,b)]['q'] sig = self.multtest[(a,b)]['sig'] rline.append('%s %s'%(_str(q), sig)) else: rline.append(' ') tt_m.add_row(rline) tt_m.footer(['']*(len(self.conditions_list) + 1)) q_crit10 = self.multtest[(a,b)]['q_crit10'] q_crit05 = self.multtest[(a,b)]['q_crit05'] q_crit01 = self.multtest[(a,b)]['q_crit01'] k = self.multtest[(a,b)]['q_k'] df = self.multtest[(a,b)]['q_df'] posthoc = 'POSTHOC MULTIPLE COMPARISONS\n\n' posthoc += 'Tukey HSD: Table of q-statistics\n' posthoc += tt_m.draw() posthoc += '\n + p < .10 (q-critical[%i, %i] = %s)'%(k, df, q_crit10) posthoc += '\n * p < .05 (q-critical[%i, %i] = %s)'%(k, df, q_crit05) posthoc += '\n ** p < .01 (q-critical[%i, %i] = %s)'%(k, df, q_crit01) if self.posthoc.lower() == 'snk' and self.multtest != None: tt_m = TextTable(max_width=0) tt_m.set_cols_dtype(['t', 'i', 'f', 'a', 'a', 'a', 'a', 't']) tt_m.set_cols_align(['l', 'r', 'r', 'r', 'r', 'r', 'r', 'l']) tt_m.set_deco(TextTable.HEADER) tt_m.header(['Pair', 'i', '|diff|', 'q', 'range', 'df', 'p', 'Sig.']) for row in self.multtest: x, y = row[0] tt_m.add_row(['%s vs. %s'%(x, y)] + [(v,'-')[np.isnan(v)] for v in row[1:-1]] + [row[-1]]) posthoc = 'POSTHOC MULTIPLE COMPARISONS\n\n' posthoc += 'SNK: Step-down table of q-statistics\n' posthoc += tt_m.draw() posthoc += '\n + p < .10, * p < .05, ** p < .01, *** p < .001' return 'Anova: Single Factor on %s\n\n'%self.val + \ 'SUMMARY\n%s\n\n'%tt_s.draw() + \ "O'BRIEN TEST FOR HOMOGENEITY OF VARIANCE\n%s\n\n"%tt_o.draw() + \ 'ANOVA\n%s\n\n'%tt_a.draw() + \ posthoc
def __str__(self): """Returns human readable string representation of ChiSquare2way""" if self == {}: return '(no data in object)' # SUMMARY tt_s = TextTable(max_width=0) tt_s.set_cols_dtype(['t'] + ['a'] * (self.N_c + 1)) tt_s.set_cols_align(['l'] + ['r'] * (self.N_c + 1)) tt_s.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_s.header([' '] + sorted(self.col_counter) + ['Total']) for r, rv in sorted(self.row_counter.items()): line = [r] for c, cv in sorted(self.col_counter.items()): o = self.counter[(r, c)] e = (rv * cv) / self['N'] line.append('%s\n(%s)' % (_str(o), _str(e))) line.append(rv) tt_s.add_row(line) tt_s.footer(['Total'] + [v for c, v in sorted(self.col_counter.items())] + [self['N']]) # SYMMETRIC TESTS tt_sym = TextTable(max_width=0) tt_sym.set_cols_dtype(['t', 'a', 'a']) tt_sym.set_cols_align(['l', 'r', 'r']) tt_sym.set_deco(TextTable.HEADER) tt_sym.header(['', 'Value', 'Approx.\nSig.']) tt_sym.add_row(["Cramer's V", self['CramerV'], self['CramerV_prob']]) tt_sym.add_row(["Contingency Coefficient", self['C'], self['C_prob']]) tt_sym.add_row(["N of Valid Cases", self['N'], '']) # CHI-SQUARE TESTS tt_a = TextTable(max_width=0) tt_a.set_cols_dtype(['t', 'a', 'a', 'a']) tt_a.set_cols_align(['l', 'r', 'r', 'r']) tt_a.set_deco(TextTable.HEADER) tt_a.header([' ', 'Value', 'df', 'P']) tt_a.add_row( ['Pearson Chi-Square', self['chisq'], self['df'], self['p']]) if self['ccchisq'] != None: tt_a.add_row([ 'Continuity Correction', self['ccchisq'], self['df'], self['ccp'] ]) tt_a.add_row( ['Likelihood Ratio', self['lnchisq'], self['df'], self['lnp']]) tt_a.add_row(["N of Valid Cases", self['N'], '', '']) # POWER tt_p = TextTable(max_width=0) tt_p.set_cols_dtype(['t', 'a']) tt_p.set_cols_align(['l', 'r']) tt_p.set_deco(TextTable.HEADER) tt_p.header(['Measure', ' ']) tt_p.add_row(['Effect size w', self['w']]) tt_p.add_row(['Non-centrality lambda', self['lambda']]) tt_p.add_row(['Critical Chi-Square', self['crit_chi2']]) tt_p.add_row(['Power', self['power']]) return 'Chi-Square: two Factor\n\n' + \ 'SUMMARY\n%s\n\n'%tt_s.draw() + \ 'SYMMETRIC MEASURES\n%s\n\n'%tt_sym.draw() + \ 'CHI-SQUARE TESTS\n%s\n\n'%tt_a.draw() + \ 'CHI-SQUARE POST-HOC POWER\n%s'%tt_p.draw()
def __str__(self): """Returns human readable string representation of ChiSquare2way""" if self == {}: return '(no data in object)' # SUMMARY tt_s = TextTable(max_width=0) tt_s.set_cols_dtype(['t'] + ['a']*(self.N_c + 1)) tt_s.set_cols_align(['l'] + ['r']*(self.N_c + 1)) tt_s.set_deco(TextTable.HEADER | TextTable.FOOTER) tt_s.header( [' '] + sorted(self.col_counter) + ['Total']) for r, rv in sorted(self.row_counter.items()): line = [r] for c, cv in sorted(self.col_counter.items()): o = self.counter[(r,c)] e = (rv*cv)/self['N'] line.append('%s\n(%s)'%(_str(o), _str(e))) line.append(rv) tt_s.add_row(line) tt_s.footer(['Total'] + [v for c,v in sorted(self.col_counter.items())] + [self['N']]) # SYMMETRIC TESTS tt_sym = TextTable(max_width=0) tt_sym.set_cols_dtype(['t', 'a', 'a']) tt_sym.set_cols_align(['l', 'r', 'r']) tt_sym.set_deco(TextTable.HEADER) tt_sym.header(['','Value','Approx.\nSig.']) tt_sym.add_row(["Cramer's V", self['CramerV'], self['CramerV_prob']]) tt_sym.add_row(["Contingency Coefficient", self['C'], self['C_prob']]) tt_sym.add_row(["N of Valid Cases", self['N'], '']) # CHI-SQUARE TESTS tt_a = TextTable(max_width=0) tt_a.set_cols_dtype(['t', 'a', 'a', 'a']) tt_a.set_cols_align(['l', 'r', 'r', 'r']) tt_a.set_deco(TextTable.HEADER) tt_a.header([' ', 'Value', 'df', 'P']) tt_a.add_row(['Pearson Chi-Square', self['chisq'], self['df'], self['p']]) if self['ccchisq'] != None: tt_a.add_row(['Continuity Correction', self['ccchisq'], self['df'], self['ccp']]) tt_a.add_row(['Likelihood Ratio', self['lnchisq'], self['df'], self['lnp']]) tt_a.add_row(["N of Valid Cases", self['N'], '', '']) # POWER tt_p = TextTable(max_width=0) tt_p.set_cols_dtype(['t', 'a']) tt_p.set_cols_align(['l', 'r']) tt_p.set_deco(TextTable.HEADER) tt_p.header( ['Measure',' ']) tt_p.add_row(['Effect size w', self['w']]) tt_p.add_row(['Non-centrality lambda', self['lambda']]) tt_p.add_row(['Critical Chi-Square', self['crit_chi2']]) tt_p.add_row(['Power', self['power']]) return 'Chi-Square: two Factor\n\n' + \ 'SUMMARY\n%s\n\n'%tt_s.draw() + \ 'SYMMETRIC MEASURES\n%s\n\n'%tt_sym.draw() + \ 'CHI-SQUARE TESTS\n%s\n\n'%tt_a.draw() + \ 'CHI-SQUARE POST-HOC POWER\n%s'%tt_p.draw()