Calculate Stable Features
get_stable_features.RdReturns a data frame object of all features with a maximum selection probability greater than a minimum threshold.
Arguments
- x
An
stab_selclass object OR a matrix containing selection probabilities, i.e. thestabpath_matrixentry of astab_selobject.- thresh
numeric(1)in[0, 1]. the minimum selection probability threshold. In some instances this value can also be a vector, but is generally a scalar > 0.50 forget_stable_features().- add_features
character(n). A string of additional features to force into the resulting table, irrespective of their threshold. Used mostly in the S3 plot method to see a given stability path of a feature not meeting a threshold cutoff. Must be exact string match.- warn
logical(1). Should warnings be triggered if no stable features were found at the specified threshold OR if the FDR upper bound is undefined at thresholds<= 0.5?
Value
A two column data frame containing maximum selection
probabilities and FDR upper bounds when appropriate, see Details.
Details
A "stable feature" is defined as a feature with a maximum selection
probability greater than a supplied threshold. This function returns a
data.frame of all features that satisfy this criterion along with the
maximum selection probability and the upper bound on the false discover
rate. This false discovery rate bound is only defined for thresh > 0.5,
it is otherwise undefined.
IMPORTANT! If you pass to the matrix method, there
is no permutation analysis performed, i.e. no $EmpFDR column
in the returned data frame. This calculation takes a long
time and is not always desired, so this method offers the
user a control mechanism for the output behavior.
Examples
# logistic regression
n_feat <- 20
n_samples <- 100
x <- matrix(rnorm(n_feat * n_samples), n_samples, n_feat)
colnames(x) <- paste0("feat", "_", head(letters, n_feat))
y <- sample(1:2, n_samples, replace = TRUE)
stab_sel <- stability_selection(x, y, r_seed = 101)
#> ✓ Using kernel: 'binomial' and 1 core (serial)
#> ✓ Stablity path run time: 0.517s
# Stable features at `thresh =`
get_stable_features(stab_sel, 0.75)
#> $thresh_0.75
#> # A tibble: 18 × 3
#> feature MaxSelectProb FDRbound
#> <chr> <dbl> <dbl>
#> 1 feat_i 0.965 0.005
#> 2 feat_b 0.96 0.01
#> 3 feat_n 0.93 0.015
#> 4 feat_l 0.905 0.02
#> 5 feat_e 0.9 0.025
#> 6 feat_f 0.9 0.03
#> 7 feat_p 0.865 0.035
#> 8 feat_c 0.845 0.04
#> 9 feat_s 0.845 0.045
#> 10 feat_a 0.835 0.05
#> 11 feat_o 0.835 0.055
#> 12 feat_d 0.83 0.06
#> 13 feat_r 0.83 0.065
#> 14 feat_h 0.82 0.07
#> 15 feat_g 0.815 0.075
#> 16 feat_q 0.81 0.08
#> 17 feat_t 0.81 0.085
#> 18 feat_k 0.8 0.09
#>
get_stable_features(stab_sel, c(0.75, 0.9))
#> $thresh_0.75
#> # A tibble: 18 × 3
#> feature MaxSelectProb FDRbound
#> <chr> <dbl> <dbl>
#> 1 feat_i 0.965 0.005
#> 2 feat_b 0.96 0.01
#> 3 feat_n 0.93 0.015
#> 4 feat_l 0.905 0.02
#> 5 feat_e 0.9 0.025
#> 6 feat_f 0.9 0.03
#> 7 feat_p 0.865 0.035
#> 8 feat_c 0.845 0.04
#> 9 feat_s 0.845 0.045
#> 10 feat_a 0.835 0.05
#> 11 feat_o 0.835 0.055
#> 12 feat_d 0.83 0.06
#> 13 feat_r 0.83 0.065
#> 14 feat_h 0.82 0.07
#> 15 feat_g 0.815 0.075
#> 16 feat_q 0.81 0.08
#> 17 feat_t 0.81 0.085
#> 18 feat_k 0.8 0.09
#>
#> $thresh_0.9
#> # A tibble: 6 × 3
#> feature MaxSelectProb FDRbound
#> <chr> <dbl> <dbl>
#> 1 feat_i 0.965 0.00312
#> 2 feat_b 0.96 0.00625
#> 3 feat_n 0.93 0.00938
#> 4 feat_l 0.905 0.0125
#> 5 feat_e 0.9 0.0156
#> 6 feat_f 0.9 0.0188
#>