PHP Classes

File: Math_kashi/example.php

Recommend this page to a friend!
  Classes of Khaled Al-Shamaa   Al-Kashi   Math_kashi/example.php   Download  
File: Math_kashi/example.php
Role: Example script
Content type: text/plain
Description: Version 4.0 files imported from sf.net
Class: Al-Kashi
Compute statistics on a set of values
Author: By
Last change: Fix the significance test of Student's t-Test
Date: 7 years ago
Size: 6,780 bytes
 

Contents

Class file image Download
<?php

$sep
= "\t"; $nl = "\n";

$content = file_get_contents('data.txt');

$records = explode($nl, $content);
$header = explode($sep, trim(array_shift($records)));
$data = array_fill_keys($header, array());

foreach (
$records as $id=>$record) {
   
$record = trim($record);
    if (
$record == '') continue;
   
   
$fields = explode($sep, $record);
   
$titles = $header;
    
    foreach (
$fields as $field) {
       
$title = array_shift($titles);
       
$data[$title][] = $field;
    }
}

$x = $data['wt'];
$y = $data['mpg'];

require(
'kashi.php');

// $kashi = new Kashi($dbname, $dbuser, $dbpass, $dbhost);
$kashi = new Kashi('test', 'root', '', 'localhost');

/**
 * Summary Statistics:
 */

// $x is an array of values
echo 'Arithmetic Mean: ' . $kashi->mean($x) . '<br />';
echo
'Aeometric Mean: ' . $kashi->mean($x, "geometric") . '<br />';
echo
'Harmonic Mean: ' . $kashi->mean($x, "harmonic") . '<br />';

echo
'Mode: '; print_r($kashi->mode($x)); echo '<br />';
echo
'Median: ' . $kashi->median($x) . '<br />';
echo
'Variance: ' . $kashi->variance($x) . '<br />';
echo
'SD: ' . $kashi->sd($x) . '<br />';
echo
'%CV: ' . $kashi->cv($x) . '<br />';

echo
'Skewness: ' . $kashi->skew($x) . '<br />';
echo
'Is it significant (i.e. test it against 0)? ';
var_dump($kashi->isSkew($x));

echo
'Kurtosis: ' . $kashi->kurt($x) . '<br />';
echo
'Is it significant (i.e. test it against 0)? ';
var_dump($kashi->isKurt($x));

echo
'Rank: ';
echo
implode(', ', $kashi->rank($x)) . '<br />';

echo
'<hr />';

/**
 * Statistical Graphics
 */
echo 'Boxplot: <br /><pre>';
print_r($kashi->boxplot($x));
echo
'</pre><br />';

echo
'Histogram: <br /><pre>';
print_r($kashi->hist($x, 8));
echo
'</pre><br />';
 
echo
'Normal Q-Q Plot: <br />';
$qq = $kashi->qqnorm($x);
echo
'x = ' . implode(', ', $qq['x']) . '<br />';
echo
'y = ' . implode(', ', $qq['y']) . '<br />';

echo
'<hr />';

/**
 * Correlation, Regression, and t-Test:
 */
echo 'Covariance: ' . $kashi->cov($x, $y) . '<br />';
echo
'Correlation: ' . $kashi->cor($x, $y) . '<br />';

$r = $kashi->cor($x, $y);
$n = count($x);
echo
'Significant of Correlation: ' . $kashi->corTest($r, $n) . '<br />';

echo
'Regression: <pre>' . print_r($kashi->lm($x, $y), true) . '</pre><br />';

echo
't-Test unpaired: ' . $kashi->tTest($x, $y, false) . '<br />';
echo
'Test (assumed equal variances): ' . $kashi->tDist($kashi->tTest($x, $y, false), $kashi->tTestDf($x, $y, true, false)) . '<br />';
echo
'Test (assumed unequal variances): ' . $kashi->tDist($kashi->tTest($x, $y, false), $kashi->tTestDf($x, $y, false, false)) . '<br />';

echo
't-Test paired: ' . $kashi->tTest($x, $y, true) . '<br />';
echo
'Test: ' . $kashi->tDist($kashi->tTest($x, $y, true), $kashi->tTestDf($x, $y, false, true)) . '<br />';

echo
'<hr />';

/**
 * Distributions:
 */
echo 'Normal distribution (x=0.5, mean=0, sd=1): ' . $kashi->norm(0.5, 0, 1) . '<br />';

echo
'Probability for the Student t-distribution (t=3, n=10) one-tailed: ';
echo
$kashi->tDist(3, 10, 1) . '<br />';

echo
'Probability for the Student t-distribution (t=3, n=10) two-tailed: ';
echo
$kashi->tDist(3, 10, 2) . '<br />';

