Read sig_fit_bootstrap for more option setting.

sig_fit_bootstrap_batch(
  catalogue_matrix,
  methods = c("QP"),
  n = 100L,
  min_count = 1L,
  p_val_thresholds = c(0.05),
  use_parallel = FALSE,
  seed = 123456L,
  job_id = NULL,
  result_dir = tempdir(),
  ...
)

Arguments

catalogue_matrix

a numeric matrix V with row representing components and columns representing samples, typically you can get nmf_matrix from sig_tally() and transpose it by t().

methods

a subset of c("NNLS", "QP", "SA").

n

the number of bootstrap replicates.

min_count

minimal exposure in a sample, default is 1. Any patient has total exposure less than this value will be filtered out.

p_val_thresholds

a vector of relative exposure threshold for calculating p values.

use_parallel

if TRUE, use parallel computation based on furrr package. It can also be an integer for specifying cores.

seed

random seed to reproduce the result.

job_id

a job ID, default is NULL, can be a string. When not NULL, all bootstrapped results will be saved to local machine location defined by result_dir. This is very useful for running more than 10 times for more than 100 samples.

result_dir

see above, default is temp directory defined by R.

...

other common parameters passing to sig_fit_bootstrap, including sig, sig_index, sig_db, db_type, mode, auto_reduce etc.

Value

a list of data.table.

Examples

W <- matrix(c(1, 2, 3, 4, 5, 6), ncol = 2)
colnames(W) <- c("sig1", "sig2")
W <- apply(W, 2, function(x) x / sum(x))

H <- matrix(c(2, 5, 3, 6, 1, 9, 1, 2), ncol = 4)
colnames(H) <- paste0("samp", 1:4)

V <- W %*% H
V
#>         samp1 samp2    samp3 samp4
#> [1,] 1.666667   2.1 2.566667   0.7
#> [2,] 2.333333   3.0 3.333333   1.0
#> [3,] 3.000000   3.9 4.100000   1.3

if (requireNamespace("quadprog")) {
  z10 <- sig_fit_bootstrap_batch(V, sig = W, n = 10)
  z10
}
#>  [2024-03-13 10:53:40.941433]: Batch Bootstrap Signature Exposure Analysis Started.
#>  [2024-03-13 10:53:40.943243]: Samples to be filtered out: 
#>  [2024-03-13 10:53:40.944718]: Finding optimal exposures (&errors) for different methods.
#>  [2024-03-13 10:53:40.946119]: Calling method `QP`.
#>  [2024-03-13 10:53:40.949574]: Started.
#>  [2024-03-13 10:53:40.950994]: Signature index not detected.
#>  [2024-03-13 10:53:40.952474]: Signature matrix/data.frame detected.
#>  [2024-03-13 10:53:40.953917]: Database and index checked.
#>  [2024-03-13 10:53:40.955455]: Signature normalized.
#>  [2024-03-13 10:53:40.956878]: Checking row number for catalog matrix and signature matrix.
#>  [2024-03-13 10:53:40.958301]: Checked.
#>  [2024-03-13 10:53:40.959737]: Method 'QP' detected.
#>  [2024-03-13 10:53:40.961124]: Corresponding function generated.
#>  [2024-03-13 10:53:40.962498]: Calling function.
#>  [2024-03-13 10:53:40.964167]: Fitting sample: samp1
#>  [2024-03-13 10:53:40.965707]: Fitting sample: samp2
#>  [2024-03-13 10:53:40.96716]: Fitting sample: samp3
#>  [2024-03-13 10:53:40.968673]: Fitting sample: samp4
#>  [2024-03-13 10:53:40.970194]: Done.
#>  [2024-03-13 10:53:40.971603]: Generating output signature exposures.
#>  [2024-03-13 10:53:40.981682]: Done.
#>  [2024-03-13 10:53:40.983498]: Calculating errors (Frobenius Norm).
#>  [2024-03-13 10:53:40.985112]: Done.
#>  [2024-03-13 10:53:40.986586]: 0.037 secs elapsed.
#>  [2024-03-13 10:53:40.989764]: Getting bootstrap exposures (&errors/similarity) for different methods.
#>  [2024-03-13 10:53:40.991318]: This step is time consuming, please be patient.
#>  [2024-03-13 10:53:40.992906]: Processing sample `samp1`.
#>  [2024-03-13 10:53:42.363115]: Processing sample `samp2`.
#>  [2024-03-13 10:53:43.686993]: Processing sample `samp3`.
#>  [2024-03-13 10:53:44.988836]: Processing sample `samp4`.
#>  [2024-03-13 10:53:46.304427]: Gotten.
#>  [2024-03-13 10:53:46.306904]: Reporting p values...
#>  [2024-03-13 10:53:46.308464]: Started.
#>  [2024-03-13 10:53:46.309855]: Batch mode enabled.
#>  [2024-03-13 10:53:46.311711]: Done.
#>  [2024-03-13 10:53:46.313145]: 0.005 secs elapsed.
#>  [2024-03-13 10:53:46.314551]: Started.
#>  [2024-03-13 10:53:46.31592]: Batch mode enabled.
#>  [2024-03-13 10:53:46.317611]: Done.
#>  [2024-03-13 10:53:46.319018]: 0.004 secs elapsed.
#>  [2024-03-13 10:53:46.320452]: Started.
#>  [2024-03-13 10:53:46.321821]: Batch mode enabled.
#>  [2024-03-13 10:53:46.32355]: Done.
#>  [2024-03-13 10:53:46.324952]: 0.004 secs elapsed.
#>  [2024-03-13 10:53:46.326346]: Started.
#>  [2024-03-13 10:53:46.32773]: Batch mode enabled.
#>  [2024-03-13 10:53:46.329414]: Done.
#>  [2024-03-13 10:53:46.330814]: 0.004 secs elapsed.
#>  [2024-03-13 10:53:46.332257]: Done.
#>  [2024-03-13 10:53:46.333606]: Cleaning results...
#>  [2024-03-13 10:53:46.369149]: Outputing.
#>  [2024-03-13 10:53:46.371498]: Total 5.43 secs elapsed.
#> $expo
#>     method sample    sig  exposure    type
#>     <char> <char> <fctr>     <num>  <char>
#>  1:     QP  samp1   sig1  2.000000 optimal
#>  2:     QP  samp2   sig1  3.000000 optimal
#>  3:     QP  samp3   sig1  1.000000 optimal
#>  4:     QP  samp4   sig1  1.000000 optimal
#>  5:     QP  samp1   sig2  5.000000 optimal
#>  6:     QP  samp2   sig2  6.000000 optimal
#>  7:     QP  samp3   sig2  9.000000 optimal
#>  8:     QP  samp4   sig2  2.000000 optimal
#>  9:     QP  samp1   sig1  0.333333   Rep_1
#> 10:     QP  samp1   sig2  6.666667   Rep_1
#> 11:     QP  samp1   sig1  0.000000   Rep_2
#> 12:     QP  samp1   sig2  7.000000   Rep_2
#> 13:     QP  samp1   sig1  7.000000   Rep_3
#> 14:     QP  samp1   sig2  0.000000   Rep_3
#> 15:     QP  samp1   sig1  0.000000   Rep_4
#> 16:     QP  samp1   sig2  7.000000   Rep_4
#> 17:     QP  samp1   sig1  0.000000   Rep_5
#> 18:     QP  samp1   sig2  7.000000   Rep_5
#> 19:     QP  samp1   sig1  0.000000   Rep_6
#> 20:     QP  samp1   sig2  7.000000   Rep_6
#> 21:     QP  samp1   sig1  5.333333   Rep_7
#> 22:     QP  samp1   sig2  1.666667   Rep_7
#> 23:     QP  samp1   sig1  0.333333   Rep_8
#> 24:     QP  samp1   sig2  6.666667   Rep_8
#> 25:     QP  samp1   sig1  7.000000   Rep_9
#> 26:     QP  samp1   sig2  0.000000   Rep_9
#> 27:     QP  samp1   sig1  7.000000  Rep_10
#> 28:     QP  samp1   sig2  0.000000  Rep_10
#> 29:     QP  samp2   sig1  0.000000   Rep_1
#> 30:     QP  samp2   sig2  9.000000   Rep_1
#> 31:     QP  samp2   sig1  9.000000   Rep_2
#> 32:     QP  samp2   sig2  0.000000   Rep_2
#> 33:     QP  samp2   sig1  9.000000   Rep_3
#> 34:     QP  samp2   sig2  0.000000   Rep_3
#> 35:     QP  samp2   sig1  9.000000   Rep_4
#> 36:     QP  samp2   sig2  0.000000   Rep_4
#> 37:     QP  samp2   sig1  0.000000   Rep_5
#> 38:     QP  samp2   sig2  9.000000   Rep_5
#> 39:     QP  samp2   sig1  0.000000   Rep_6
#> 40:     QP  samp2   sig2  9.000000   Rep_6
#> 41:     QP  samp2   sig1  0.000000   Rep_7
#> 42:     QP  samp2   sig2  9.000000   Rep_7
#> 43:     QP  samp2   sig1  0.000000   Rep_8
#> 44:     QP  samp2   sig2  9.000000   Rep_8
#> 45:     QP  samp2   sig1  0.000000   Rep_9
#> 46:     QP  samp2   sig2  9.000000   Rep_9
#> 47:     QP  samp2   sig1  9.000000  Rep_10
#> 48:     QP  samp2   sig2  0.000000  Rep_10
#> 49:     QP  samp3   sig1  0.000000   Rep_1
#> 50:     QP  samp3   sig2 10.000000   Rep_1
#> 51:     QP  samp3   sig1  0.000000   Rep_2
#> 52:     QP  samp3   sig2 10.000000   Rep_2
#> 53:     QP  samp3   sig1  0.000000   Rep_3
#> 54:     QP  samp3   sig2 10.000000   Rep_3
#> 55:     QP  samp3   sig1  3.333333   Rep_4
#> 56:     QP  samp3   sig2  6.666667   Rep_4
#> 57:     QP  samp3   sig1  8.333333   Rep_5
#> 58:     QP  samp3   sig2  1.666667   Rep_5
#> 59:     QP  samp3   sig1  0.000000   Rep_6
#> 60:     QP  samp3   sig2 10.000000   Rep_6
#> 61:     QP  samp3   sig1  8.333333   Rep_7
#> 62:     QP  samp3   sig2  1.666667   Rep_7
#> 63:     QP  samp3   sig1  0.000000   Rep_8
#> 64:     QP  samp3   sig2 10.000000   Rep_8
#> 65:     QP  samp3   sig1  3.333333   Rep_9
#> 66:     QP  samp3   sig2  6.666667   Rep_9
#> 67:     QP  samp3   sig1 10.000000  Rep_10
#> 68:     QP  samp3   sig2  0.000000  Rep_10
#> 69:     QP  samp4   sig1  3.000000   Rep_1
#> 70:     QP  samp4   sig2  0.000000   Rep_1
#> 71:     QP  samp4   sig1  3.000000   Rep_2
#> 72:     QP  samp4   sig2  0.000000   Rep_2
#> 73:     QP  samp4   sig1  3.000000   Rep_3
#> 74:     QP  samp4   sig2  0.000000   Rep_3
#> 75:     QP  samp4   sig1  3.000000   Rep_4
#> 76:     QP  samp4   sig2  0.000000   Rep_4
#> 77:     QP  samp4   sig1  3.000000   Rep_5
#> 78:     QP  samp4   sig2  0.000000   Rep_5
#> 79:     QP  samp4   sig1  0.000000   Rep_6
#> 80:     QP  samp4   sig2  3.000000   Rep_6
#> 81:     QP  samp4   sig1  0.000000   Rep_7
#> 82:     QP  samp4   sig2  3.000000   Rep_7
#> 83:     QP  samp4   sig1  3.000000   Rep_8
#> 84:     QP  samp4   sig2  0.000000   Rep_8
#> 85:     QP  samp4   sig1  3.000000   Rep_9
#> 86:     QP  samp4   sig2  0.000000   Rep_9
#> 87:     QP  samp4   sig1  0.000000  Rep_10
#> 88:     QP  samp4   sig2  3.000000  Rep_10
#>     method sample    sig  exposure    type
#> 
#> $error
#>     method sample errors    type
#>     <char> <char>  <num>  <char>
#>  1:     QP  samp1  0.000 optimal
#>  2:     QP  samp2  0.000 optimal
#>  3:     QP  samp3  0.000 optimal
#>  4:     QP  samp4  0.000 optimal
#>  5:     QP  samp1  0.236   Rep_1
#>  6:     QP  samp1  0.283   Rep_2
#>  7:     QP  samp1  0.707   Rep_3
#>  8:     QP  samp1  0.283   Rep_4
#>  9:     QP  samp1  0.283   Rep_5
#> 10:     QP  samp1  0.283   Rep_6
#> 11:     QP  samp1  0.471   Rep_7
#> 12:     QP  samp1  0.236   Rep_8
#> 13:     QP  samp1  0.707   Rep_9
#> 14:     QP  samp1  0.707  Rep_10
#> 15:     QP  samp2  0.424   Rep_1
#> 16:     QP  samp2  0.849   Rep_2
#> 17:     QP  samp2  0.849   Rep_3
#> 18:     QP  samp2  0.849   Rep_4
#> 19:     QP  samp2  0.424   Rep_5
#> 20:     QP  samp2  0.424   Rep_6
#> 21:     QP  samp2  0.424   Rep_7
#> 22:     QP  samp2  0.424   Rep_8
#> 23:     QP  samp2  0.424   Rep_9
#> 24:     QP  samp2  0.849  Rep_10
#> 25:     QP  samp3  0.141   Rep_1
#> 26:     QP  samp3  0.141   Rep_2
#> 27:     QP  samp3  0.141   Rep_3
#> 28:     QP  samp3  0.330   Rep_4
#> 29:     QP  samp3  1.037   Rep_5
#> 30:     QP  samp3  0.141   Rep_6
#> 31:     QP  samp3  1.037   Rep_7
#> 32:     QP  samp3  0.141   Rep_8
#> 33:     QP  samp3  0.330   Rep_9
#> 34:     QP  samp3  1.273  Rep_10
#> 35:     QP  samp4  0.283   Rep_1
#> 36:     QP  samp4  0.283   Rep_2
#> 37:     QP  samp4  0.283   Rep_3
#> 38:     QP  samp4  0.283   Rep_4
#> 39:     QP  samp4  0.283   Rep_5
#> 40:     QP  samp4  0.141   Rep_6
#> 41:     QP  samp4  0.141   Rep_7
#> 42:     QP  samp4  0.283   Rep_8
#> 43:     QP  samp4  0.283   Rep_9
#> 44:     QP  samp4  0.141  Rep_10
#>     method sample errors    type
#> 
#> $cosine
#>     method sample   cosine    type
#>     <char> <char>    <num>  <char>
#>  1:     QP  samp1 1.000000 optimal
#>  2:     QP  samp2 1.000000 optimal
#>  3:     QP  samp3 1.000000 optimal
#>  4:     QP  samp4 1.000000 optimal
#>  5:     QP  samp1 0.895314   Rep_1
#>  6:     QP  samp1 0.795784   Rep_2
#>  7:     QP  samp1 0.925820   Rep_3
#>  8:     QP  samp1 0.915052   Rep_4
#>  9:     QP  samp1 0.634858   Rep_5
#> 10:     QP  samp1 0.967382   Rep_6
#> 11:     QP  samp1 0.982299   Rep_7
#> 12:     QP  samp1 0.995086   Rep_8
#> 13:     QP  samp1 0.908688   Rep_9
#> 14:     QP  samp1 0.991460  Rep_10
#> 15:     QP  samp2 0.909964   Rep_1
#> 16:     QP  samp2 0.960001   Rep_2
#> 17:     QP  samp2 0.977008   Rep_3
#> 18:     QP  samp2 0.993859   Rep_4
#> 19:     QP  samp2 0.973450   Rep_5
#> 20:     QP  samp2 0.986928   Rep_6
#> 21:     QP  samp2 0.828303   Rep_7
#> 22:     QP  samp2 0.892710   Rep_8
#> 23:     QP  samp2 0.973450   Rep_9
#> 24:     QP  samp2 0.918262  Rep_10
#> 25:     QP  samp3 0.682355   Rep_1
#> 26:     QP  samp3 0.887369   Rep_2
#> 27:     QP  samp3 0.996748   Rep_3
#> 28:     QP  samp3 0.964274   Rep_4
#> 29:     QP  samp3 0.949101   Rep_5
#> 30:     QP  samp3 0.949671   Rep_6
#> 31:     QP  samp3 0.997805   Rep_7
#> 32:     QP  samp3 0.949671   Rep_8
#> 33:     QP  samp3 0.964274   Rep_9
#> 34:     QP  samp3 0.944911  Rep_10
#> 35:     QP  samp4 0.956183   Rep_1
#> 36:     QP  samp4 0.956183   Rep_2
#> 37:     QP  samp4 0.956183   Rep_3
#> 38:     QP  samp4 0.801784   Rep_4
#> 39:     QP  samp4 0.836660   Rep_5
#> 40:     QP  samp4 0.986928   Rep_6
#> 41:     QP  samp4 0.713506   Rep_7
#> 42:     QP  samp4 0.836660   Rep_8
#> 43:     QP  samp4 0.836660   Rep_9
#> 44:     QP  samp4 0.713506  Rep_10
#>     method sample   cosine    type
#> 
#> $p_val
#>    sample method threshold    sig      p_value
#>    <char> <char>    <char> <char>        <num>
#> 1:  samp1     QP      0.05   sig1 0.0277068123
#> 2:  samp1     QP      0.05   sig2 0.0024736045
#> 3:  samp2     QP      0.05   sig1 0.0303471317
#> 4:  samp2     QP      0.05   sig2 0.0041413035
#> 5:  samp3     QP      0.05   sig1 0.0279108829
#> 6:  samp3     QP      0.05   sig2 0.0005029653
#> 7:  samp4     QP      0.05   sig1 0.0010629845
#> 8:  samp4     QP      0.05   sig2 0.0680670588
#>