ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
trendClass Class Reference
+ Collaboration diagram for trendClass:

Static Public Member Functions

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

Data Fields

const TREND_LINEAR = 'Linear'
 
const TREND_LOGARITHMIC = 'Logarithmic'
 
const TREND_EXPONENTIAL = 'Exponential'
 
const TREND_POWER = 'Power'
 
const TREND_POLYNOMIAL_2 = 'Polynomial_2'
 
const TREND_POLYNOMIAL_3 = 'Polynomial_3'
 
const TREND_POLYNOMIAL_4 = 'Polynomial_4'
 
const TREND_POLYNOMIAL_5 = 'Polynomial_5'
 
const TREND_POLYNOMIAL_6 = 'Polynomial_6'
 
const TREND_BEST_FIT = 'Bestfit'
 
const TREND_BEST_FIT_NO_POLY = 'Bestfit_no_Polynomials'
 

Static Private Attributes

static $_trendTypes
 
static $_trendTypePolyOrders
 
static $_trendCache = array()
 

Detailed Description

Definition at line 43 of file trendClass.php.

Member Function Documentation

◆ calculate()

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

Definition at line 87 of file trendClass.php.

References range.

Referenced by PHPExcel_Calculation_Statistical\CORREL(), PHPExcel_Calculation_Statistical\COVAR(), PHPExcel_Calculation_Statistical\FORECAST(), PHPExcel_Calculation_Statistical\GROWTH(), PHPExcel_Calculation_Statistical\INTERCEPT(), PHPExcel_Calculation_Statistical\LINEST(), PHPExcel_Calculation_Statistical\LOGEST(), PHPExcel_Calculation_Statistical\RSQ(), PHPExcel_Calculation_Statistical\SLOPE(), PHPExcel_Calculation_Statistical\STEYX(), and PHPExcel_Calculation_Statistical\TREND().

87  {
88  // Calculate number of points in each dataset
89  $nY = count($yValues);
90  $nX = count($xValues);
91 
92  // Define X Values if necessary
93  if ($nX == 0) {
94  $xValues = range(1,$nY);
95  $nX = $nY;
96  } elseif ($nY != $nX) {
97  // Ensure both arrays of points are the same size
98  trigger_error("trend(): Number of elements in coordinate arrays do not match.", E_USER_ERROR);
99  }
100 
101  $key = md5($trendType.$const.serialize($yValues).serialize($xValues));
102  // Determine which trend method has been requested
103  switch ($trendType) {
104  // Instantiate and return the class for the requested trend method
105  case self::TREND_LINEAR :
106  case self::TREND_LOGARITHMIC :
107  case self::TREND_EXPONENTIAL :
108  case self::TREND_POWER :
109  if (!isset(self::$_trendCache[$key])) {
110  $className = 'PHPExcel_'.$trendType.'_Best_Fit';
111  self::$_trendCache[$key] = new $className($yValues,$xValues,$const);
112  }
113  return self::$_trendCache[$key];
114  break;
115  case self::TREND_POLYNOMIAL_2 :
116  case self::TREND_POLYNOMIAL_3 :
117  case self::TREND_POLYNOMIAL_4 :
118  case self::TREND_POLYNOMIAL_5 :
119  case self::TREND_POLYNOMIAL_6 :
120  if (!isset(self::$_trendCache[$key])) {
121  $order = substr($trendType,-1);
122  self::$_trendCache[$key] = new PHPExcel_Polynomial_Best_Fit($order,$yValues,$xValues,$const);
123  }
124  return self::$_trendCache[$key];
125  break;
126  case self::TREND_BEST_FIT :
127  case self::TREND_BEST_FIT_NO_POLY :
128  // If the request is to determine the best fit regression, then we test each trend line in turn
129  // Start by generating an instance of each available trend method
130  foreach(self::$_trendTypes as $trendMethod) {
131  $className = 'PHPExcel_'.$trendMethod.'BestFit';
132  $bestFit[$trendMethod] = new $className($yValues,$xValues,$const);
133  $bestFitValue[$trendMethod] = $bestFit[$trendMethod]->getGoodnessOfFit();
134  }
135  if ($trendType != self::TREND_BEST_FIT_NO_POLY) {
136  foreach(self::$_trendTypePolyOrders as $trendMethod) {
137  $order = substr($trendMethod,-1);
138  $bestFit[$trendMethod] = new PHPExcel_Polynomial_Best_Fit($order,$yValues,$xValues,$const);
139  if ($bestFit[$trendMethod]->getError()) {
140  unset($bestFit[$trendMethod]);
141  } else {
142  $bestFitValue[$trendMethod] = $bestFit[$trendMethod]->getGoodnessOfFit();
143  }
144  }
145  }
146  // Determine which of our trend lines is the best fit, and then we return the instance of that trend class
147  arsort($bestFitValue);
148  $bestFitType = key($bestFitValue);
149  return $bestFit[$bestFitType];
150  break;
151  default :
152  return false;
153  }
154  } // function calculate()
Resolve range
+ Here is the caller graph for this function:

Field Documentation

◆ $_trendCache

trendClass::$_trendCache = array()
staticprivate

Definition at line 84 of file trendClass.php.

◆ $_trendTypePolyOrders

trendClass::$_trendTypePolyOrders
staticprivate
Initial value:
= array( self::TREND_POLYNOMIAL_2,
self::TREND_POLYNOMIAL_3,
self::TREND_POLYNOMIAL_4,
self::TREND_POLYNOMIAL_5,
self::TREND_POLYNOMIAL_6
)

Definition at line 72 of file trendClass.php.

◆ $_trendTypes

trendClass::$_trendTypes
staticprivate
Initial value:
= array( self::TREND_LINEAR,
self::TREND_LOGARITHMIC,
self::TREND_EXPONENTIAL,
self::TREND_POWER
)

Definition at line 62 of file trendClass.php.

◆ TREND_BEST_FIT

const trendClass::TREND_BEST_FIT = 'Bestfit'

Definition at line 54 of file trendClass.php.

◆ TREND_BEST_FIT_NO_POLY

const trendClass::TREND_BEST_FIT_NO_POLY = 'Bestfit_no_Polynomials'

Definition at line 55 of file trendClass.php.

◆ TREND_EXPONENTIAL

const trendClass::TREND_EXPONENTIAL = 'Exponential'

◆ TREND_LINEAR

◆ TREND_LOGARITHMIC

const trendClass::TREND_LOGARITHMIC = 'Logarithmic'

Definition at line 46 of file trendClass.php.

◆ TREND_POLYNOMIAL_2

const trendClass::TREND_POLYNOMIAL_2 = 'Polynomial_2'

Definition at line 49 of file trendClass.php.

◆ TREND_POLYNOMIAL_3

const trendClass::TREND_POLYNOMIAL_3 = 'Polynomial_3'

Definition at line 50 of file trendClass.php.

◆ TREND_POLYNOMIAL_4

const trendClass::TREND_POLYNOMIAL_4 = 'Polynomial_4'

Definition at line 51 of file trendClass.php.

◆ TREND_POLYNOMIAL_5

const trendClass::TREND_POLYNOMIAL_5 = 'Polynomial_5'

Definition at line 52 of file trendClass.php.

◆ TREND_POLYNOMIAL_6

const trendClass::TREND_POLYNOMIAL_6 = 'Polynomial_6'

Definition at line 53 of file trendClass.php.

◆ TREND_POWER

const trendClass::TREND_POWER = 'Power'

Definition at line 48 of file trendClass.php.


The documentation for this class was generated from the following file: