예제 #1
0
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;
}
예제 #2
0
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;
}