生成具有特定标准差的相关随机变量
Generate correlated random variables with specific standard deviations
我想生成 N
个随机变量,每个随机变量彼此之间具有固定的相关性 p
。
变量应该有 mean = 1
和 std = 5
N=10 #number of variables
mu <- rep(1,N) #means
p=0.7 #correlation
Sigma <- matrix(p,ncol=N,nrow=N) #variance covariance matrix
diag(Sigma) <- 5 #standard deviations
library(MASS)
set.seed(12)
data <- mvrnorm(10000,mu,Sigma)
然而,得到的标准偏差不是 5。
apply(data,2,sd)
[1] 2.264853 2.219811 2.224703 2.245595 2.216712 2.236484 2.240794 2.220532 2.227445
[10] 2.247943
有没有系统的方法可以在保持其他参数不变的情况下改变标准偏差?
您创建了一个矩阵 Sigma,其中对角线元素为 5,但 mvnorm 需要一个协方差矩阵(不是标准差矩阵)作为 Sigma。所以你需要让对角线元素等于 25。它也没有正确使用 p=0.7 的值,那些是相关性,而不是协方差。您需要将相关性转化为协方差。
参见:
https://math.stackexchange.com/questions/446093/generate-correlated-normal-random-variables
您的方差-协方差 (VCV) 矩阵不正确。对角线应该是方差,而不是标准差。如果你这样做
apply(data,2,var)
然后您会看到 方差 约为 5。如果您希望标准偏差为 5,则需要非对角线为 25。
此外,您正在将相关性输入到 VCV 矩阵的非对角线上,这些应该是协方差。要从 correlations to covariances 得到,您需要将相关性乘以相关的两个变量的标准差。在您的情况下,假设两个变量的标准差均为 5,则 VCV 中的协方差应为 p = 0.7 * 5 * 5
。所以你最终的 VCV 应该是
p <- 0.7 * 5 * 5
Sigma <- matrix(p,ncol=N,nrow=N)
diag(Sigma) <- 25
生成的 N 个随机变量的均值为 1,协方差 p,相关性 p/25.
我想生成 N
个随机变量,每个随机变量彼此之间具有固定的相关性 p
。
变量应该有 mean = 1
和 std = 5
N=10 #number of variables
mu <- rep(1,N) #means
p=0.7 #correlation
Sigma <- matrix(p,ncol=N,nrow=N) #variance covariance matrix
diag(Sigma) <- 5 #standard deviations
library(MASS)
set.seed(12)
data <- mvrnorm(10000,mu,Sigma)
然而,得到的标准偏差不是 5。
apply(data,2,sd)
[1] 2.264853 2.219811 2.224703 2.245595 2.216712 2.236484 2.240794 2.220532 2.227445
[10] 2.247943
有没有系统的方法可以在保持其他参数不变的情况下改变标准偏差?
您创建了一个矩阵 Sigma,其中对角线元素为 5,但 mvnorm 需要一个协方差矩阵(不是标准差矩阵)作为 Sigma。所以你需要让对角线元素等于 25。它也没有正确使用 p=0.7 的值,那些是相关性,而不是协方差。您需要将相关性转化为协方差。
参见:
https://math.stackexchange.com/questions/446093/generate-correlated-normal-random-variables
您的方差-协方差 (VCV) 矩阵不正确。对角线应该是方差,而不是标准差。如果你这样做
apply(data,2,var)
然后您会看到 方差 约为 5。如果您希望标准偏差为 5,则需要非对角线为 25。
此外,您正在将相关性输入到 VCV 矩阵的非对角线上,这些应该是协方差。要从 correlations to covariances 得到,您需要将相关性乘以相关的两个变量的标准差。在您的情况下,假设两个变量的标准差均为 5,则 VCV 中的协方差应为 p = 0.7 * 5 * 5
。所以你最终的 VCV 应该是
p <- 0.7 * 5 * 5
Sigma <- matrix(p,ncol=N,nrow=N)
diag(Sigma) <- 25
生成的 N 个随机变量的均值为 1,协方差 p,相关性 p/25.