如何在[r]中的两个逆累积概率分布之间建立相关性?
我想创建一个相关的反向累积分布。例如,目前我有两个逆分布,如下所示,但我想导出一个关联,比如说-0.5。有什么办法可以做到这一点吗如何在[r]中的两个逆累积概率分布之间建立相关性?,r,cdf,R,Cdf,我想创建一个相关的反向累积分布。例如,目前我有两个逆分布,如下所示,但我想导出一个关联,比如说-0.5。有什么办法可以做到这一点吗 library(lognorm) library(dplyr) Var_a <- tbl_df(qlnorm(runif(1000), meanlog = 0.0326, sdlog = 0.0288)) var_b <- tbl_df(qlnorm(runif(1000), meanlog = 0.0452, sdlog = 0.0364)) c
library(lognorm)
library(dplyr)
Var_a <- tbl_df(qlnorm(runif(1000), meanlog = 0.0326, sdlog = 0.0288))
var_b <- tbl_df(qlnorm(runif(1000), meanlog = 0.0452, sdlog = 0.0364))
cor(Var_a, var_b)
图书馆(lognorm)
图书馆(dplyr)
Var_a以下内容对您有用吗
set.seed(100)
x1 <- rnorm(1000)
y1 <- rnorm(1000) - .6 * x1
x2 = pnorm(x1)
y2 = pnorm(y1)
cor(cbind(x2, y2))
# x2 y2
# x2 1.0000000 -0.4995593
# y2 -0.4995593 1.0000000
Var_a <- tbl_df(qlnorm(x2, meanlog = 0.0326, sdlog = 0.0288))
var_b <- tbl_df(qlnorm(y2, meanlog = 0.0452, sdlog = 0.0364))
cor(Var_a, var_b)
# value
# value -0.5239145
set.seed(100)
x1如果有15个变量具有相关矩阵CC
,则可以使用高斯copula获得相关的均匀变量,使用CC
的Cholesky分解,然后像上面所做的那样,使用指定的边缘反转这些变量。(,例如)
rv
是您的模拟变量,与所需的相关结构非常接近,您可以使用cor(rv)
进行检查。谢谢,我有一个超过15个变量的列表,其中有一个相关矩阵,我希望模拟并保留相关性。我想这可能是NORTA(对任何事物都正常)方法的一个示例。你能解释一下你是如何决定用-0.6作为y1
的偏移量的吗?所以你有15个变量,你希望它们都与-0.5相关?我不明白,你能解释一下吗?我选择了它,因为我想要0.5左右的值对不起,我确实有一个关联矩阵,用于我想要施加的这15个变量。我只是以两个变量和-0.5的相关性为例。我需要对这15个变量进行对数正态模拟,保持它们的相关性
library(MASS)
sigma <- matrix(.5, nrow = 15, ncol = 15) + diag(15)*.5 #your correlation matrix
sigma
vars <- mvrnorm(1000, mu = rep(0, 15), Sigma = sigma)
vars
cor(vars)
vars2 <- pnorm(vars)
cor(vars2)
#use each of these as variable in qlnorm
vars2 <- data.frame(vars2)
names(vars2)
vars2
vars2[paste("log_", 1:15)] <- lapply(vars2[, 1:15], function(x) {qlnorm(x, meanlog = 0.0326, sdlog = 0.0288)})
names(vars2)
vars2 <- vars2[, -c(1:15)]
cor(vars2)
nv <- NROW(CC)
num_samples <- 1000
A <- matrix(rnorm(num_samples * nv), ncol = nv)
U <- pnorm(A %*% chol(CC))
rv <- sapply(1:nv, function(i) qlnorm(U[,i], meanlog = means[i], sdlog = stdevs[i]))