From 1c3b93a12e3e0563ea8552ef5f120afffeb06c1b Mon Sep 17 00:00:00 2001 From: Gavin Rhys Lloyd Date: Thu, 20 Jul 2023 10:53:55 +0100 Subject: [PATCH] update d-ratio tests --- tests/testthat/test-dratio-filter.R | 121 ++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 7 deletions(-) diff --git a/tests/testthat/test-dratio-filter.R b/tests/testthat/test-dratio-filter.R index d7b9197..7d9eb7c 100644 --- a/tests/testthat/test-dratio-filter.R +++ b/tests/testthat/test-dratio-filter.R @@ -1,12 +1,119 @@ # filter d-ratio -test_that('d-ratio filter works as expected',{ +test_that('d-ratio filter works as expected using sd ratio',{ set.seed('57475') # DatasetExperiment DE = MTBLS79_DatasetExperiment(filtered=TRUE) M = dratio_filter( threshold=20, qc_label = 'QC', - factor_name='Class' + factor_name='Class', + method = 'ratio', + dispersion = 'sd' + ) + M = model_apply(M,DE) + + # manually compute d-ratio + qc_mad=unlist( + lapply(DE$data[DE$sample_meta$Class=='QC',],sd,na.rm=TRUE) + ) + sa_mad=unlist( + lapply(DE$data[DE$sample_meta$Class!='QC',],sd,na.rm=TRUE) + ) + dr = (qc_mad/(sa_mad))*100 + + # check manual vs fcn + expect_true(all(dr==M$d_ratio$d_ratio)) + + # check values havent changed + expect_equal(dr[[1]],23.05762,tolerance = 5e-6) + expect_equal(dr[[100]],64.49242,tolerance = 5e-6) + + # just number of filtered columns + expect_true(ncol(predicted(M))==725) + expect_true(ncol(DE)-ncol(predicted(M))==854) + expect_true(ncol(DE)-ncol(predicted(M))==sum(dr>20)) +}) + +test_that('d-ratio filter works as expected using mad ratio',{ + set.seed('57475') + # DatasetExperiment + DE = MTBLS79_DatasetExperiment(filtered=TRUE) + M = dratio_filter( + threshold=20, + qc_label = 'QC', + factor_name='Class', + method = 'ratio', + dispersion = 'mad' + ) + M = model_apply(M,DE) + + # manually compute d-ratio + qc_mad=unlist( + lapply(DE$data[DE$sample_meta$Class=='QC',],mad,na.rm=TRUE) + ) + sa_mad=unlist( + lapply(DE$data[DE$sample_meta$Class!='QC',],mad,na.rm=TRUE) + ) + dr = (qc_mad/(sa_mad))*100 + + # check manual vs fcn + expect_true(all(dr==M$d_ratio$d_ratio)) + + # check values havent changed + expect_equal(dr[[1]],14.14758,tolerance = 5e-6) + expect_equal(dr[[100]],48.23871,tolerance = 5e-6) + + # just number of filtered columns + expect_true(ncol(predicted(M))==834) + expect_true(ncol(DE)-ncol(predicted(M))==745) + expect_true(ncol(DE)-ncol(predicted(M))==sum(dr>20)) +}) + +test_that('d-ratio filter works as expected using sd euclidean',{ + set.seed('57475') + # DatasetExperiment + DE = MTBLS79_DatasetExperiment(filtered=TRUE) + M = dratio_filter( + threshold=20, + qc_label = 'QC', + factor_name='Class', + method = 'euclidean', + dispersion = 'sd' + ) + M = model_apply(M,DE) + + # manually compute d-ratio + qc_mad=unlist( + lapply(DE$data[DE$sample_meta$Class=='QC',],sd,na.rm=TRUE) + ) + sa_mad=unlist( + lapply(DE$data[DE$sample_meta$Class!='QC',],sd,na.rm=TRUE) + ) + dr = qc_mad/sqrt((qc_mad^2) + (sa_mad^2))*100 + + # check manual vs fcn + expect_true(all(dr==M$d_ratio$d_ratio)) + + # check values havent changed + expect_equal(dr[[1]],22.46809,tolerance = 5e-6) + expect_equal(dr[[100]],54.19862,tolerance = 5e-6) + + # just number of filtered columns + expect_true(ncol(predicted(M))==747) + expect_true(ncol(DE)-ncol(predicted(M))==832) + expect_true(ncol(DE)-ncol(predicted(M))==sum(dr>20)) +}) + +test_that('d-ratio filter works as expected using mad euclidean',{ + set.seed('57475') + # DatasetExperiment + DE = MTBLS79_DatasetExperiment(filtered=TRUE) + M = dratio_filter( + threshold=20, + qc_label = 'QC', + factor_name='Class', + method = 'euclidean', + dispersion = 'mad' ) M = model_apply(M,DE) @@ -17,17 +124,17 @@ test_that('d-ratio filter works as expected',{ sa_mad=unlist( lapply(DE$data[DE$sample_meta$Class!='QC',],mad,na.rm=TRUE) ) - dr = (qc_mad/(qc_mad+sa_mad))*100 + dr = qc_mad/sqrt((qc_mad^2) + (sa_mad^2))*100 # check manual vs fcn expect_true(all(dr==M$d_ratio$d_ratio)) # check values havent changed - expect_equal(dr[[1]],12.39,tolerance = 1e3) - expect_equal(dr[[100]],32.54,tolerance = 1e3) + expect_equal(dr[[1]],14.00808,tolerance = 5e-6) + expect_equal(dr[[100]],43.44776,tolerance = 5e-6) # just number of filtered columns - expect_true(ncol(predicted(M))==1052) - expect_true(ncol(DE)-ncol(predicted(M))==527) + expect_true(ncol(predicted(M))==850) + expect_true(ncol(DE)-ncol(predicted(M))==729) expect_true(ncol(DE)-ncol(predicted(M))==sum(dr>20)) })