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