向与一两个现有数据相关的现有数据添加新变量
Adding new variables to existing data that correlate with one or two existing ones
如何在满足以下条件的情况下再添加两个变量?
- 变量“c”与变量“a”的相关性为 0.7。
- 如果可能,同时与“a”和“b”相关的变量“d”。
模拟数据
n = 100
d = tibble(a = rnorm(n, 50, 20),
b = rnorm(n, 10, 0.4))
d
非常感谢 Tidyverse 解决方案!
这是一个小函数,它接受一个向量 x
和一个所需的 rho
和 returns 一个向量,使得 cor(<vector>,x) ==
rho`).
f <- function(x,rho) {
orth = lm(runif(length(x))~x)$residuals
rho*sd(orth)*x + orth*sd(x)*sqrt(1-rho^2)
}
现在我们将函数应用到列 a
以创建一个列 c
使得 cor(a,c) == 0.7
d %>% mutate(c = f(a,.7))
使用在 mc2d 包中开发的 Iman 和 Conover 方法 (1982)(一个 rank 相关结构)。
library(mc2d)
cc <- rnorm(n,50,20)
cc <- cornode(cbind(d$a,cc), target=0.7)[,"cc"]
d$c <- cc
cor(d)
对于不止一个变量,你必须建立一个相关矩阵。
## Target
(corrTarget <- matrix(c(1, 0.7, 0.7, 0.7, 1, 0.7, 0.7, 0.7, 1), ncol=3))
dd <- rnorm(n,50,20)
dd <- cornode(cbind(a=d$a,b=d$b,dd), target=corrTarget)
cor(dd)
d$b <- dd[,"b"]
d$d <- dd[,"dd"]
cor(d)
应检查最终的关联结构,因为并非总能构建目标关联结构。
第二个实际上更容易(至少对我而言):只需从 a 和 b 中得到 z-scores,然后将它们相加或取平均值。它将与 a 和 b 相关联 0.7
d <- d %>%
mutate(d=((a - mean(a)) / sd(a)) +
((b- mean(b)) / sd(b)))
如何在满足以下条件的情况下再添加两个变量?
- 变量“c”与变量“a”的相关性为 0.7。
- 如果可能,同时与“a”和“b”相关的变量“d”。
模拟数据
n = 100
d = tibble(a = rnorm(n, 50, 20),
b = rnorm(n, 10, 0.4))
d
非常感谢 Tidyverse 解决方案!
这是一个小函数,它接受一个向量 x
和一个所需的 rho
和 returns 一个向量,使得 cor(<vector>,x) ==
rho`).
f <- function(x,rho) {
orth = lm(runif(length(x))~x)$residuals
rho*sd(orth)*x + orth*sd(x)*sqrt(1-rho^2)
}
现在我们将函数应用到列 a
以创建一个列 c
使得 cor(a,c) == 0.7
d %>% mutate(c = f(a,.7))
使用在 mc2d 包中开发的 Iman 和 Conover 方法 (1982)(一个 rank 相关结构)。
library(mc2d)
cc <- rnorm(n,50,20)
cc <- cornode(cbind(d$a,cc), target=0.7)[,"cc"]
d$c <- cc
cor(d)
对于不止一个变量,你必须建立一个相关矩阵。
## Target
(corrTarget <- matrix(c(1, 0.7, 0.7, 0.7, 1, 0.7, 0.7, 0.7, 1), ncol=3))
dd <- rnorm(n,50,20)
dd <- cornode(cbind(a=d$a,b=d$b,dd), target=corrTarget)
cor(dd)
d$b <- dd[,"b"]
d$d <- dd[,"dd"]
cor(d)
应检查最终的关联结构,因为并非总能构建目标关联结构。
第二个实际上更容易(至少对我而言):只需从 a 和 b 中得到 z-scores,然后将它们相加或取平均值。它将与 a 和 b 相关联 0.7
d <- d %>%
mutate(d=((a - mean(a)) / sd(a)) +
((b- mean(b)) / sd(b)))