概要
閲覧数:2463
投稿日: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