> 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=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
> sum(y) [1] -1.776357e-15
この表示は、-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で割ってください。
問題1 データが 1,2,3,4,5,6 の時の分散、標準偏差を求めてください。nでわったときと(n-1)で割ったときの両方の値を出してください。
問題2 さいころを1万回振るシュミレーションを行い、分散を求めてください。var を使ってよいです。
実は、問題1のnで割ったほうの分散が、サイコロを振ったときの分散の理論値になります。問題2と一致していますか?
0 件のコメント:
コメントを投稿