提供:Japanese Scratch-Wiki
標準偏差とは、データのばらつきの様子を示す数値である。統計的な処理を行うときに、よく使用される。詳しくはWikipedia「標準偏差」を参照のこと。
標準偏差の定義
標準偏差とは、分散の正の平方根のことである。
では、分散とは何だろうか。これは、各データと平均値の差を2乗して、さらにこの平均をとったものである。 標準偏差と分散は、ともにデータのばらつき度合い、-- 各データがある値周辺に固まっているか、バラバラであるか -- を示す数値である。次の例で確認してみよう。
ここに5本の花があるとする。それぞれの高さは、25 cm、60 cm、40 cm、45 cm、55 cmである。これらの花の高さの平均は次の式で求められる:
|
= 45
したがって、花の高さの平均は45 cmである。では、花の高さの分散はどうだろうか。
花 #1: (25-45)2=(-20)2400
花 #2: (40-45)2=(-5)2= 25
花 #3: (45-45)2=02= 0
花 #4: (55-45)2=102= 100
花 #5: (60-45)2=152= 225
|
= 150
したがって、花の高さの分散は150である。これの平方根をとれば標準偏差になるので、花の高さの標準偏差は150の平方根を計算して、約12.247...となる。
ただし、標準偏差には2種類が存在する。1つは、すべてを対象とした調査の結果に基づく標準偏差だ。これを母集団の標準偏差、または、母標準偏差と言う。たとえば、世の中にこの5本しか花というものが存在しない場合、先ほどの12.247が花の高さの母標準偏差になる。
もう1つの標準偏差は、標本標準偏差だ。これは、対象の一部のみを取り出したデータ (標本:サンプル) に対する標準偏差のことである。たとえば、現実には、明らかに5本以上の花が存在しており、先ほどの花の高さはそのごく一部を取り上げたものであるため、この例では本来、標本標準偏差を適用すべきであった。
2つの標準偏差の違いは、分散の計算方法にある。母標準偏差は、先ほど述べたルールで分散を計算するのに対し(これを母分散と言う)、標本標準偏差では、各データと平均の差の2乗を合計した後、データの個数から1引いた数でこれをわる(これを標本分散と言う)。たとえば、花の高さの例に戻ると、次の計算で標本分散が求められる:
|
=187.5
5は高さがわかっている花の本数である。ここから1を引くのは、これが標本分散だからである。 最後に、標本分散の平方根をとれば、求める標本標準偏差が計算できる。ここでは、標本分散が187.5であるから、標本標準偏差は約13.693...となる。
スクリプト例
変数/リスト
- データ — 標準偏差をもとめるデータがはいったリスト。
さらに、次の7つの変数を使用する。
- 平均
- 合計
- 分散
- 標準偏差
- 合計2
- 現在の項目
- 現在の項目2
まずは、標本標準偏差の求め方から見ていこう。
最初に、対象となるデータの平均値を求める必要がある。これは次のスクリプトのとおりである:
@greenFlag が押されたとき::events hat [合計 v] を (0) にする// 変数をリセット [現在の項目 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計 v] を ([データ v]の(現在の項目)番目::list) ずつ変える [現在の項目 v] を (1) ずつ変える //変数 「現在の項目」は現在取り上げているデータを示す数値 end [平均 v] を ((合計) / ([データ v] の長さ::list)) にする
次に、標本分散を計算する:
[合計2 v] を (0) にする [現在の項目2 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計2 v] を ((([データ v]の(現在の項目2)番目::list) - (平均)) * (([データ v]の(現在の項目2)番目::list) - (平均))) ずつ変える [現在の項目2 v] を (1) ずつ変える end [分散 v] を ((合計2) / (([データ v] の長さ::list) - (1))) にする
最後に、分散の平方根をとる。
[標準偏差 v] を ((分散)の[平方根 v]::operators) にする
以上のスクリプトをまとめて実行すれば、標本標準偏差が求められる。 母標準偏差を求める場合は、上記の分散を求める場所を次のように修正すればよい:
[分散 v] を ((合計2) / ( [データ v] の長さ::list)) にする
完成したスクリプト
標本標準偏差を求めるコードは次のとおり:
@greenFlag が押されたとき::events hat [合計 v] を (0) にする// 変数をリセット [現在の項目 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計 v] を ([データ v]の(現在の項目)番目::list) ずつ変える [現在の項目 v] を (1) ずつ変える //変数 「現在の項目」は現在取り上げているデータを示す数値 end [平均 v] を ((合計) / ([データ v] の長さ::list)) にする [合計2 v] を (0) にする [現在の項目2 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計2 v] を ((([データ v]の(現在の項目2)番目::list) - (平均)) * (([データ v]の(現在の項目2)番目::list) - (平均))) ずつ変える [現在の項目2 v] を (1) ずつ変える end [分散 v] を ((合計2) / (([データ v] の長さ::list) - (1))) にする [標準偏差 v] を ((分散)の[平方根 v]::operators) にする
母標準偏差を求めるコードは次のとおり:
@greenFlag が押されたとき::events hat [合計 v] を (0) にする// 変数をリセット [現在の項目 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計 v] を ([データ v]の(現在の項目)番目::list) ずつ変える [現在の項目 v] を (1) ずつ変える //変数 「現在の項目」は現在取り上げているデータを示す数値 end [平均 v] を ((合計) / ([データ v] の長さ::list)) にする [合計2 v] を (0) にする [現在の項目2 v] を (1) にする ([データ v] の長さ::list) 回繰り返す [合計2 v] を ((([データ v]の(現在の項目2)番目::list) - (平均)) * (([データ v]の(現在の項目2)番目::list) - (平均))) ずつ変える [現在の項目2 v] を (1) ずつ変える end [分散 v] を ((合計2) / ([データ v] の長さ::list)) にする [標準偏差 v] を ((分散)の[平方根 v]::operators) にする