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