Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在[r]中的两个逆累积概率分布之间建立相关性?_R_Cdf - Fatal编程技术网

如何在[r]中的两个逆累积概率分布之间建立相关性?

如何在[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

我想创建一个相关的反向累积分布。例如,目前我有两个逆分布,如下所示,但我想导出一个关联,比如说-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))

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]))