Rで確率・統計の基礎1 〜 母集団と標本
乱数を生成してヒストグラムを描き、その上に平均値を縦線で描く。
ほぼ教科書通り。
> set.seed(100) > X <- rnorm(1000000, mean = 2.33, sd = 0.5) > mu <- mean(X) > sd <- sd(X) > hist(X, breaks=100) > abline(v=mu, lwd =3, lty =1)
set.seed(引数)をrnorm実行前に実行すると、引数に応じて常に同じ乱数が生成される。
> set.seed(100) > head(rnorm(1000000, mean = 2.33, sd = 0.5)) [1] 2.078904 2.395766 2.290541 2.773392 2.388486 2.489315 > set.seed(100) > head(rnorm(1000000, mean = 2.33, sd = 0.5)) [1] 2.078904 2.395766 2.290541 2.773392 2.388486 2.489315
set.seed(引数)を指定しなければ、異なる乱数が生成される。
> head(rnorm(1000000, mean = 2.33, sd = 0.5)) [1] 2.010425 2.582251 1.597672 2.004597 2.657098 2.221097 > head(rnorm(1000000, mean = 2.33, sd = 0.5)) [1] 1.644282 2.711422 1.708373 1.788988 2.312153 1.150383 > head(rnorm(1000000, mean = 2.33, sd = 0.5)) [1] 1.807482 2.033927 2.362752 3.032890 2.330804 2.036980
次に、Xから大きさが5,10,50のベクトルをサンプリング(Xから指定した数のデータを任意に取得。無作為抽出。)して作成する。
「replace=TRUE」とすることで、復元中出を行う。つまり、「1つの個体を選んだ後にその個体を母集団の中に戻す」という選び方を行う。
> sample5 <- sample(X, 5, replace=TRUE) > head(sample5) [1] 2.497921 2.635927 2.291848 2.127974 2.268268 > sample10 <- sample(X, 10, replace=TRUE) > head(sample10) [1] 2.064451 2.274464 2.468938 1.800007 2.557669 2.535241 > sample50 <- sample(X, 50, replace=TRUE) > head(sample50) [1] 2.581844 2.138331 3.003670 1.864148 2.049141 2.808971
さて、これらのサンプリングをサンプル数を増やしながら行い、その平均をリストにしてみる。それをサンプル数を横軸に、平均を縦軸にしたグラフを描く。
これによって、サンプル数が大きいと平均が母集団の平均へ近づくことを確認してみる。
# サンプル数を増やしながら平均を計算 > for(i in 1:70000){ + meanList[i]<-mean(sample(X, i, replace =TRUE)) + } > plot(meanList, typ="l") #グラフを描く > abline(h=2.33, col="red") #母集団の平均を水平線で追記