概要
		
    
     閲覧数:2828
		 投稿日:2014-05-06
		 更新日:2014-05-13
     
  
  
	平均値、分散、標準偏差、学力偏差値を求める
学力偏差値(がくりょくへんさち)とは?
・偏差値(z値、zスコア、z得点、標準得点とも呼ばれる)の応用例の一つ
・学力検査の得点(素点)を、全体の平均点と標準偏差により正規化した値
「学力偏差値」取得構文
( 個人の得点 - 平均点 ) ÷ 標準偏差 × 10 + 50
・0や50などの定数は補正値。偏差値の変動域が0~100までの間で、平均が50にくるようにするために設定されている
コード
class Statistics
{
    /*
     * 平均値を求める
     */
    public static function average(array $values)
    {
        return (float) (array_sum($values) / count($values));
    }
    /*
     * 分散を求める
     * 分散 =((データ-平均値)の2乗)の総和 ÷ 個数
     */
    public static function variance(array $values)
    {
        // 平均値を求める
        $ave = self::average($values);
 
        $variance = 0.0;
        foreach ($values as $val) {
            $variance += pow($val - $ave, 2);
        }
        return (float) ($variance / count($values));
    }
    /*
     * 標準偏差を求める
     */ 
    public static function standardDeviation(array $values)
    {
        // 分散を求める
        $variance = self::variance($values);
 
        // 分散の平方根
        return (float) sqrt($variance);
    }
 
    /*
     * 偏差値を求める
     * ( 得点 - 平均点 ) ÷ 標準偏差 × 10 + 50
     * 0や50などの定数は補正値。偏差値の変動域が0~100までの間で、平均が50にくるようにするために設定されている
     */ 
    public static function standardScore( $target, array $arr)
    {
        return ( $target - self::average($arr) ) / self::standardDeviation($arr) * 10 + 50;
    }
}
$target = mt_rand(0, 100);
 
// generate Test Data
//$arr = array();
//for($i=0; $i<10; $i++){
//    array_push($arr, mt_rand(0, 100));
//}
$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 
print_r($arr);
echo "平均値: ".Statistics::average($arr)."\n";
echo "分散: ".Statistics::variance($arr)."\n";
echo "標準偏差: ".Statistics::standardDeviation($arr)."\n";
echo "ターゲット値:".$target."\n";
echo "偏差値: ".Statistics::standardScore($target, $arr)."\n";結果
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
)
平均値: 5.5
分散: 8.25
標準偏差: 2.872281323269
ターゲット値:47
偏差値: 194.48445444323