Commit | Line | Data |
---|---|---|
086ca318 BA |
1 | #' generateXY |
2 | #' | |
3 | #' Generate a sample of (X,Y) of size n | |
4 | #' | |
5 | #' @param n sample size | |
6 | #' @param π proportion for each cluster | |
7 | #' @param meanX matrix of group means for covariates (of size p) | |
8 | #' @param covX covariance for covariates (of size p*p) | |
9 | #' @param β regression matrix, of size p*m*k | |
10 | #' @param covY covariance for the response vector (of size m*m*K) | |
11 | #' | |
12 | #' @return list with X and Y | |
13 | #' | |
14 | #' @export | |
15 | generateXY = function(n, π, meanX, β, covX, covY) | |
16 | { | |
17 | p <- dim(covX)[1] | |
18 | m <- dim(covY)[1] | |
19 | k <- dim(covY)[3] | |
20 | ||
21 | X <- matrix(nrow=0, ncol=p) | |
22 | Y <- matrix(nrow=0, ncol=m) | |
23 | ||
24 | #random generation of the size of each population in X~Y (unordered) | |
25 | sizePop <- rmultinom(1, n, pi) | |
26 | class <- c() #map i in 1:n --> index of class in 1:k | |
27 | ||
28 | for (i in 1:k) | |
29 | { | |
30 | class <- c(class, rep(i, sizePop[i])) | |
31 | newBlockX <- MASS::mvrnorm(sizePop[i], meanX, covX) | |
32 | X <- rbind( X, newBlockX ) | |
33 | Y <- rbind( Y, apply( newBlockX, 1, function(row) | |
34 | mvrnorm(1, row %*% beta[,,i], covY[,,i]) ) ) | |
35 | } | |
36 | ||
37 | shuffle = sample(n) | |
38 | list("X"=X[shuffle,], "Y"=Y[shuffle,], "class"=class[shuffle]) | |
39 | } |