Knockoff on Small SignalsLast updated: 2018-04-03
Code version: 5bce84a
In the Knockoff paper simulations, \(\beta\)’s are either \(0\) or \(A\). Here we are replicating the results, and investigating how well Knockoff deal with small signals.
In the following simulations, we always have \(n = 3000\), \(p = 1000\), For a certain \(\beta\), \(Y_n \sim N(X_{n\times p}\beta_p, I_n)\). Out of \(p = 1000\) \(\beta_j\)’s, here are three scenarios.
Knockoff paper)Loading required package: foreach
Loading required package: iterators
Loading required package: parallel
n <- 3000
p <- 1000
k <- 50
q <- 0.1
A <- 3.5
X <- matrix(rnorm(n * p), n , p)
X <- svd(X)$u
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk

X <- matrix(rnorm(n * p), n , p)
X <- svd(X)$u
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk

X <- matrix(rnorm(n * p), n , p)
X <- svd(X)$u
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk

\(X\) has random orthonormal columns
| FDP.BH | FDP.Knockoff | FDP.Knockoff.Plus | Power.BH | Power.Knockoff | Power.Knockoff.Plus | Power.Large.BH | Power.Large.Knockoff | Power.Large.Knockoff.Plus | Power.Small.BH | Power.Small.Knockoff | Power.Small.Knockoff.Plus | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.0979 | 0.1082 | 0.0863 | 0.7339 | 0.7329 | 0.6939 | 0.7339 | 0.7329 | 0.6939 | NA | NA | NA | 
| 0.0847 | 0.0921 | 0.0795 | 0.3836 | 0.3867 | 0.3691 | 0.7791 | 0.7799 | 0.7555 | 0.1858 | 0.1901 | 0.176 | 
| 0.0756 | 0.0817 | 0.0727 | 0.3294 | 0.3340 | 0.3195 | 0.8116 | 0.8122 | 0.7932 | 0.2088 | 0.2145 | 0.201 | 








\(X_{n \times p}\) has independent columns simulated from \(N(0, 1)\) and then normalized to have \(\|X_j\|_2^2 \equiv 1\).
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
| FDP.BH | FDP.Knockoff | FDP.Knockoff.Plus | Power.BH | Power.Knockoff | Power.Knockoff.Plus | Power.Large.BH | Power.Large.Knockoff | Power.Large.Knockoff.Plus | Power.Small.BH | Power.Small.Knockoff | Power.Small.Knockoff.Plus | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.0950 | 0.0713 | 0.0483 | 0.4344 | 0.5399 | 0.4135 | 0.4344 | 0.5399 | 0.4135 | NA | NA | NA | 
| 0.0828 | 0.0587 | 0.0397 | 0.2180 | 0.2106 | 0.1584 | 0.4789 | 0.4820 | 0.3699 | 0.0876 | 0.0749 | 0.0527 | 
| 0.0747 | 0.0456 | 0.0325 | 0.1838 | 0.1613 | 0.1243 | 0.5135 | 0.4372 | 0.3432 | 0.1013 | 0.0923 | 0.0696 | 








\(X_{n \times p}\) has correlation \(\Sigma_{ij} = \rho^{|i - j|}\). Each row is independently \(N(0, \Sigma)\) and then normalized to have \(\|X_j\|_2^2 \equiv 1\).
rho <- 0.25
Sigma <- toeplitz(rho^(0 : (p - 1)))
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
X <- X %*% chol(Sigma)
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
X <- X %*% chol(Sigma)
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
X <- matrix(rnorm(n * p), n , p)
X <- t(t(X) / sqrt(colSums(X^2)))
X <- X %*% chol(Sigma)
Xk <- knockoff::create.fixed(X)
Xk <- Xk$Xk
| FDP.BH | FDP.Knockoff | FDP.Knockoff.Plus | Power.BH | Power.Knockoff | Power.Knockoff.Plus | Power.Large.BH | Power.Large.Knockoff | Power.Large.Knockoff.Plus | Power.Small.BH | Power.Small.Knockoff | Power.Small.Knockoff.Plus | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.0957 | 0.0563 | 0.0344 | 0.3367 | 0.4985 | 0.3484 | 0.3367 | 0.4985 | 0.3484 | NA | NA | NA | 
| 0.0824 | 0.0407 | 0.0249 | 0.1710 | 0.1656 | 0.1070 | 0.3820 | 0.3620 | 0.2348 | 0.0655 | 0.0673 | 0.0431 | 
| 0.0738 | 0.0258 | 0.0170 | 0.1441 | 0.1393 | 0.0988 | 0.4137 | 0.4040 | 0.2893 | 0.0767 | 0.0731 | 0.0511 | 








