No.10590 Re: 相関を持つランダムウオークの素? 【青木繁伸】 2009/08/05(Wed) 13:47
要するに,わずかの誤差が加わっているだけですね。
総和は変化しますが,その期待値は0になると思いますよ。総和は0ではないが,期待値は0。
それで良いのなら,jitter(gendat2(n, r), amount=b) で同じような結果になるでしょう。b によって,誤差の大きさを制御できます。> b <- jitter(gendat2(1000, 0.5), amount=0.5)あるいは,母集団からのサンプリングによるサンプリング誤差を利用して総和が0にならないようにということなら,gendat2 を使って多めにデータを生成し,そこから必要なだけサンプリングするというやり方もありますね。
> colMeans(b)
[1] 0.007336982 -0.002774689
> colSums(b)
[1] 7.336982 -2.774689
> sd(b)
[1] 1.037291 1.047597
> cor(b[,1], b[,2])
[1] 0.4493309> b <- gendat2(2000, 0.5)なお,rnorm2d は,MASS ライブラリの mvrnorm 関数で,empirical=FALSE を指定する(デフォルト)のと同じになるでしょう。
> b <- b[sample(2000, 1000),] # 2000個発生させた内から1000個を抽出
> colMeans(b)
[1] 0.008418455 0.031340145
> sd(b)
[1] 1.010507 1.008196
> colSums(b)
[1] 8.418455 31.340145
> cor(b[,1], b[,2])
[1] 0.4848518> library(MASS)なお,empirical=TRUE とすれば,指定した平均値,標準偏差(相関係数)を持つ乱数列を返し,その場合は gendat2 と同じ性質を持つことになります。
> b <- mvrnorm(1000, mu=c(0,0), Sigma=matrix(c(1,0.5,0.5,1),2), empirical=FALSE)
> colMeans(b)
[1] 0.01817952 0.02084953
> sd(b)
[1] 0.9988818 1.0019586
> colSums(b)
[1] 18.17952 20.84953
> cor(b[,1], b[,2])
[1] 0.5293974> b <- mvrnorm(1000, mu=c(0,0), Sigma=matrix(c(1,0.5,0.5,1),2), empirical=TRUE)
> colMeans(b)
[1] -9.742207e-18 -2.105607e-17
> sd(b)
[1] 1 1
> colSums(b)
[1] -9.742207e-15 -2.105607e-14
> cor(b[,1], b[,2])
[1] 0.5
● 「統計学関連なんでもあり」の過去ログ--- 042 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る