summaryrefslogtreecommitdiff
path: root/test/nanoparticles.rb
blob: c489cb78afada3b3333656bc8cd6adc3d4b086aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
require_relative "setup.rb"


class NanoparticleTest  < MiniTest::Test
  include OpenTox::Validation

  def setup
    @training_dataset = Dataset.where(:name => "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles").first
    unless @training_dataset
      Import::Enanomapper.import File.join(File.dirname(__FILE__),"data","enm")
      @training_dataset = Dataset.where(name: "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles").first
    end
    @prediction_feature = @training_dataset.features.select{|f| f["name"] == 'log2(Net cell association)'}.first
  end

  def test_create_model
    model = Model::Lazar.create training_dataset: @training_dataset, prediction_feature: @prediction_feature
    nanoparticle = @training_dataset.nanoparticles[-34]
    prediction = model.predict nanoparticle
    refute_nil prediction[:value]
    assert_includes nanoparticle.dataset_ids, @training_dataset.id
    assert true, @prediction_feature.measured
    model.delete
  end

  def test_validate_default_nanoparticle_model
    model = Model::Lazar.create training_dataset: @training_dataset, prediction_feature: @prediction_feature
    cv = CrossValidation.create model
    p cv.rmse
    p cv.r_squared
    #File.open("tmp.pdf","w+"){|f| f.puts cv.correlation_plot}
    refute_nil cv.r_squared
    refute_nil cv.rmse
  end

  def test_validate_pls_nanoparticle_model
    algorithms = {
      :descriptors => { :types => ["P-CHEM"] },
      :prediction => {:parameters => 'pls' },
    }
    model = Model::Lazar.create prediction_feature: @prediction_feature, training_dataset: @training_dataset, algorithms: algorithms
    assert_equal "pls", model.algorithms[:prediction][:parameters]
    assert_equal "Algorithm::Caret.regression", model.algorithms[:prediction][:method]
    cv = CrossValidation.create model
    p cv.rmse
    p cv.r_squared
    refute_nil cv.r_squared
    refute_nil cv.rmse
  end

  def test_validate_proteomics_pls_nanoparticle_model
    algorithms = {
      :descriptors => { :types => ["Proteomics"] },
      :prediction => { :parameters => 'pls' }
    }
    model = Model::Lazar.create prediction_feature: @prediction_feature, training_dataset: @training_dataset, algorithms: algorithms
    assert_equal "pls", model.algorithms[:prediction][:parameters]
    assert_equal "Algorithm::Caret.regression", model.algorithms[:prediction][:method]
    cv = CrossValidation.create model
    p cv.rmse
    p cv.r_squared
    refute_nil cv.r_squared
    refute_nil cv.rmse
  end

  def test_validate_all_default_nanoparticle_model
    algorithms = {
      :descriptors => {
        :types => ["Proteomics","P-CHEM"]
      },
    }
    model = Model::Lazar.create prediction_feature: @prediction_feature, training_dataset: @training_dataset, algorithms: algorithms
    cv = CrossValidation.create model
    p cv.rmse
    p cv.r_squared
    refute_nil cv.r_squared
    refute_nil cv.rmse
  end

  def test_export
    skip
    Dataset.all.each do |d|
      puts d.to_csv
    end
  end

  def test_import_ld
    skip
    dataset_ids = Import::Enanomapper.import_ld
  end
end