knitr::opts_chunk$set(echo = TRUE)
First we will simulate some rank 1 data:
library("flashr") set.seed(1) n=100 p=1000 ll = rnorm(n) ff = rnorm(p) LF = outer(ll,ff) Y = LF + rnorm(n*p)
Now add some missing data at 50 percent of entries
Y.miss = Y for(i in 1:n){ # set half of Y to be missign at random Y.miss[i,sample(1:p,p/2)]=NA }
Run flash (with $K=1$) on the full data
data = flash_set_data(Y) f= flash(data,Kmax=1,verbose=TRUE) plot(LF,flash_get_fitted_values(f),main="True LF vs fitted value (full data)",xlab="true LF",ylab="fitted LF") abline(a=0,b=1,col="red")
And on missing data
data.miss = flash_set_data(Y.miss) f.miss = flash(data.miss,Kmax=1,verbose=TRUE) plot(LF,flash_get_fitted_values(f.miss),main="True LF vs fitted values (missing data)",xlab="true LF",ylab="fitted LF") abline(a=0,b=1,col="red")
And compute overall RMSE of estimated low-rank structure.
sqrt(mean((LF-flash_get_fitted_values(f))^2)) sqrt(mean((LF-flash_get_fitted_values(f.miss))^2))
And try setting the var_type slightly differently:
f= flash(data,Kmax=1,var_type = "constant",verbose=TRUE) plot(LF,flash_get_fitted_values(f),main="True LF vs fitted value (full data)",xlab="true LF",ylab="fitted LF") abline(a=0,b=1,col="red") sqrt(mean((LF-flash_get_fitted_values(f))^2)) f.miss = flash(data.miss,Kmax=1,var_type = "constant",verbose=TRUE) plot(LF,flash_get_fitted_values(f.miss),main="True LF vs fitted values (missing data)",xlab="true LF",ylab="fitted LF") abline(a=0,b=1,col="red") sqrt(mean((LF-flash_get_fitted_values(f.miss))^2))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.