Skip to content

Instantly share code, notes, and snippets.

@alexchinco
Last active March 27, 2018 18:30
Show Gist options
  • Save alexchinco/de886c1bda75dfc9cd55c18333c7b294 to your computer and use it in GitHub Desktop.
Save alexchinco/de886c1bda75dfc9cd55c18333c7b294 to your computer and use it in GitHub Desktop.
Illustrative Example: Why Bayesian Variable Selection Doesn't Scale
## ##########################################################################################################################
## ##########################################################################################################################
## @section: Prep workspace
## ##########################################################################################################################
## ##########################################################################################################################
options(width=200, digits=6, digits.secs=6)
rm(list=ls())
## ##########################################################################################################################
## ##########################################################################################################################
## @section: load data
## ##########################################################################################################################
## ##########################################################################################################################
mat.df.DATA <- read.csv("data.csv")
scl.int.N <- dim(mat.df.DATA)[1]
scl.flt.LAM <- log(scl.int.N)/scl.int.N
vec.flt.R <- mat.df.DATA$r
vec.flt.X1 <- mat.df.DATA$x1
vec.flt.X2 <- mat.df.DATA$x2
vec.flt.X3 <- mat.df.DATA$x3
## ##########################################################################################################################
## ##########################################################################################################################
## @section: evaluate models
## ##########################################################################################################################
## ##########################################################################################################################
mat.df.RESULTS <- data.frame(activeSet = c("0", "1", "2", "3", "12", "13", "23", "123"),
error = NA,
penalty = NA
)
## @active: none
mat.df.RESULTS[mat.df.RESULTS$activeSet == "0", ]$error <- var(lm(vec.flt.R ~ 0)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "0", ]$penalty <- scl.flt.LAM * 0
## @active: x1
mat.df.RESULTS[mat.df.RESULTS$activeSet == "1", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X1)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "1", ]$penalty <- scl.flt.LAM * 1
## @active: x2
mat.df.RESULTS[mat.df.RESULTS$activeSet == "2", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X2)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "2", ]$penalty <- scl.flt.LAM * 1
## @active: x3
mat.df.RESULTS[mat.df.RESULTS$activeSet == "3", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X3)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "3", ]$penalty <- scl.flt.LAM * 1
## @active: x1, x2
mat.df.RESULTS[mat.df.RESULTS$activeSet == "12", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X1 + vec.flt.X2)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "12", ]$penalty <- scl.flt.LAM * 2
## @active: x1, x3
mat.df.RESULTS[mat.df.RESULTS$activeSet == "13", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X1 + vec.flt.X3)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "13", ]$penalty <- scl.flt.LAM * 2
## @active: x2, x3
mat.df.RESULTS[mat.df.RESULTS$activeSet == "23", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X2 + vec.flt.X3)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "23", ]$penalty <- scl.flt.LAM * 2
## @active: x1, x2, x3
mat.df.RESULTS[mat.df.RESULTS$activeSet == "123", ]$error <- var(lm(vec.flt.R ~ 0 + vec.flt.X1 + vec.flt.X2 + vec.flt.X3)$residuals)
mat.df.RESULTS[mat.df.RESULTS$activeSet == "123", ]$penalty <- scl.flt.LAM * 3
mat.df.RESULTS$objective <- mat.df.RESULTS$error + mat.df.RESULTS$penalty
## ##########################################################################################################################
## ##########################################################################################################################
## @section: report results
## ##########################################################################################################################
## ##########################################################################################################################
print(round(scl.flt.LAM, 3))
print(round(c(mean(vec.flt.X1), mean(vec.flt.X2), mean(vec.flt.X3)), 3))
print(round(var(cbind(vec.flt.X1, vec.flt.X2, vec.flt.X3)), 3))
print(round(c(cor(vec.flt.R, vec.flt.X1), cor(vec.flt.R, vec.flt.X2), cor(vec.flt.R, vec.flt.X3)), 3))
print(mat.df.RESULTS)
r x1 x2 x3
0.548314589161602 -1.26198196500735 2.04142887192091 0.0760895678625879
-0.21518019730329 0.81408407724488 -0.412624249563228 -0.627181394778148
-0.648605961531125 -0.551842491047323 0.058620371958052 -1.35841712046789
-0.58075209778771 0.467145129157133 -0.306313046957794 -0.556815842387673
0.949602947999348 0.347869734448891 -0.403981708133536 -0.179821931880687
0.744493413342832 0.463742431045108 0.771689781742392 1.71867436798675
-1.22860091230613 -0.789079794731759 -1.36802474099182 -0.661785061623831
-1.16970738703437 -1.18252108853245 -0.847034832229735 0.178793349769198
1.60043560545884 1.69258396742287 0.466239552254763 1.41046406551969
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment