データ

R組み込みのirisデータを用いる.そのうちSepal.Length変数を使う.

data<-iris$Sepal.Length
head(data)
## [1] 5.1 4.9 4.7 4.6 5.0 5.4
## ヒストグラム
hist(data, col = "skyblue")

## 平均と標準偏差
mean(data)
## [1] 5.843333
sd(data)
## [1] 0.8280661

ランダム・サンプリング

dataからnケース分ランダム・サンプリングする.

n<-10
sdata<-sample(data,n)

hist(sdata, col = "skyblue")

mean(sdata)
## [1] 6.03
sd(sdata)
## [1] 0.5638164

dataから10ケース分ランダム・サンプリングをr回繰り返す.

r<-10000
rsdata<-replicate(r,mean(sample(data,n)))

そのデータのヒストグラムは・・・

hist(rsdata, freq = FALSE, col = "skyblue")
lines(density(rsdata), col = "red", lwd = 2)

そのデータの平均と標準偏差は・・・

mean(rsdata)
## [1] 5.844389
sd(rsdata)
## [1] 0.2527007

ランダム・サンプリングの繰り返しデータの平均は元データの平均をよく近似しているようだ.

ところで,ランダム・サンプリングの繰り返しデータから,元データの標準偏差を推定する場合は以下の公式を使う.

sd(rsdata)*sqrt(n)*sqrt((length(data)-1)/(length(data)-n))
## [1] 0.8243953

バイアスのあるサンプリングの場合

データ上の位置によって,サンプリングされやすさが異なるケースを考える.

bias<-seq(length(data),1,-1)
plot(bias)

dataからnケース分サンプリングする.

n<-10
biased_sdata<-sample(sort(data),n,prob=bias)

hist(biased_sdata, col = "skyblue")

mean(biased_sdata)
## [1] 5
sd(biased_sdata)
## [1] 0.3231787

dataから10ケース分ランダム・サンプリングをr回繰り返す.

r<-1000
biased_rsdata<-replicate(r,mean(sample(sort(data),n,prob=bias)))

そのデータのヒストグラムは・・・

hist(biased_rsdata, freq = FALSE, col = "skyblue")
lines(density(biased_rsdata), col = "blue", lwd = 2)

そのデータの平均と標準偏差は・・・

mean(biased_rsdata)
## [1] 5.38693
sd(biased_rsdata)
## [1] 0.1926115

元のデータの平均とずれがあるようだ.

最後にランダム・サンプリング(赤)とバイアスのあるサンプリング(青)の平均の分布を比較してみる.

hist(biased_rsdata, freq = FALSE,
     col = "#0000ff40", border = "#0000ff",
     breaks = 20,xlim = c(min(data), max(data)),main = "")
hist(rsdata, freq = FALSE,
     col = "#ff00ff40", border = "#ff00ff",
     breaks = 20,xlim = c(min(data), max(data)),add=TRUE)
lines(density(biased_rsdata), col = "blue", lwd = 2)
lines(density(rsdata), col = "red", lwd = 2)