特定の相関係数を持つ二変量データの生成 Last modified: Aug 28, 2004
目的
特定の相関係数を持つ二変量データを生成する
(多変量データの場合は別のプログラムを使う)
使用法
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
直前のページへ戻る
E-mail to Shigenobu AOKI