LoginSignup
6
4

More than 5 years have passed since last update.

偏差値の計算をプログラミング(js)で実装する。

Last updated at Posted at 2018-02-04

前回 Σ(シグマ)の計算をプログラミング(js)で実装するという記事をかいたのでそれを基に偏差値を求めてみる。

偏差値の数式

T_i= \frac{10(x_i - μ_x)}{σ_x} + 50

色々見慣れぬ記号が出てきましたがひとつづつ確認していきます。

個々の値(標本値 / データ配列)

x_i

xが求めたいデータ群(配列)になり、iはその対象データの指定を表しています。

この記事では例として下記のような10個のデータを準備します。

var x = [10,35,60,0,100,90,45,50,20,80];

平均

μ_x

これが平均を表します。
(ミューと読みます。)

平均を求める数式

μ_x=\frac{1}{n}\sum_{i=0}^nx_i

iが0から始まりn回繰り返されます。
ここでいうn回とはデータの個数となるので10回になります。
最終的に1/nで掛けます。
小難しく書いてありますがただの平均なので要は全部足して足した個数で割るだけです。

平均を求めるコード

function average(x) {
    var n = x.length;
    var avg = 0;

    for(i=0; i<n; i++) {
        avg += x[i];
    }

    return avg / n; //  (1 / n * avg)
}

(function() {
    let x = [10,35,60,0,100,90,45,50,20,80];
    let avg = average(x);

    console.log(avg);
})()

標準偏差

σ_x

これが標準偏差を表します。
(シグマと読みます。小文字版です。)

標準偏差を求める数式

σ_x=\sqrt{\frac{1}{n}\sum_{i=0}^n(x_i-μ_x)^2}

今までの要領でシグマを求め最後に平方根を求める。

標準偏差を求めるコード

function average(x) {
    //↑にあるのでここでは省略
}

function standardDeviation(x, avg) {
    let n = x.length;
    let sum = 0;
    for (i=0; i<n; i++) {
        sum+=Math.pow(x[i] - avg, 2);
    }

    return Math.sqrt(sum / n);
}

(function() {
    let x = [10,35,60,0,100,90,45,50,20,80];
    let avg = average(x);
    let sd = standardDeviation(x, avg);

    console.log(sd);
})()

偏差値を改めて求める

T_i= \frac{10(x_i - μ_x)}{σ_x} + 50

ここで定義した「データ配列」、求めた「平均」、「標準偏差」をあてはめます。

偏差値を求めるコード

function average(x) {
    let n = x.length;
    let avg = 0;

    for(i=0; i<n; i++) {
        avg += x[i];
    }
    return avg / n; //  (1 / n * avg)
}

function standardDeviation(x, avg) {
    let n = x.length;
    let sum = 0;
    for (i=0; i<n; i++) {
        sum+=Math.pow(x[i] - avg, 2);
    }
    return Math.sqrt(sum / n);
}

function standardScore(x, avg, sd) {
    let ssArr = [];
    let n = x.length;
    for (i=0; i<n; i++) {
        let ti = (10 * (x[i] - avg) / sd) + 50;
        ssArr.push(ti);
    }

    return ssArr;
}

(function() {
    let x = [10,35,60,0,100,90,45,50,20,80];
    let avg = average(x);
    let sd = standardDeviation(x, avg);
    let ssArr = standardScore(x, avg, sd);

    console.log("平均: " + avg);
    console.log("標準偏差: " + sd);
    console.log("x[2]の偏差値: " + ssArr[2]);
})()

参考

Wikipedia: 偏差値

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4