You are here

public static function trendClass::calculate in Loft Data Grids 6.2

Same name and namespace in other branches
  1. 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/trend/trendClass.php \trendClass::calculate()
11 calls to trendClass::calculate()
PHPExcel_Calculation_Statistical::CORREL in vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php
* CORREL * * Returns covariance, the average of the products of deviations for each data point pair. * *
PHPExcel_Calculation_Statistical::COVAR in vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php
* COVAR * * Returns covariance, the average of the products of deviations for each data point pair. * *
PHPExcel_Calculation_Statistical::FORECAST in vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php
* FORECAST * * Calculates, or predicts, a future value by using existing values. The predicted value is a y-value for a given x-value. * *
PHPExcel_Calculation_Statistical::GROWTH in vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php
* GROWTH * * Returns values along a predicted emponential trend * *
PHPExcel_Calculation_Statistical::INTERCEPT in vendor/phpoffice/phpexcel/Classes/PHPExcel/Calculation/Statistical.php
* INTERCEPT * * Calculates the point at which a line will intersect the y-axis by using existing x-values and y-values. * *

... See full list

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/trend/trendClass.php, line 87

Class

trendClass
PHPExcel_trendClass

Code

public static function calculate($trendType = self::TREND_BEST_FIT, $yValues, $xValues = array(), $const = True) {

  //	Calculate number of points in each dataset
  $nY = count($yValues);
  $nX = count($xValues);

  //	Define X Values if necessary
  if ($nX == 0) {
    $xValues = range(1, $nY);
    $nX = $nY;
  }
  elseif ($nY != $nX) {

    //	Ensure both arrays of points are the same size
    trigger_error("trend(): Number of elements in coordinate arrays do not match.", E_USER_ERROR);
  }
  $key = md5($trendType . $const . serialize($yValues) . serialize($xValues));

  //	Determine which trend method has been requested
  switch ($trendType) {

    //	Instantiate and return the class for the requested trend method
    case self::TREND_LINEAR:
    case self::TREND_LOGARITHMIC:
    case self::TREND_EXPONENTIAL:
    case self::TREND_POWER:
      if (!isset(self::$_trendCache[$key])) {
        $className = 'PHPExcel_' . $trendType . '_Best_Fit';
        self::$_trendCache[$key] = new $className($yValues, $xValues, $const);
      }
      return self::$_trendCache[$key];
      break;
    case self::TREND_POLYNOMIAL_2:
    case self::TREND_POLYNOMIAL_3:
    case self::TREND_POLYNOMIAL_4:
    case self::TREND_POLYNOMIAL_5:
    case self::TREND_POLYNOMIAL_6:
      if (!isset(self::$_trendCache[$key])) {
        $order = substr($trendType, -1);
        self::$_trendCache[$key] = new PHPExcel_Polynomial_Best_Fit($order, $yValues, $xValues, $const);
      }
      return self::$_trendCache[$key];
      break;
    case self::TREND_BEST_FIT:
    case self::TREND_BEST_FIT_NO_POLY:

      //	If the request is to determine the best fit regression, then we test each trend line in turn
      //	Start by generating an instance of each available trend method
      foreach (self::$_trendTypes as $trendMethod) {
        $className = 'PHPExcel_' . $trendMethod . 'BestFit';
        $bestFit[$trendMethod] = new $className($yValues, $xValues, $const);
        $bestFitValue[$trendMethod] = $bestFit[$trendMethod]
          ->getGoodnessOfFit();
      }
      if ($trendType != self::TREND_BEST_FIT_NO_POLY) {
        foreach (self::$_trendTypePolyOrders as $trendMethod) {
          $order = substr($trendMethod, -1);
          $bestFit[$trendMethod] = new PHPExcel_Polynomial_Best_Fit($order, $yValues, $xValues, $const);
          if ($bestFit[$trendMethod]
            ->getError()) {
            unset($bestFit[$trendMethod]);
          }
          else {
            $bestFitValue[$trendMethod] = $bestFit[$trendMethod]
              ->getGoodnessOfFit();
          }
        }
      }

      //	Determine which of our trend lines is the best fit, and then we return the instance of that trend class
      arsort($bestFitValue);
      $bestFitType = key($bestFitValue);
      return $bestFit[$bestFitType];
      break;
    default:
      return false;
  }
}