偏差値、学校のテストでは絶対ついてくるものですね。ここでは、 この偏差値の求め方をテストを例に取り解説しています。 ☆偏差値を求める☆
なお、プログラムコード中のグローバルな変数とその役割は、次の通りです。
Private Const DATA_MAX = 300 'データの最大個数 Private TextBoxData As Object 'データを入力するテキストボックス Private ListData As Object '偏差値を表示するリストボックス Private data() As Double 'データの格納先 Private dataCount As Integer 'データの個数
偏差値を求めるには、平均、分散と標準偏差というものを求める必要があります。★平均★ 単なる平均点のことで、全員の点数の平均値です。配列中のデータの総和を 求め、データ数で割ります。
'配列のデータの総和を求める Public Function GetSum() As Double Dim SumValue As Double Dim i As Integer SumValue = 0# For i = 0 To dataCount - 1 SumValue = SumValue + data(i) Next i GetSum = SumValue End Function '平均値を求める Public Function GetAverage() As Double GetAverage = GetSum / CDbl(dataCount) End Function★分散★ ちょっと難しそうな言葉ですが、これもそのままの意味で、 点数の分布の散らばり度合いのことです。この分散が大きいほど、点数の 分布が広い範囲に散在し、ばらつき度が大きいということになります。 計算式での求め方は、
分散 = (データを2乗した値の総和 - (データの総和の2乗 / データ数)) / データ数
です。
'配列のデータを2乗した値の総和を求める Public Function GetSumSpa() As Double Dim SumSpaValue As Double Dim i As Integer SumSpaValue = 0# For i = 0 To dataCount - 1 SumSpaValue = SumSpaValue + data(i) ^ 2# Next i GetSumSpa = SumSpaValue End Function '分散を求める Public Function GetBunsan() As Double GetBunsan = (GetSumSpa - (GetSum ^ 2#) / _ CDbl(dataCount)) / CDbl(dataCount) End Function★標準偏差★ これは、分散の平方根の正の数です。
'標準偏差を求める Public Function GetStandard() As Double GetStandard = Sqr(GetBunsan) End Function★偏差と偏差値★ 偏差とは、ある数値の集合がありその集合の基準となる値から どれだけずれているかを表した値です。Aさんの点数が80点で、平均点が 55点だったら、偏差は25点になります。 一方偏差値とは、集合の平均からのズレの度合いのことで、集合の分布が 正規分布に従っているとみなした上での値です。つまり正規に分布して いなければ、当てにならない値ともいえます。計算式は次の通りです。
偏差 = ある値 - 平均値
偏差値 = (偏差 / 標準偏差) * 10 + 50
'偏差値を求め、それをリストボックスに表示する Public Function GetHensaValue() As Double Dim i As Integer ListData.Clear If GetStandard = 0# Then Exit Function For i = 0 To dataCount - 1 ListData.AddItem CStr(Format(((data(i) - GetAverage) / _ GetStandard) * 10# + 50#, "#0.00")) _ & " (" & CStr(data(i)) & ")" Next i End Function
★もし自分が?点だったら偏差値は?★ これより下に示すものは、サンプルにおまけ機能として含まれています。 また、『もし?点だったら偏差値は・・・』でも 気軽に計算できます。
テストの成績表に大抵の場合、偏差値は表示されて いますが、標準偏差は表示されていないようです。もし、自分が?点だったら 偏差値はどれぐらいかなぁ、って知りたい時、標準偏差が分かっていれば その偏差値は上のやり方で簡単に求めることができます。しかし、標準偏差が わからないならば、自分の点数と偏差値から逆算して標準偏差を求め、 その値と仮想的な点をもとに、その偏差値を求めなければなりません。 そこで、その計算を行うプログラムを下に示しました。よろしければ、 ご参考にして下さい。 (このコードでは補正を行っています。ここでいう補正とは、自分の点数を 仮想的な点数にした場合に生じる平均点等のズレの修正のことです。つまり、 その仮想的な点数をもとに平均値や標準偏差を求め直しています。)上記にも記してありますが、この方法では偏差値が50に近い値の場合、 計算できません。
'=========================================================== 'GetIfHensa もし?点だったら偏差値はいくらになるのかな '---------引数---------------------------------------------- 'ifmyData もし?点 'myData 実際の点数 'myHensaValue 実際の偏差値 'myAverage 実際の平均点 'myDataCount 人数(データ数) '---------戻り値-------------------------------------------- '仮想的な偏差値を返すが、得られなかった時は0.0を返す '実際の偏差値が、50に近い場合は、計算不可能 '=========================================================== Public Function GetIfHensa(ifmyData As Double, myData _ As Double, myHensaValue As Double, myAverage _ As Double, myDataCount As Double) As Double '実際と仮想的な分散 Dim myBunsan As Double, rBunsan As Double '実際と仮想的な標準偏差 Dim myStandard As Double, rStandard As Double '実際と仮想的な2乗和 Dim mySumSpa As Double, rSumSpa As Double '実際と仮想的な総和 Dim mySum As Double, rSum As Double '仮想的な平均値 Dim rAverage As Double 'オーバーフロー及び0除算対策 If myHensaValue >= 49.8 And myHensaValue <= 50.2 Then MsgBox "計算不可能です" IfHensa = 0# Exit Function End If '実際の標準偏差、分散、総和、2乗和を求める myStandard = (10# * (myData - myAverage)) / _ (myHensaValue - 50#) myBunsan = myStandard ^ 2# mySum = myAverage * myDataCount mySumSpa = myBunsan * myDataCount + (mySum ^ 2#) / _ myDataCount '仮想的な平均値、総和、2乗和、分散、標準偏差を求める rAverage = (myAverage * myDataCount - myData + ifmyData) / _ myDataCount rSum = rAverage * myDataCount rSumSpa = mySumSpa - myData ^ 2# + ifmyData ^ 2# rBunsan = (rSumSpa - (rSum ^ 2#) / myDataCount) / _ myDataCount rStandard = Sqr(rBunsan) GetIfHensa = ((ifmyData - rAverage) / rStandard) * _ 10# + 50# End Function
(サンプルプログラムの動作確認)
機種 PC-9821V13S OS Windows95 開発ツール Visual Basic Ver.4.0(ソース)
Visual Basic Ver.6.0(実行ファイル)更新日 00/5/10 ソースファイル souHensa.lzh(5.52KB)
実 行 ファイル exeHensa.lzh(10.6KB)
Visual Basic Ver.5.0,Ver.6.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。
★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。
(参考書)
『Visual Basic4.0 活用研究』
著者:川田徹
出版元:工学者
『Basic によるプログラミング工学』
著者:藤崎紘久、吉川博史、太田充
出版元:産業図書