R 生成成对随机变量之间具有给定相关性的随机变量:

R 生成成对随机变量之间具有给定相关性的随机变量:,r,statistics,simulation,genetics,R,Statistics,Simulation,Genetics,我想生成两个连续的随机变量Q1,Q2(数量性状,每个都是正常的)和两个二元随机变量Z1,Z2(二元性状),它们之间的所有可能配对都具有给定的成对相关性。 说 请帮助我在R中生成此类数据。这是粗糙的,但可能会让您朝着正确的方向开始 library(copula) options(digits=3) probs <- c(0.5,0.5) corrs <- c(0.23,0.55,0.45,0.4,0.5,0.47) ## lower triangle 库(copula) 选项(数

我想生成两个连续的随机变量
Q1
Q2
(数量性状,每个都是正常的)和两个二元随机变量
Z1
Z2
(二元性状),它们之间的所有可能配对都具有给定的成对相关性。 说


请帮助我在R中生成此类数据。

这是粗糙的,但可能会让您朝着正确的方向开始

library(copula)

options(digits=3)
probs <- c(0.5,0.5)
corrs <- c(0.23,0.55,0.45,0.4,0.5,0.47)  ## lower triangle
库(copula)
选项(数字=3)

问题是为什么这会增加选票?1) 缺乏关键信息;2) 模糊的;3) 没有付出任何努力;4) “请为我做点什么。”5)对我叹息(1)和(2)似乎不是真的,但(3)和(4)是真的。我不知道有什么简单的方法可以做到这一点,但它看起来确实很合适。大概是因为人们对答案感兴趣而增加选票。你可以很容易地独立于定性特征的平均值来指定相关性(例如,使其多变量正态),但你可能必须说明二元随机变量的平均概率。如果op不想要mvn怎么办?你不认为这是关键信息吗?事实上,我不知道该怎么做,所以我没有表现出任何努力。我可以生成相关的正态变量和相关的伯努利变量,但这一个是我力所不及的。此外,如果有人帮助我编写代码,或者建议一些可能的方法,我将不胜感激。
library(copula)

options(digits=3)
probs <- c(0.5,0.5)
corrs <- c(0.23,0.55,0.45,0.4,0.5,0.47)  ## lower triangle
sim <- function(n,probs,corrs) {
    tmp <- normalCopula( corrs, dim=4 , "un")
    getSigma(tmp) ## test
    x <- rCopula(1000, tmp)
    x2 <- x
    x2[,3:4] <- qbinom(x[,3:4],size=1,prob=rep(probs,each=nrow(x)))
    x2
}
objfun <- function(corrs,targetcorrs,probs,n=1000) {
    cc <- try(cor(sim(n,probs,corrs)),silent=TRUE)
    if (is(cc,"try-error")) return(NA)
    sum((cc[lower.tri(cc)]-targetcorrs)^2)
}
cc0 <- cor(sim(1000,probs=probs,corrs=corrs))
cc0[lower.tri(cc0)]
corrs
objfun(corrs,corrs,probs=probs) ## 0.112
opt1 <- optim(fn=objfun,
              par=corrs,
              targetcorrs=corrs,probs=c(0.5,0.5))
opt1$value     ## 0.0208
cc1 <- cor(sim(1000,probs=c(0.5,0.5),corrs=opt1$par))
cc1[lower.tri(cc1)]
corrs
opt2 <- optim(fn=objfun,
              par=corrs,
              targetcorrs=corrs,probs=c(0.5,0.5),
              method="SANN")