2016年12月22日木曜日

分散と標準偏差 var sd

次のサンプルデータを使います。
> x=sample(1:6,10,T)
> x
 [1] 6 4 5 4 4 4 5 3 2 5
平均を出してみます。
> sum(x)/length(x)
[1] 4.2
> mean(x)
[1] 4.2
各値から平均を引いたものを偏差といいます。次のyです。 > y=x-mean(x) > y [1] 1.8 -0.2 0.8 -0.2 -0.2 -0.2 0.8 -1.2 -2.2 0.8
> y=x-mean(x)
> y
 [1]  1.8 -0.2  0.8 -0.2 -0.2 -0.2  0.8 -1.2 -2.2  0.8
データが平均からどれくらい離れているかを数量化したいとします。偏差を合計すると当然0になります。
> sum(y)
[1] -1.776357e-15
あれ、0になりませんね。
この表示は、-1.776357かける10の-15乗であるといっています。これは0に大変近い数です。yの値はコンピュータの中では正確に表現できないので、合計すると誤差が積算してしまうのです。こういう現象があることは知っておきましょう。実際には0です。 これは平均より大きければプラス、小さければマイナスとなり、合計すると相殺してしまうからです。
これではどれくらい離れているかわかりません。 なので、これらをすべて2乗して正の数にしてから合計します。
> sum(y^2)
[1] 11.6
一つのデータあたりにするために平均します。
> mean(y^2)
[1] 1.16
この値を分散といいます。要約していえば、分散とは 偏差平方の平均 です。

分散を求める関数は var です。
> var(x)
[1] 1.288889
あれ、値が違いますね。
実はRの分散はデータの数をnとすると、(n-1)で割っているのです。今の例ではデータの数は10個ですから偏差平方和を9で割っているということです。
> sum(y^2)/9
[1] 1.288889
同じになりましたね。

平均といいながら(n-1)で割るとは何事かと、思うでしょう。実はexcelでの分散varも同じことをやっています。その理由はここでは述べられません。これから、勉強していけば、いつかわかります。大学へ行ってからかな?

分散は、散らばり具合を表す数として、非常に重要なものです。

分散は偏差平方の平均でした。従ってこれをルートしたものが偏差の代表と考えてよいでしょう。これを標準偏差といいます。
標準偏差を求める関数は sd です。standard deviation の略です。
> sd(x)
[1] 1.135292
> sqrt(var(x))
[1] 1.135292
nでわるか、(n-1)で割るかという問題はsdにもあります。
なお、高校で分散・標準偏差の計算をしろと言われたら、nで割ってください。

問題1 データが 1,2,3,4,5,6 の時の分散、標準偏差を求めてください。nでわったときと(n-1)で割ったときの両方の値を出してください。

問題2 さいころを1万回振るシュミレーションを行い、分散を求めてください。var を使ってよいです。

実は、問題1のnで割ったほうの分散が、サイコロを振ったときの分散の理論値になります。問題2と一致していますか?

0 件のコメント:

コメントを投稿