parameters: (*args)
return_statement: return f, prob
docstring: Performs a 1-way ANOVA.
  
      The one-way ANOVA tests the null hypothesis that 2 or more groups have
      the same population mean. The test is applied to samples from two or
      more groups, possibly with differing sizes.
  
      Read more in the :ref:`User Guide <univariate_feature_selection>`.
  
      Parameters
      ----------
      *args : array_like, sparse matrices
          sample1, sample2... The sample measurements should be given as
          arguments.
  
      Returns
      -------
      F-value : float
          The computed F-value of the test.
      p-value : float
          The associated p-value from the F-distribution.
  
      Notes
      -----
      The ANOVA test has important assumptions that must be satisfied in order
      for the associated p-value to be valid.
  
      1. The samples are independent
      2. Each sample is from a normally distributed population
      3. The population standard deviations of the groups are all equal. This
         property is known as homoscedasticity.
  
      If these assumptions are not true for a given set of data, it may still be
      possible to use the Kruskal-Wallis H-test (`scipy.stats.kruskal`_) although
      with some loss of power.
  
      The algorithm is from Heiman[2], pp.394-7.
  
      See ``scipy.stats.f_oneway`` that should give the same results while
      being less efficient.
  
      References
      ----------
  
      .. [1] Lowry, Richard.  "Concepts and Applications of Inferential
             Statistics". Chapter 14.
             http://faculty.vassar.edu/lowry/ch14pt1.html
  
      .. [2] Heiman, G.W.  Research Methods in Statistics. 2002.
docstring_summary: Performs a 1-way ANOVA.
docstring_tokens: Performs a 1 - way ANOVA .
function: def f_oneway(*args):
      """Performs a 1-way ANOVA.
  
      The one-way ANOVA tests the null hypothesis that 2 or more groups have
      the same population mean. The test is applied to samples from two or
      more groups, possibly with differing sizes.
  
      Read more in the :ref:`User Guide <univariate_feature_selection>`.
  
      Parameters
      ----------
      *args : array_like, sparse matrices
          sample1, sample2... The sample measurements should be given as
          arguments.
  
      Returns
      -------
      F-value : float
          The computed F-value of the test.
      p-value : float
          The associated p-value from the F-distribution.
  
      Notes
      -----
      The ANOVA test has important assumptions that must be satisfied in order
      for the associated p-value to be valid.
  
      1. The samples are independent
      2. Each sample is from a normally distributed population
      3. The population standard deviations of the groups are all equal. This
         property is known as homoscedasticity.
  
      If these assumptions are not true for a given set of data, it may still be
      possible to use the Kruskal-Wallis H-test (`scipy.stats.kruskal`_) although
      with some loss of power.
  
      The algorithm is from Heiman[2], pp.394-7.
  
      See ``scipy.stats.f_oneway`` that should give the same results while
      being less efficient.
  
      References
      ----------
  
      .. [1] Lowry, Richard.  "Concepts and Applications of Inferential
             Statistics". Chapter 14.
             http://faculty.vassar.edu/lowry/ch14pt1.html
  
      .. [2] Heiman, G.W.  Research Methods in Statistics. 2002.
  
      """
      n_classes = len(args)
      args = [as_float_array(a) for a in args]
      n_samples_per_class = np.array([a.shape[0] for a in args])
      n_samples = np.sum(n_samples_per_class)
      ss_alldata = sum(safe_sqr(a).sum(axis=0) for a in args)
      sums_args = [np.asarray(a.sum(axis=0)) for a in args]
      square_of_sums_alldata = sum(sums_args) ** 2
      square_of_sums_args = [s ** 2 for s in sums_args]
      sstot = ss_alldata - square_of_sums_alldata / float(n_samples)
      ssbn = 0.
      for k, _ in enumerate(args):
          ssbn += square_of_sums_args[k] / n_samples_per_class[k]
      ssbn -= square_of_sums_alldata / float(n_samples)
      sswn = sstot - ssbn
      dfbn = n_classes - 1
      dfwn = n_samples - n_classes
      msb = ssbn / float(dfbn)
      msw = sswn / float(dfwn)
      constant_features_idx = np.where(msw == 0.)[0]
      if (np.nonzero(msb)[0].size != msb.size and constant_features_idx.size):
          warnings.warn("Features %s are constant." % constant_features_idx,
                        UserWarning)
      f = msb / msw
      # flatten matrix to vector in sparse case
      f = np.asarray(f).ravel()
      prob = special.fdtrc(dfbn, dfwn, f)
      return f, prob
function_tokens: def f_oneway ( * args ) : n_classes = len ( args ) args = [ as_float_array ( a ) for a in args ] n_samples_per_class = np . array ( [ a . shape [ 0 ] for a in args ] ) n_samples = np . sum ( n_samples_per_class ) ss_alldata = sum ( safe_sqr ( a ) . sum ( axis = 0 ) for a in args ) sums_args = [ np . asarray ( a . sum ( axis = 0 ) ) for a in args ] square_of_sums_alldata = sum ( sums_args ) ** 2 square_of_sums_args = [ s ** 2 for s in sums_args ] sstot = ss_alldata - square_of_sums_alldata / float ( n_samples ) ssbn = 0. for k , _ in enumerate ( args ) : ssbn += square_of_sums_args [ k ] / n_samples_per_class [ k ] ssbn -= square_of_sums_alldata / float ( n_samples ) sswn = sstot - ssbn dfbn = n_classes - 1 dfwn = n_samples - n_classes msb = ssbn / float ( dfbn ) msw = sswn / float ( dfwn ) constant_features_idx = np . where ( msw == 0. ) [ 0 ] if ( np . nonzero ( msb ) [ 0 ] . size != msb . size and constant_features_idx . size ) : warnings . warn ( "Features %s are constant." % constant_features_idx , UserWarning ) f = msb / msw # flatten matrix to vector in sparse case f = np . asarray ( f ) . ravel ( ) prob = special . fdtrc ( dfbn , dfwn , f ) return f , prob