楼主: luija
2409 2

[问答] 请问如何生成三组correlation不等於零的uniform random variable [推广有奖]

  • 0关注
  • 0粉丝

高中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
24 个
通用积分
5.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1082 点
帖子
7
精华
0
在线时间
65 小时
注册时间
2010-9-23
最后登录
2019-10-23

楼主
luija 发表于 2011-11-2 12:51:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位好:

请问如何生成三组uniform random variable (x, Y, Z)且Corr(X,Y)不等於零,Corr(X,Z)不等於零,Corr(Y,Z)不等於零?谢谢

下面为生成两组correlation不等於零的uniform random variable。
This can be implemented by the following code:  n  <- 100  p  <- 0.6            # (say)  X  <- runif(n)-1/2  Z  <- runif(n)-1/2  U  <- rbinom(n,1,p)  # =1 where Y=X, = 0 when Y independent of X  Y  <- X*U + Z*(1-U)  XY <- cbind(X,Y)     # your n by 2 matrix of bivariate (X,Y)Now the marginal distributions of X and Y are both uniform.var(X) = 1/12 and var(Y) = 1/12. Since the means are 0,cov(X,Y) = Exp(X*Y) = p*Exp(X^2) = p/12cor(X,Y) = cov(X,Y)/sqrt(var(X)*var(Y)) = (p/12)/(1/12) = p.So all you need to do to get a desired correlation rho betweenX and Y is to set p = rho.



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:correlation Variable relation Uniform random following 如何

沙发
epoh 发表于 2011-11-2 19:13:00
# generate normals, check correlations
X <- array(rnorm(9000), dim = c(3000, 3))
cor(X)
# desired correlation
M <- c(1.0, 0.9, 0.6, 0.9, 1.0, 0.3, 0.6, 0.3, 1.0)
dim(M) <- c(3,3)
M
#     [,1] [,2] [,3]
#[1,]  1.0  0.9  0.6
#[2,]  0.9  1.0  0.3
#[3,]  0.6  0.3  1.0
# adjust correlations for uniforms
for (i in 1:3){
    for (j in 1:3){
        if (i != j){
            M[i, j] <- 2 * sin(pi * M[i, j] / 6)
            M[j, i] <- 2 * sin(pi * M[j, i] / 6)
        }
    }
}
# induce correlation, check correlations
C <- chol(M)
Y <- X %*% C
cor(Y)
# create uniforms, check correlations
Y <- pnorm(Y)
cor(Y)
x=Y[,1]
y=Y[,2]
z=Y[,3]
cor(x,y)    #0.9102382
cor(y,z)    #0.3213543
cor(x,z)    #0.6197905
# plot results (marginals)
par(mfrow = c(1,3))
hist(x, main = paste("x"), xlab = "")
hist(y, main = paste("y"), xlab = "")
hist(z, main = paste("z"), xlab = "")
   hist.jpeg


已有 1 人评分经验 收起 理由
ltx5151 + 20 热心帮助其他会员

总评分: 经验 + 20   查看全部评分

藤椅
luija 发表于 2011-11-2 22:17:13
epoh 发表于 2011-11-2 19:13
# generate normals, check correlations
X
很详细,谢谢。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 06:21