summaryrefslogtreecommitdiff
path: root/lib/nanoparticle.rb
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2016-06-02 12:22:39 +0200
committerChristoph Helma <helma@in-silico.ch>2016-06-02 12:22:39 +0200
commit85f2308c101b4778508c2d767e08af4cfd671b7b (patch)
treeb8cf95fee2abffad183fe9b5e458baea1aad820e /lib/nanoparticle.rb
parent458a2d753551ea607f2ed5efdd0ac0a02d55d673 (diff)
local pls regression for nanoparticles
Diffstat (limited to 'lib/nanoparticle.rb')
-rw-r--r--lib/nanoparticle.rb13
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/nanoparticle.rb b/lib/nanoparticle.rb
index ca79a3d..65aab23 100644
--- a/lib/nanoparticle.rb
+++ b/lib/nanoparticle.rb
@@ -6,9 +6,10 @@ module OpenTox
field :core, type: Hash, default: {}
field :coating, type: Array, default: []
field :proteomics, type: Hash, default: {}
+
+ attr_accessor :scaled_values
def physchem_neighbors min_sim: 0.9, dataset_id:, prediction_feature_id:
- p self.name
dataset = Dataset.find(dataset_id)
relevant_features = {}
measurements = []
@@ -52,7 +53,9 @@ module OpenTox
common_descriptors = relevant_features.keys & substance.physchem_descriptors.keys
# scale values
query_descriptors = common_descriptors.collect{|d| (physchem_descriptors[d].median-relevant_features[d]["mean"])/relevant_features[d]["sd"]}
+ @scaled_values = common_descriptors.collect{|d| [d,(physchem_descriptors[d].median-relevant_features[d]["mean"])/relevant_features[d]["sd"]]}.to_h
neighbor_descriptors = common_descriptors.collect{|d| (substance.physchem_descriptors[d].median-relevant_features[d]["mean"])/relevant_features[d]["sd"]}
+ neighbor_scaled_values = common_descriptors.collect{|d| [d,(substance.physchem_descriptors[d].median-relevant_features[d]["mean"])/relevant_features[d]["sd"]]}.to_h
#weights = common_descriptors.collect{|d| 1-relevant_features[d]["p_value"]}
weights = common_descriptors.collect{|d| relevant_features[d]["r"]**2}
sim = Algorithm::Similarity.weighted_cosine(query_descriptors,neighbor_descriptors,weights)
@@ -61,12 +64,16 @@ module OpenTox
"measurements" => values,
"similarity" => sim,
"common_descriptors" => common_descriptors.collect do |id|
- {:id => id, :p_value => relevant_features[id]["p_value"], :r_squared => relevant_features[id]["r"]**2}
+ {
+ :id => id,
+ :scaled_value => neighbor_scaled_values[id],
+ :p_value => relevant_features[id]["p_value"],
+ :r_squared => relevant_features[id]["r"]**2}
end
} if sim >= min_sim
end
end
- p neighbors.size
+ $logger.debug "#{self.name}: #{neighbors.size} neighbors"
neighbors.sort!{|a,b| b["similarity"] <=> a["similarity"]}
neighbors
end