我想生成一对具有一定相关性的随机数。但是,使用两个正态变量的线性组合的常用方法在这里无效,因为均匀变量的线性组合不再是均匀分布的变量。我需要两个变量要统一。
关于如何生成具有给定相关性的统一变量对的任何想法?
我想生成一对具有一定相关性的随机数。但是,使用两个正态变量的线性组合的常用方法在这里无效,因为均匀变量的线性组合不再是均匀分布的变量。我需要两个变量要统一。
关于如何生成具有给定相关性的统一变量对的任何想法?
Answers:
我不知道一种通用方法来生成具有任何给定边际分布的相关随机变量。因此,我将提出一种临时方法来生成具有给定(Pearson)相关性的均匀分布的随机变量对。不失一般性,假设我所需的边缘分布是均匀的标准(即,该载体是)。
所提出的方法依赖于以下情况:
a)对于标准统一的随机变量和ü 2与相应的分布函数˚F 1和˚F 2,我们有˚F 我(Ù 我)= ü 我,为我= 1 ,2。因此,通过定义Spearman的RHO是
ρ 小号(Û 1,ù
因此,Spearman的rho和Pearson的相关系数相等(但是样本版本可能不同)。
b)若是具有连续边缘和随机变量高斯连接函数与(皮尔逊)相关系数ρ,然后Spearman的RHO是 ρ 小号(X 1,X 2)= 6 这样可以轻松生成具有Spearman rho所需值的随机变量。
该方法是从高斯copula生成具有适当相关系数,以使Spearman的rho对应于均匀随机变量的所需相关性。
仿真算法
令表示所需的相关度,n表示要生成的对数。该算法是:
示例
以下代码是使用目标相关性和n = 500对的R使用此算法的示例。
## Initialization and parameters
set.seed(123)
r <- 0.6 # Target (Spearman) correlation
n <- 500 # Number of samples
## Functions
gen.gauss.cop <- function(r, n){
rho <- 2 * sin(r * pi/6) # Pearson correlation
P <- toeplitz(c(1, rho)) # Correlation matrix
d <- nrow(P) # Dimension
## Generate sample
U <- pnorm(matrix(rnorm(n*d), ncol = d) %*% chol(P))
return(U)
}
## Data generation and visualization
U <- gen.gauss.cop(r = r, n = n)
pairs(U, diag.panel = function(x){
h <- hist(x, plot = FALSE)
rect(head(h$breaks, -1), 0, tail(h$breaks, -1), h$counts/max(h$counts))})
在下面的图中,对角的图显示的变量直方图和ü 2,和非对角线图显示的散点图ù 1和ü 2。
通过构造,随机变量具有均匀的边距和相关系数(接近)。但是由于采样的影响,模拟数据的相关系数并不完全等于r。
cor(U)[1, 2]
# [1] 0.5337697
请注意,gen.gauss.cop
仅通过指定较大的相关矩阵,该函数即可使用两个以上的变量。
模拟研究
重复目标相关的以下的模拟研究表明相关系数收敛的分布为样品量的期望的相关性Ñ增加。
## Simulation
set.seed(921)
r <- 0.6 # Target correlation
n <- c(10, 50, 100, 500, 1000, 5000); names(n) <- n # Number of samples
S <- 1000 # Number of simulations
res <- sapply(n,
function(n, r, S){
replicate(S, cor(gen.gauss.cop(r, n))[1, 2])
},
r = r, S = S)
boxplot(res, xlab = "Sample size", ylab = "Correlation")
abline(h = r, col = "red")
gen.gauss.cop
函数将对两个以上的变量(具有微不足道的调整)起作用。如果您不喜欢该添加项或希望以不同的方式添加它,请根据需要还原或更改。
Here is one easy method for positive correlation: Let , where and are independent and is Bernoulli(). and will then have distributions with correlation . This extends immediately to -tuples of uniforms with compound symmetric variance matrix.
If you want pairs with negative correlation, use , and the correlation will be .