stephenslab / susieR

R package for "sum of single effects" regression.
https://stephenslab.github.io/susieR
Other
176 stars 45 forks source link

Improve SuSiE convergence #56

Open gaow opened 5 years ago

gaow commented 5 years ago

Here is an example of an edge case showing convergence difficulties SuSiE has:

https://gaow.github.io/mvarbvs/analysis/20181009_Null_Weight.html

Just to document the experiments here, for revisiting in the future.

gaow commented 5 years ago

At least susie_auto can potentially be tuned better to handle this, if we do not have a better alternative. Currently we did not exploit susie_auto a lot.

stephens999 commented 5 years ago

i also investigated it here: https://stephens999.github.io/susier-investigate/false-positive.html

(this link not yet working for me; I'm not sure why!)

stephens999 commented 5 years ago

the current version of susie_auto does deal ok with this example

stephens999 commented 5 years ago

I have found changepoint examples particularly helpful for creating challenging examples for convergence. Here is a minimal example for now. I am still investigating and will do a more thorough report later. (susie_auto does not deal with this example yet, for several reasons i'll also report later).

This function fits susie to changepoint data (ie piecewise constant function, aka trendfilter with ord=0)

susie_cp = function(y,auto=FALSE,...){
  n=length(y)
  X = matrix(0,nrow=n,ncol=n-1)
  for(j in 1:(n-1)){
    for(i in (j+1):n){
      X[i,j] = 1
    }
  }
  if(auto){
    s = susie_auto(X,y,...)
  } else {
    s = susie(X,y,...)
  }
  return(s)
}

This example is challenging because you need 2 changepoints very close (ie at very correlated variables):

set.seed(1)
x = rnorm(100)
x[50]=8
x.s = susie_cp(x)
plot(x)
lines(predict(x.s))