Github user mengxr commented on a diff in the pull request:

    https://github.com/apache/spark/pull/1733#discussion_r16014267
  
    --- Diff: 
mllib/src/main/scala/org/apache/spark/mllib/stat/test/TestResult.scala ---
    @@ -0,0 +1,88 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.mllib.stat.test
    +
    +import org.apache.spark.annotation.Experimental
    +
    +/**
    + * :: Experimental ::
    + * Trait for hypothesis test results.
    + * @tparam DF Return type of `degreesOfFreedom`
    + */
    +@Experimental
    +trait TestResult[DF] {
    +
    +  /**
    +   *
    +   */
    +  def pValue: Double
    +
    +  /**
    +   *
    +   * @return
    +   */
    +  def degreesOfFreedom: DF
    +
    +  /**
    +   *
    +   * @return
    +   */
    +  def statistic: Double
    +
    +  /**
    +   * String explaining the hypothesis test result.
    +   * Specific classes implementing this trait should override this method 
to output test-specific
    +   * information.
    +   */
    +  override def toString: String = {
    +
    +    // String explaining what the p-value indicates.
    +    val pValueExplain = if (pValue <= 0.01) {
    +      "Very strong presumption against null hypothesis."
    +    } else if (0.01 < pValue && pValue <= 0.05) {
    +      "Strong presumption against null hypothesis."
    +    } else if (0.05 < pValue && pValue <= 0.01) {
    +      "Low presumption against null hypothesis."
    +    } else {
    +      "No presumption against null hypothesis."
    +    }
    +
    +    s"degrees of freedom = ${degreesOfFreedom.toString} \n" +
    +    s"statistic = $statistic \n" +
    +    s"pValue = $pValue \n" + pValueExplain
    +  }
    +}
    +
    +/**
    + * :: Experimental ::
    + * Object containing the test results for the chi squared hypothesis test.
    + */
    +@Experimental
    +case class ChiSquaredTestResult(override val pValue: Double,
    --- End diff --
    
    No case class features are used, especially pattern matching. This case 
class will extend `Product5` and make it impossible to add a field, for 
example, whether correction is used or not. Also, with a case class, it is very 
hard to add a static method. We might want to write the test result to JSON and 
later parse it back. A natural choice would be 
`ChiSquaredTestResult.fromJSON(json: String)` but it is very complicated to 
match the type signature generated by Scala's compiler. We had this problem 
with `LabeledPoint` in MLlib, which is a public case class.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to