特定の相関係数を持つ二変量データの生成     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

Made with Macintosh