\(X_{n \times p}\) has independent columns simulated from \(N(0, (1/\sqrt n)^2)\) so they are roughly normalized.
Loaded glmnet 2.0-13
| FDP.BH | FDP.Knockoff | FDP.Knockoff.Plus | Power.BH | Power.Knockoff | Power.Knockoff.Plus | Power.Large.BH | Power.Large.Knockoff | Power.Large.Knockoff.Plus | Power.Small.BH | Power.Small.Knockoff | Power.Small.Knockoff.Plus | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.0903 | 0.1164 | 0.0935 | 0.4312 | 0.6632 | 0.6124 | 0.4312 | 0.6632 | 0.6124 | NA | NA | NA | 
| 0.0782 | 0.1150 | 0.0929 | 0.2213 | 0.3417 | 0.3161 | 0.4808 | 0.6924 | 0.6526 | 0.0916 | 0.1664 | 0.1478 | 
| 0.0693 | 0.0923 | 0.0806 | 0.1803 | 0.2731 | 0.2573 | 0.5156 | 0.6962 | 0.6718 | 0.0965 | 0.1674 | 0.1536 | 








\(X_{n \times p}\) has correlation \(\Sigma_{ij} = \rho^{|i - j|}\). Each row is independently \(N(0, \frac1n\Sigma)\).
rho <- 0.5
Sigma <- toeplitz(rho^(0 : (p - 1)))
Sigma.5 <- chol(Sigma)
Cov.X <- Sigma / n
| FDP.BH | FDP.Knockoff | FDP.Knockoff.Plus | Power.BH | Power.Knockoff | Power.Knockoff.Plus | Power.Large.BH | Power.Large.Knockoff | Power.Large.Knockoff.Plus | Power.Small.BH | Power.Small.Knockoff | Power.Small.Knockoff.Plus | 
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.1199 | 0.1230 | 0.0946 | 0.1268 | 0.6036 | 0.5196 | 0.1268 | 0.6036 | 0.5196 | NA | NA | NA | 
| 0.0840 | 0.0971 | 0.0800 | 0.0635 | 0.2759 | 0.2469 | 0.1504 | 0.5784 | 0.5246 | 0.0200 | 0.1246 | 0.1081 | 
| 0.1562 | 0.0671 | 0.0467 | 0.0944 | 0.1253 | 0.0953 | 0.2850 | 0.3564 | 0.2782 | 0.0467 | 0.0676 | 0.0496 | 








sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.4
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     
other attached packages:
[1] knitr_1.20      lattice_0.20-35 doMC_1.3.5      iterators_1.0.9
[5] foreach_1.4.4   ggplot2_2.2.1   reshape2_1.4.3  Matrix_1.2-12  
[9] knockoff_0.3.0 
loaded via a namespace (and not attached):
 [1] Rcpp_0.12.14     magrittr_1.5     munsell_0.4.3    colorspace_1.3-2
 [5] rlang_0.1.6      highr_0.6        stringr_1.3.0    plyr_1.8.4      
 [9] tools_3.4.3      grid_3.4.3       gtable_0.2.0     git2r_0.21.0    
[13] htmltools_0.3.6  yaml_2.1.18      lazyeval_0.2.1   rprojroot_1.3-2 
[17] digest_0.6.15    tibble_1.4.1     codetools_0.2-15 evaluate_0.10.1 
[21] rmarkdown_1.9    labeling_0.3     stringi_1.1.6    pillar_1.0.1    
[25] compiler_3.4.3   scales_0.5.0     backports_1.1.2 
This R Markdown site was created with workflowr