はじめに
こんにちは!ひらちんです!Rを使った統計について自分の勉強も兼ねて記事にしています。
今回は、分散と標準偏差の計算についてです!
分散
統計では超重要な指標の分散(不偏分散)は、 var関数 で計算出来ます。
分散は、データのばらつきを表す指標で、値(x)から平均xの平均(xバー)を引いたものを2乗して足し合わせたもの(偏差平方和)をデータ数で割ったものになります。
ですが、分散には計算方法が2種類あって、母集団すべてのデータを対象としている場合(母分散という)は、単純にそのデータ数(n)で割れば良いのですが、標本(サンプル)から母集団の分散の推定値を計算する場合は、「データ数-1」で割る不偏分散を利用します。
※ややこしい話ですが、サンプルだけどサンプル全体の分散を計算している場合はデータ数(n)で割って、標本分散を計算している場合もあります。
Rの var関数では不偏分散を計算することになります。
つまり、偏差平方和をn-1で割ってるぞってことです。
【偏差平方和】
【母分散】
【不偏分散】
数式で言うとこんな感じですね。
記号は、「σ^2」が母分散、「s^2」が不偏分散としていますが、本やサイトによっては「s^2」が標本分散、「u^2」が不偏分散となっている場合もありますので、きちんと文脈でどちらなのか確認したほうが良いと思います(^o^)
ちなみにExcelだと、それぞれの関数が用意されていますね。
母分散(nで割ってる) =VAR.P(データの範囲)
不偏分散(n-1で割ってる) =VAR.S(データの範囲)
サンプルで計算する
もう少し具体的にデータを使って確認しましょう!
例えば、こんなデータがあったとします。
名前 | 身長 |
---|---|
Aさん | 171cm |
Bさん | 177cm |
Cさん | 169cm |
Dさん | 165cm |
Eさん | 172cm |
Fさん | 174cm |
Gさん | 188cm |
Hさん | 190cm |
Iさん | 175cm |
Jさん | 169cm |
まずは、これを母集団全体とみなして母分散を計算します。
平均(xバー) = (171+177+169+165+172+174+188+190+175+169)/10 = 175
データ数は10なので10で割ります。
偏差平方和 = (171-175)^2 + (177-175)^2 + (169-175)^2 + (165-175)^2 + (172-175)^2 + (174-175)^2 + (188-175)^2 + (190-175)^2 + (175-175)^2 + (169-175)^2 = 596
母分散は、偏差平方和をデータ数で割ります。
母分散 = 596 ÷ 10 = 59.6
こうなりますね。
次に、母集団から抽出したサンプルとみなして、母集団の分散の推定値の不偏分散を計算します。
不偏分散は、偏差平方和をデータ数-1で割ります。
不偏分散 = 596 ÷ (10-1) = 66.222
こうなります。
Rでの不偏分散の計算 var関数
では、先程のデータをRで計算してみましょう!
Rで不偏分散を計算するには、 var関数を使うんでしたね。
先程のサンプルと同じデータのベクトルを作ります。
x <- c(171, 177, 169, 165, 172, 174, 188, 190, 175, 169)
こいつを、 var関数の引数に入れるだけ
var(x)
さっき計算したのと同じになりましたね(^o^)
標準偏差
分散は、値xからxの平均(xバー)を引いたものを2乗して足し合わせていましたね。
2乗しちゃってるので、感覚値がつかみにくいですよね?
例えば、身長だと通常cmが単位ですが、分散になるとcm^2が単位となります。
標準偏差は、この単位を元に戻して上げた指標になります。
つまり、分散の平方根を取ってるだけです。
Rでの標準偏差は、 sd関数を使って計算出来ます。
もちろん、 var関数で出した分散の平方根を計算する方法でも計算出来ます。
Rで平方根を計算するのは、 sqrt関数です。
つまり、
sqrt(var(データのベクトル))
sd(データのベクトル)
2通りで計算出来ます。
では、先程のサンプルデータで計算してみましょう!
名前 | 身長 |
---|---|
Aさん | 171cm |
Bさん | 177cm |
Cさん | 169cm |
Dさん | 165cm |
Eさん | 172cm |
Fさん | 174cm |
Gさん | 188cm |
Hさん | 190cm |
Iさん | 175cm |
Jさん | 169cm |
データのベクトルはこれでしたね
x <- c(171, 177, 169, 165, 172, 174, 188, 190, 175, 169)
こいつを、 var関数を挟んで計算すると
sqrt(var(x))
直接標準偏差を計算する、 sd関数に入れると
sd(x)
となりますね。
では、実行してみます。
同じ結果になりました(^o^)
まとめ
今回は、Rで分散と標準偏差について勉強しました!
引き続き頑張ります!
コメント