相関係数を指定した乱数を作る

相関係数のデモをirisデータで作っていてうまくいかず、サンプルデータを作成した時の副産物。

今回は数学と科学のテスト点のサンプルデータを作った。 使用するのはrmvnormであって多次元正規分布を作成する機能である。パッケージは不要であるmvtnormパッケージを使用する。

library(mvtnorm)
set.seed(1234) # 乱数シードの固定
N <-1000 # サンプルサイズの指定
Sigma = matrix(c(1,0.54,0.54,1), byrow=TRUE, ncol=2) # c()の中に相関係数を入れる。
mu <- c(45, 65) # 平均値
d1 <- data.frame(rmvnorm(n=N, mean=mu, sigma=Sigma)) # 乱数の作成
d2 <- round(d1) # まるめ(四捨五入で整数値に)
colnames(d2) <- c("Math","Science") # 列名を挿入

どのようなデータができたか見てみよう。

> head(d2)
  Math Science
1   44      65
2   45      63
3   46      66
4   44      64
5   44      64
6   44      64

> summary(d2)
      Math          Science     
 Min.   :42.00   Min.   :62.00  
 1st Qu.:44.00   1st Qu.:64.00  
 Median :45.00   Median :65.00  
 Mean   :44.97   Mean   :64.88  
 3rd Qu.:46.00   3rd Qu.:66.00  
 Max.   :47.00   Max.   :68.00  

相関係数を確認してみよう。

> cor(d2)
            Math  Science
Math    1.000000 0.547566
Science 0.547566 1.000000

指定通りの相関係数で乱数が作成されている。

検索していたら、太郎丸先生のrmvnormのエントリを発見した。