summaryrefslogtreecommitdiff
path: root/lib/model.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/model.rb')
-rw-r--r--lib/model.rb30
1 files changed, 12 insertions, 18 deletions
diff --git a/lib/model.rb b/lib/model.rb
index 44b36e6..0d2354f 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -48,7 +48,7 @@ module OpenTox
self
end
- def predict object, use_database_values=true
+ def predict object
t = Time.now
at = Time.now
@@ -79,31 +79,21 @@ module OpenTox
# remove neighbors without prediction_feature
# check for database activities (neighbors may include query compound)
database_activities = nil
+ prediction = {}
if neighbors.collect{|n| n["_id"]}.include? compound.id
database_activities = neighbors.select{|n| n["_id"] == compound.id}.first["features"][prediction_feature.id.to_s]
+ prediction[:database_activities] = database_activities
+ prediction[:warning] = "#{database_activities.size} structures have been removed from neighbors, because they have the same structure as the query compound."
neighbors.delete_if{|n| n["_id"] == compound.id}
end
neighbors.delete_if{|n| n['features'].empty? or n['features'][prediction_feature.id.to_s] == [nil] }
if neighbors.empty?
- prediction = {:value => nil,:confidence => nil,:warning => "Cound not find similar compounds."}
+ prediction.merge!({:value => nil,:confidence => nil,:warning => "Could not find similar compounds with experimental data in the training dataset."})
else
- prediction = Algorithm.run(prediction_algorithm, compound, {:neighbors => neighbors,:training_dataset_id=> training_dataset.id,:prediction_feature_id => prediction_feature.id})
+ prediction.merge!(Algorithm.run(prediction_algorithm, compound, {:neighbors => neighbors,:training_dataset_id=> training_dataset.id,:prediction_feature_id => prediction_feature.id}))
end
- prediction[:database_activities] = database_activities
predictions << prediction
-
-=begin
-# TODO scaled dataset for physchem
- p neighbor_algorithm_parameters
- p (neighbor_algorithm_parameters["feature_dataset_id"])
- d = Dataset.find(neighbor_algorithm_parameters["feature_dataset_id"])
- p d
- p d.class
- if neighbor_algorithm_parameters["feature_dataset_id"] and Dataset.find(neighbor_algorithm_parameters["feature_dataset_id"]).kind_of? ScaledDataset
- p "SCALED"
- end
-=end
end
# serialize result
@@ -116,6 +106,8 @@ module OpenTox
return predictions
when "OpenTox::Dataset"
# prepare prediction dataset
+ measurement_feature = prediction_feature
+ prediction_feature = OpenTox::NumericFeature.find_or_create_by( "name" => measurement_feature.name + " (Prediction)" )
prediction_dataset = LazarPrediction.new(
:name => "Lazar prediction for #{prediction_feature.name}",
:creator => __FILE__,
@@ -125,9 +117,11 @@ module OpenTox
confidence_feature = OpenTox::NumericFeature.find_or_create_by( "name" => "Prediction confidence" )
# TODO move into warnings field
warning_feature = OpenTox::NominalFeature.find_or_create_by("name" => "Warnings")
- prediction_dataset.features = [ prediction_feature, confidence_feature, warning_feature ]
+ prediction_dataset.features = [ prediction_feature, confidence_feature, measurement_feature, warning_feature ]
prediction_dataset.compounds = compounds
- prediction_dataset.data_entries = predictions.collect{|p| [p[:value], p[:database_activities] ? "measured" : p[:confidence] , p[:warning]]}
+ #prediction_dataset.data_entries = predictions.collect{|p| [p[:value], p[:database_activities] ? "measured" : p[:confidence] , p[:warning]]}
+ # TODO fix dataset measurements
+ prediction_dataset.data_entries = predictions.collect{|p| [p[:value], p[:confidence] , p[:dataset_activities].to_s, p[:warning]]}
prediction_dataset.save_all
return prediction_dataset
end