在 R 中生成相关 β 分布值

问题描述 投票:0回答:1

我在 R 中编写了以下代码,目的是生成遵循 beta 分布的相关随机变量

#objective is to generated correlated 
#beta distributed data 

library(MASS)
library(faux)

generate.beta.parameters <- function(x, v) {
  alpha = ((1 - x) / v - 1/ x) * x^2
  beta = alpha * (1 / x - 1)
  return (c(alpha, beta))
}

x1 <- 0.896 
v1 <- 0.001 
x2 <- 0.206 
v2 <- 0.004

b1 <- generate.beta.parameters(x1, v1)
b2 <- generate.beta.parameters(x2, v2)

alpha1 <- b1[1]
beta1 <- b1[2]
alpha2 <- b2[1]
beta2 <- b2[2]


#create mean vector 
mu = c(0, 0)

#create variance covariance matrix 
sigma <- rbind(c(1, 0.2), c(0.2, 1))

#generate 1000 random numbers 
df <- mvrnorm(n = 1000, mu = mu, Sigma = sigma)

df.beta <- matrix(nrow = nrow(df), ncol = ncol(df))
#normal to uniform 
df.beta[,1] = norm2beta(df[,1], alpha1, beta1)
df.beta[,2] = norm2beta(df[,2], alpha2, beta2)

df.beta <- as.data.frame(df.beta)
cor(df.beta)

但是,运行此代码时,相关输出与预期不同。这是我机器上的输出:

          V1        V2
V1 1.0000000 0.1549214
V2 0.1549214 1.0000000

你能解释一下吗?

我确实有这个链接,其中已生成随机数,但它是在不同的软件中,即 SAS。

r statistics distribution beta-distribution
1个回答
0
投票

你有两个问题。首先,这是一个随机样本,因此您不会期望相关性完全等于指定值。让我们尝试运行 500 个样本,看看我们得到什么相关性分布:

testcor <- function(rho = 0.2, n = 1000, seed = NULL) {
    if (!is.null(seed)) set.seed(seed)
    sigma <- rbind(c(1, rho), c(rho, 1))
    df <- mvrnorm(n = n, mu = mu, Sigma = sigma)
    df.beta <- matrix(nrow = nrow(df), ncol = ncol(df))
    df.beta[,1] = norm2beta(df[,1], alpha1, beta1)
    df.beta[,2] = norm2beta(df[,2], alpha2, beta2)
    cor(df.beta)[1,2]
}
set.seed(101)
corvec <- replicate(500, testcor())
par(las = 1)
hist(corvec, breaks = 50, main ="")
abline(v = 0.2, col = 2, lwd = 2)

您得到的值 0.155 接近该分布的下端,但不是极端。总体而言,相关性可能偏低(平均值为 0.196),但看起来还不错。如果出于某种原因您需要模拟相关性为 exactly 0.2,这将更具挑战性 - 您可以在 empirical=TRUE 中设置

mvrnorm
以获得与指定值完全匹配的均值和方差,但这会导致我们第二个问题。

通过非线性变换输入多元正态将会改变相关性 - 在这种情况下不会改变太多(因为相关性的分布仍然以接近 0.2 为中心),但会改变一些。这是一个数学问题,而不是一个编程问题。您基本上重新实现了
高斯关联模型

;您可以在链接的示例中看到相关性与原始多元正态分布的相关性不同。 Minhajuddin 等人 2004 年(第 3 节)描述了一种模拟具有 Beta 边缘分布和

指定

相关性的二元分布的方法,但它比您在此尝试的方法更具挑战性。 处理这个问题的快速而肮脏的方法是调整 MVN 的相关参数,以获得转换后的双变量 Beta 的所需相关性......

Minhajuddin、Abu T. M.、Ian R. Harris 和 William R. Schucany。 2004。“模拟具有特定相关性的多元分布。”统计计算与模拟杂志 74 (8): 599–607。
https://doi.org/10.1080/00949650310001626161

.

© www.soinside.com 2019 - 2024. All rights reserved.