tetsunosukeのnotebook

tetsunosukeのメモです

RのpnormとExcelのNORMDISTとz検定

ExcelのNORMDISTは、NORMDIST(値, 平均, 標準偏差)のように使うことで、ある値(x)が正規分布(平均, 標準偏差)(これをP(μ, σ)と表す)で表される確率密度関数において、マイナス無限大からのxの定積分値を求めることができる。

つまり、xが平均値μに等しい時は、標準偏差の値に関わらず、NORMDISTの値は50%つまり0.5を返す。(ちょうど半分のところの値なので)
また、値と平均を固定すると、標準偏差が大きい分布のほうが、NORMDISTの値は50%から遠ざかる。

たとえば、A=10,20,30,40,50というデータと、B=20,30,40というデータ(ともに平均は30)に対し、分散が大きいのはAとなる(=つまり標準偏差もBが大きい)。同じ値20に対し、NORMDISTを求めると、それぞれ、Aは0.484, Bは0.46となり、Bのほうが、小さい(平均値より小さい場合、NORMDISTの値が小さいほうが、平均より「離れている」とみなせる)


Rでこのことを調べるには、pnormを用います。

// NORMDISTと値が違う理由がわからない...
> data = c(10,20,30,40,50)
> pnorm(30, mean(data), sd(data))
[1] 0.5
> pnorm(20, mean(data), sd(data))
[1] 0.2635446

> data2 = c(20,30,40)
> pnorm(30, mean(data2), sd(data2))
[1] 0.5
> pnorm(20, mean(data2), sd(data2))
[1] 0.1586553

平均(mean()) と、調べる値が等しい時は、確率50%を得ることができますし、sd()と等しい場合はおよそ84%を得ることができます。(代表的な確率密度)

これを用いて、2つの母集団を検定してみます。(z検定)

50個のデータが含まれる母集団Aにおいて、
平均と分散が以下のような値であったとします。

> a
 [1] 9.97 8.27 8.99 9.24 7.87 9.85 8.80 8.31 8.27 9.57 9.38 8.19 8.42 7.85
(略)
> mean(a)
[1] 8.6768
> sd(a)
[1] 0.5490676

この値に対して、集団Bが、Aと比較してどうか?を調べる場合、

> b
 [1] 8.54 8.66 7.81 8.12 7.94 8.99 8.08 8.67 7.87 8.18

この値に対し、
標準誤差SE=σ(母集団の標準偏差)/sqrt(n(標本サイズ)) を用いて、zスコア=(x(標本平均)-μ(母集団平均))/SEを求める。

zスコアは

> (mean(b) - mean(a)) / ( sd(a)/sqrt(length(b) )
[1] -2.250758

であるからこの値は平均から、標準偏差の2.25倍左側にある ことになります。

値は mean(a) - 2.25 * sd(a) であり、その確率は

> pnorm(mean(a) - 2.25 * sd(a), mean(a), sd(a))
[1] 0.01222447

(結果的に式はpnorm(mean(a) - abs(((mean(b) - mean(a)) / (sd(a)/sqrt(length(b)))) * sd(a), mean(a), sd(a))
。なんて複雑な。)

であり、5%以下であるから、z検定により、この標本は分散のわかっている母集団に対して平均が小さいと言えます。

最後にその様子をプロットします。

# Aの値の様子を正規分布として描画
plot( function(x) { dnorm(x, mean(a), sd(a)) }, min(a), max(a))
abline(x=mean(b))

f:id:kidd-number5:20120226183209j:image