目的 特定の相関係数を持つ二変量データを生成する (多変量データの場合は別のプログラムを使う) 使用法 gendat(nc, r) 引数 nc 標本サイズ r 相関係数 ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/gendat2.R", encoding="euc-jp") # 特定の相関係数を持つ二変量データの生成 gendat2 <- function( nc, # サンプルサイズ r) # 相関係数 { z <- matrix(rnorm(2*nc), ncol=2) # 仮のデータ行列を作る。この時点では変数間の相関は近似的に0である。 r2 <- cor(z) # 変数間の相関係数を求める res <- eigen(r2) # 主成分分析を行い, coeff <- solve(r2) %*% t(sqrt(res$values)*t(res$vectors)) # 主成分得点係数を求める。 z <- scale(z) %*% coeff # 主成分得点を求める。この時点で変数間の相関は完全に0である。 return(z %*% chol(matrix(c(1, r, r, 1), ncol=2))) # コレスキー分解の結果をもとに,指定された相関係数行列 を持つように主成分得点を変換する。 } 使用例 > nc <- 20 > z <- gendat2(nc, 0.2658) > z [,1] [,2] [1,] -0.29677574 -0.17874248 # 生成されたデータ [2,] -0.03994234 1.47062767 [3,] -0.76276240 0.57242962 [4,] 0.88038219 0.04132454 [5,] -0.23950168 -0.23761819 [6,] -1.09467488 -1.36454634 [7,] -0.01504212 -1.29025903 [8,] 0.46215650 -1.58991517 [9,] -1.31900501 -1.68609157 [10,] -0.99673226 -0.34633348 [11,] 0.01336578 -1.30085339 [12,] 2.48250188 0.28717470 [13,] 1.06603399 1.09184598 [14,] 0.31106585 -0.45961113 [15,] 1.47707022 1.06536765 [16,] -1.99085382 0.95414866 [17,] 0.77245964 1.55773860 [18,] -0.26986776 0.51119869 [19,] -0.36660559 0.24639088 [20,] -0.07327244 0.65572380 > apply(z, 2, mean) # 平均値が 0 であることの確認 [1] -6.938894e-19 -1.332268e-16 > apply(z, 2, sd) # 標準偏差が 1 であることの確認 [1] 1 1 > cor(z) # 相関係数の確認 [,1] [,2] [1,] 1.0000 0.2658 [2,] 0.2658 1.0000