echo
'F probability distribution (f=2, df1=12, df2=15): ' . $kashi->fDist(2, 12, 15) . '<br />';

echo
'Inverse of the standard normal cumulative distribution (p=0.95): ';
echo
$kashi->inverseNormCDF(0.95) . '<br />';

echo
't-value of the Student\'s t-distribution (p=0.05, n=29): ';
echo
$kashi->inverseTCDF(0.05, 29) . '<br />';

echo
'Standardize (x) (i.e. mean=0 & variance=1): <br />';
echo
implode(', ', $kashi->standardize($x)) . '<br />';

echo
'<hr />';

/**
 * Chi-square test or Contingency tables (A/B testing):
 */
$table['Automatic'] = array('4 Cylinders' => 3, '6 Cylinders' => 4, '8 Cylinders' => 12);
$table['Manual'] = array('4 Cylinders' => 8, '6 Cylinders' => 3, '8 Cylinders' => 2);

$result = $kashi->chiTest($table);

$probability = $kashi->chiDist($result['chi'], $result['df']);
echo
'Chi-square test probability: ' . $probability . '<br />';

echo
'<hr />';

/**
 * Diversity index:
 */
$gear = array('3' => 15, '4' => 12, '5' => 5);
$cyl = array('4' => 11, '6' => 7, '8' => 14);

echo
'Shannon index for gear: ' . $kashi->diversity($gear) . '<br />';
echo
'Shannon index for cyl: ' . $kashi->diversity($cyl) . '<br />';

echo
'<hr />';

/**
 * ANOVA:
 */
require('kashi_anova.php');

// $obj = new KashiANOVA($dbname, $dbuser, $dbpass, $dbhost);
$obj = new KashiANOVA('test', 'root', '', 'localhost');

$str = file_get_contents('anova_data.txt');
$obj->loadString($str);

// mpg ~ cyl
$result = $obj->anova('cyl', 'mpg');
echo
'Analysis of variance (ANOVA): mpg ~ cyl<pre>';
print_r($result);
echo
'</pre>';

echo
'<hr />';

/**
 * Cluster Analysis
 */
require('kashi_cluster.php');
$obj = new KashiCluster();
$obj->dataLoad($data);
$result = $obj->kMean(2);

echo
'K-Means Clustering:<pre>';
print_r($result);
echo
'</pre>';

// Heretical tree output has no header, and consists of four columns. For each row, the first column is the
// identifier of the node, the second and third columns are child nodes identifier, and the fourth column used
// to determine the height of the node when rendering a tree.
$tree = $obj->hClust();
echo
"<hr />Hierarchical Clustering:<pre>$tree</pre>";

echo
'<hr />';

/**
 * Time Series Analysis
 */
echo 'Moving Average: <br />' . implode(', ', $kashi->movingAvg($x, 5)) . '<br />';

echo
'<hr />';

/**
 * Matrix functions
 */
echo 'Matrix Functions: <br />';

$A[1][1] = 1;
$A[1][2] = 2;
$A[2][1] = 3;
$A[2][2] = 4;

$B[1][1] = 5;
$B[1][2] = 7;
$B[2][1] = 6;
$B[2][2] = 8;

echo
'A + B = ';
print_r($kashi->mAddition($A, $B));

echo
'<br />B - A = ';
print_r($kashi->mSubtraction($B, $A));

echo
'<br />A * 2 = ';
print_r($kashi->mMultiplication($A, 2));

echo
'<br />A * B = ';
print_r($kashi->mMultiplication($A, $B));

echo
'<br />Transpose of B, t(B) = ';
print_r($kashi->mTranspose($B));

echo
'<br />Determinat of A, |A| = ';
print_r($kashi->mDeterminant($A));

echo
'<br />Cofactor of A = ';
print_r($kashi->mCofactor($A));

echo
'<br />Adjoint of A = ';
print_r($kashi->mAdjoint($A));

echo
'<br />Inverse of A = ';
print_r($kashi->mInverse($A));

echo
'<hr />';

/*
 * Path Analysis
 */
echo 'Path Analysis: <br />';
 
print_r($kashi->path($data['mpg'], array(1=>$data['wt'], $data['hp'], $data['qsec'])));

echo
'<hr />';

/*
 * Solve Equations
 */
echo 'Solve System of Linear Equations: <br />';

$X[1] = array(1=>0, 2, 1);
$X[2] = array(1=>1, 4, -1);
$X[3] = array(1=>-1, 1, 1);

$Y = array(1=>9, 23, 2);

try{
   
print_r($kashi->solve($X, $Y));
} catch (
KashiException $e) {
    echo
'Caught exception: ', $e->getMessage(), '<hr/>';
}

echo
'<hr />';