function stat_covp($data1, $data2) { //calculate covariance between 2 arrays // covariance = sum((data1-mean1) * (data2-mean2)) / samplesize -1 $data1_sum = 0; $data2_sum = 0; $len1 = count($data1); $len2 = count($data2); $mean1 = stat_mean($data1); $mean2 = stat_mean($data2); $count = 0; for ($x = 0; $x < $len1; $x++) { $sum_array[$x] = ($data1[$x] - $mean1) * ($data2[$x] - $mean2); } return array_sum($sum_array) / $len1; }
function stat_simple_regression($x, $y) { // runs a simple linear regression on $x and $y // returns an associative array containing the following fields: // a - intercept // b - slope // s - standard error of estimate // r - correlation coefficient // r2 - coefficient of determination (r-squared) // cov - covariation // t - t-statistic $output = array(); $output['a'] = 0; $n = min(count($x), count($y)); $mean_x = stat_mean($x); $mean_y = stat_mean($y); $SS_x = 0; foreach ($x as $element) { $SS_x += pow($element - $mean_x, 2); } $SS_y = 0; foreach ($y as $element) { $SS_y += pow($element - $mean_y, 2); } $SS_xy = 0; for ($i = 0; $i < $n; $i++) { $SS_xy += ($x[$i] - $mean_x) * ($y[$i] - $mean_y); } $output['b'] = $SS_xy / $SS_x; $output['a'] = $mean_y - $output['b'] * $mean_x; $output['s'] = sqrt(($SS_y - $output['b'] * $SS_xy) / ($n - 2)); $output['r'] = $SS_xy / sqrt($SS_x * $SS_y); $output['r2'] = pow($output['r'], 2); $output['cov'] = $SS_xy / ($n - 1); $output['t'] = $output['r'] / sqrt((1 - $output['r2']) / ($n - 2)); return $output; }