無相関検定のシミュレーション

2種類のデータの間に相関が無いとき、標本相関係数rを使って定義した
\[ t = \sqrt(n-2)\frac{r}{\sqrt{1-r^{2}}}\]
は自由度n-2のt分布に従うことが、理論的にわかります。各データが母集団から無作為抽出されたとき、正規分布に従って標本が抽出されるとすれば、この量がt分布に近づくことをR言語を使って次のように確かめます。

#test_cor.R
size <- 20000
sample_size <- 20
mu1 <- 50
sigma1 <- 10
mu2 <- 30
sigma2 <- 20
ts <- numeric(length=size)
for(i in 1:size) {
  sample_x <- rnorm(n=sample_size, mean=mu1, sd=sigma1)
  sample_y <- rnorm(n=sample_size, mean=mu2, sd=sigma2)
  xbar <- mean(sample_x)
  ybar <- mean(sample_y)
  sxy <- mean((sample_x - xbar)*(sample_y - ybar))/sample_size
  sxx <- mean((sample_x - xbar)^2)/sample_size
  syy <- mean((sample_y - ybar)^2)/sample_size
  r <- sxy/sqrt(sxx*syy)
  ts[i] <- sqrt(n-2)*r/sqrt(1-r^2)
}

Rのコンソールから次のようにして、図を書き出します。

> png("test_cor.png")
> hist(ts, freq=FALSE)
> curve(dt(x, 18), add=TRUE)
> dev.off()

f:id:nabeyang:20130328090339p:plain