summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/compound.rb37
-rw-r--r--test/experiment.rb91
-rw-r--r--test/validation.rb12
3 files changed, 125 insertions, 15 deletions
diff --git a/test/compound.rb b/test/compound.rb
index 06c19a2..6a3c696 100644
--- a/test/compound.rb
+++ b/test/compound.rb
@@ -97,4 +97,41 @@ print c.sdf
c = Compound.from_inchi(inchi)
assert_equal inchi, c.inchi
end
+
+ def test_openbabel_fingerprint
+ [
+ "CC(=O)CC(C)C#N",
+ "CC(=O)CC(C)C",
+ "C(=O)CC(C)C#N",
+ ].each do |smi|
+ c = OpenTox::Compound.from_smiles smi
+ assert_equal c.openbabel_fingerprint("FP4").size, c.fp4.size
+ end
+ end
+
+ def test_fingerprint_neighbors
+ types = ["FP2", "FP3", "FP4", "MACCS"]
+ min_sim = 0.7
+ training_dataset = Dataset.from_csv_file File.join(DATA_DIR,"EPAFHM.csv")
+ [
+ "CC(=O)CC(C)C#N",
+ "CC(=O)CC(C)C",
+ "C(=O)CC(C)C#N",
+ ].each do |smi|
+ c = OpenTox::Compound.from_smiles smi
+ p c.smiles
+ types.each do |type|
+ p type
+ neighbors = c.fingerprint_neighbors({:type => type, :training_dataset_id => training_dataset.id, :min_sim => min_sim})
+ p neighbors.collect{|n| [Compound.find(n.first).smiles,n.last]}
+ if type == "FP4"
+ fp4_neighbors = c.neighbors
+ neighbors.each do |n|
+ p [Compound.find(n.first).smiles,n.last] unless fp4_neighbors.include?(n)
+ assert_includes fp4_neighbors, n
+ end
+ end
+ end
+ end
+ end
end
diff --git a/test/experiment.rb b/test/experiment.rb
index c465d7b..4b54768 100644
--- a/test/experiment.rb
+++ b/test/experiment.rb
@@ -4,27 +4,88 @@ class ExperimentTest < MiniTest::Test
def test_regression_experiment
datasets = [
- "EPAFHM.csv",
- "FDA_v3b_Maximum_Recommended_Daily_Dose_mmol.csv",
+ "EPAFHM.medi.csv",
+ #"EPAFHM.csv",
+ #"FDA_v3b_Maximum_Recommended_Daily_Dose_mmol.csv",
"LOAEL_mmol_corrected_smiles.csv"
+ ]
+ experiment = Experiment.create(
+ :name => "Default regression for datasets #{datasets}.",
+ :dataset_ids => datasets.collect{|d| Dataset.from_csv_file(File.join(DATA_DIR, d)).id},
+ :model_settings => [
+ {
+ :algorithm => "OpenTox::Model::LazarRegression",
+ }
]
- model_algorithms = ["OpenTox::Model::LazarRegression"]
- neighbor_algorithms = ["OpenTox::Algorithm::Neighbor.fingerprint_similarity"]
- prediction_algorithms = ["OpenTox::Algorithm::Regression.weighted_average"]
- neighbor_algorithm_parameters = [{:min_sim => 0.7}]
+ )
+ #experiment.run
+ puts experiment.report.to_yaml
+ assert_equal datasets.size, experiment.results.size
+ experiment.results.each do |dataset_id, result|
+ assert_equal 1, result.size
+ result.each do |r|
+ assert_kind_of BSON::ObjectId, r[:model_id]
+ assert_kind_of BSON::ObjectId, r[:repeated_crossvalidation_id]
+ end
+ end
+ end
+
+ def test_classification_experiment
+
+ datasets = [ "hamster_carcinogenicity.csv" ]
experiment = Experiment.create(
- :name => "Regression for datasets #{datasets}.",
+ :name => "Fminer vs fingerprint classification for datasets #{datasets}.",
:dataset_ids => datasets.collect{|d| Dataset.from_csv_file(File.join(DATA_DIR, d)).id},
- :model_algorithms => model_algorithms,
- :neighbor_algorithms => neighbor_algorithms,
- :neighbor_algorithm_parameters => neighbor_algorithm_parameters,
- :prediction_algorithms => prediction_algorithms,
+ :model_settings => [
+ {
+ :algorithm => "OpenTox::Model::LazarClassification",
+ },{
+ :algorithm => "OpenTox::Model::LazarClassification",
+ :neighbor_algorithm_parameter => {:min_sim => 0.3}
+ },
+ #{
+ #:algorithm => "OpenTox::Model::LazarFminerClassification",
+ #}
+ ]
)
- experiment.run
+ #experiment.run
=begin
- p experiment
- experiment.report
+ experiment = Experiment.find "55f944a22b72ed7de2000000"
=end
- refute_empty experiment.crossvalidation_ids
+ puts experiment.report.to_yaml
+ experiment.results.each do |dataset_id, result|
+ assert_equal 2, result.size
+ result.each do |r|
+ assert_kind_of BSON::ObjectId, r[:model_id]
+ assert_kind_of BSON::ObjectId, r[:repeated_crossvalidation_id]
+ end
+ end
+ end
+
+ def test_regression_fingerprints
+ datasets = [
+ "LOAEL_mmol_corrected_smiles.csv"
+ ]
+ min_sims = [0.3,0.7]
+ types = ["FP2","FP3","FP4","MACCS"]
+ experiment = Experiment.create(
+ :name => "Fminer vs fingerprint classification for datasets #{datasets}.",
+ :dataset_ids => datasets.collect{|d| Dataset.from_csv_file(File.join(DATA_DIR, d)).id},
+ )
+ types.each do |type|
+ min_sims.each do |min_sim|
+ experiment.model_settings << {
+ :algorithm => "OpenTox::Model::LazarRegression",
+ :neighbor_algorithm => "fingerprint_neighbors",
+ :neighbor_algorithm_parameter => {
+ :type => type,
+ :min_sim => min_sim,
+ }
+ }
+ end
+ end
+ experiment.run
+ p experiment.report
+
end
end
diff --git a/test/validation.rb b/test/validation.rb
index a4c3d80..dfa2c81 100644
--- a/test/validation.rb
+++ b/test/validation.rb
@@ -33,4 +33,16 @@ class ValidationTest < MiniTest::Test
#assert cv.weighted_mae < cv.mae
end
+ def test_repeated_crossvalidation
+ dataset = Dataset.from_csv_file "#{DATA_DIR}/hamster_carcinogenicity.csv"
+ model = Model::LazarClassification.create dataset
+ repeated_cv = RepeatedCrossValidation.create model
+ p repeated_cv
+ repeated_cv.crossvalidations.each do |cv|
+ p cv
+ p cv.accuracy
+ assert cv.accuracy > 0.7
+ end
+ end
+
end