偏差値計算
偏差値を計算するプログラムを実装してみた。
実行結果
[実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)] [平均点]50 [標準偏差]31.622776601684 [30点の偏差値]43.675444679663 [100点の偏差値]65.811388300842 [実験2:スコア (0,30,31,32,33,34,35,36,37,38,39,40,100)] [平均点]37.307692307692 [標準偏差]20.551565972094 [30点の偏差値]46.444216310516 [100点の偏差値]80.504881125572
プログラム
<?php test(); exit; // テスト function test() { $hensachi = new Hensachi(); $score_list = array(0,10,20,30,40,50,60,70,80,90,100); d("実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)"); $hensachi->setScoreList($score_list); d('平均点', $hensachi->avg); d('標準偏差', $hensachi->hensa); d('30点の偏差値', $hensachi->get(30)); d('100点の偏差値', $hensachi->get(100)); $hensachi = new Hensachi(); $score_list = array(0,30,31,32,33,34,35,36,37,38,39,40,100); d("実験2:スコア (0,30,31,32,33,34,35,36,37,38,39,40,100)"); $hensachi->setScoreList($score_list); d('平均点', $hensachi->avg); d('標準偏差', $hensachi->hensa); d('30点の偏差値', $hensachi->get(30)); d('100点の偏差値', $hensachi->get(100)); } /** * 偏差値を計算するクラス *ex) $hensachi = new Hensachi(); $score_list = array(0,10,20,30,40,50,60,70,80,90,100); d("実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)"); $hensachi->setScoreList($score_list); d('平均点', $hensachi->avg); d('標準偏差', $hensachi->hensa); d('30点の偏差値', $hensachi->get(30)); d('100点の偏差値', $hensachi->get(100)); */ class Hensachi { /** 平均点 */ var $avg; /** 標準偏差 */ var $hensa; /** * 偏差値を取得 *@param score 点数 *@return float 偏差値 */ function get($score) { $hensachi = 10 * ($score - $this->avg) / $this->hensa + 50; return $hensachi; } /** * 点数リストをセット *@param array(int) score_list 点数の配列 */ function setScoreList($score_list) { $this->avg = $this->calcAvarage($score_list); $this->hensa = $this->calcHensa($score_list, $this->avg); } /** * 平均点を計算 *@param array(int) score_list 点数の配列 */ function calcAvarage($score_list) { $sum = 0; for ($i=0; $i < count($score_list); $i++) { $sum += $score_list[$i]; } $avg = $sum / count($score_list); return $avg; } /** * 標準偏差を計算 *@param array(int) score_list 点数の配列 *@param int avg 平均点 */ function calcHensa($score_list, $avg) { $sum = 0; for ($i=0; $i < count($score_list); $i++) { $sum += pow($score_list[$i] - $avg, 2); } $hensa = sqrt($sum / count($score_list)); return $hensa; } } // debug function d($name, $s="") { if (is_array($s)) { $s = preg_replace("/[\r\n]/", "", print_r($s, true)); } echo '[' . $name . ']' . $s . "\n"; }