2017-02-09 3 views
4

Я ищу, чтобы имитировать возрастную переменную (ограниченный диапазон 18-35), которая коррелировала 0,1 с существующей двоичной переменной, называемой use. Большинство примеров, с которыми я столкнулся, демонстрируют, как имитировать обе переменные одновременно.Имитировать непрерывную переменную, которая коррелирует с существующей двоичной переменной

# setup 
    set.seed(493) 
    n <- 134 
    dat <- data.frame(partID=seq(1, n, 1), 
        trt=c(rep(0, n/2), 
          rep(1, n/2))) 

# set proportion 
    a <- .8 
    b <- .2 
    dat$use <- c(rbinom(n/2, 1, b), 
       rbinom(n/2, 1, a)) 
+6

http://stats.stackexchange.com/questions/15011/generate-a-random-variable-with-a-defined-correlation-to-an-existing-variable – Raad

+0

Я голосующий, чтобы закрыть этот вопрос как отключенный -topic, потому что дубликат http://stats.stackexchange.com/questions/15011/generate-a-random-variable-with-a-defined-corr Восторг к существующему переменному – zx8754

ответ

3

Не уверен, что это лучший способ приблизиться к этому, но вы можете получить близко, используя ответ от сюда: https://stats.stackexchange.com/questions/15011/generate-a-random-variable-with-a-defined-correlation-to-an-existing-variable

Например (используя код по ссылке):

x1 <- dat$use    # fixed given data 

rho <- 0.1     # desired correlation = cos(angle) 
theta <- acos(rho)    # corresponding angle 
x2 <- rnorm(n, 2, 0.5)  # new random data 
X  <- cbind(x1, x2)   # matrix 
Xctr <- scale(X, center=TRUE, scale=FALSE) # centered columns (mean 0) 

Id <- diag(n)        # identity matrix 
Q <- qr.Q(qr(Xctr[ , 1, drop=FALSE]))  # QR-decomposition, just matrix Q 
P <- tcrossprod(Q)   # = Q Q'  # projection onto space defined by x1 
x2o <- (Id-P) %*% Xctr[ , 2]     # x2ctr made orthogonal to x1ctr 
Xc2 <- cbind(Xctr[ , 1], x2o)    # bind to matrix 
Y <- Xc2 %*% diag(1/sqrt(colSums(Xc2^2))) # scale columns to length 1 

x <- Y[ , 2] + (1/tan(theta)) * Y[ , 1]  # final new vector 


dat$age <- (1 + x) * 25 

cor(dat$use, dat$age) 
# 0.1 

summary(dat$age) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 20.17 23.53 25.00 25.00 26.59 30.50