Class: R::Model
- Inherits:
-
Object
- Object
- R::Model
- Defined in:
- lib/rbbt/util/R/model.rb
Constant Summary collapse
- R_METHOD =
:eval
Instance Attribute Summary collapse
-
#formula ⇒ Object
Returns the value of attribute formula.
-
#model_file ⇒ Object
Returns the value of attribute model_file.
-
#name ⇒ Object
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #colClasses(tsv) ⇒ Object
- #exists? ⇒ Boolean
- #fit(tsv, method = 'lm', args = {}) ⇒ Object
-
#initialize(name, formula, data = nil, options = {}) ⇒ Model
constructor
A new instance of Model.
- #predict(tsv, field = "Prediction") ⇒ Object
- #predict_interval(value, interval = 'confidence') ⇒ Object
- #r_options(tsv) ⇒ Object
- #update(tsv, field = "Prediction") ⇒ Object
Constructor Details
#initialize(name, formula, data = nil, options = {}) ⇒ Model
Returns a new instance of Model.
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/rbbt/util/R/model.rb', line 21 def initialize(name, formula, data = nil, = {}) @name = name @formula = formula @options = || {} @model_file = [:model_file] if [:model_file] @model_file ||= Misc.sanitize_filename(File.join([:model_dir], name)) if [:model_dir] if data and not model_file.exists? method = Misc. , :fit fit(data, method || "lm", ) end end |
Instance Attribute Details
#formula ⇒ Object
Returns the value of attribute formula.
20 21 22 |
# File 'lib/rbbt/util/R/model.rb', line 20 def formula @formula end |
#model_file ⇒ Object
Returns the value of attribute model_file.
20 21 22 |
# File 'lib/rbbt/util/R/model.rb', line 20 def model_file @model_file end |
#name ⇒ Object
Returns the value of attribute name.
20 21 22 |
# File 'lib/rbbt/util/R/model.rb', line 20 def name @name end |
Class Method Details
.groom(tsv, formula) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rbbt/util/R/model.rb', line 68 def self.groom(tsv, formula) tsv = tsv.to_list if tsv.type == :single if formula.include? tsv.key_field and not tsv.fields.include? tsv.key_field tsv = tsv.add_field tsv.key_field do |k,v| k end end tsv end |
Instance Method Details
#colClasses(tsv) ⇒ Object
42 43 44 45 46 47 |
# File 'lib/rbbt/util/R/model.rb', line 42 def colClasses(tsv) return nil unless TSV === tsv "c('character', " << (tsv.fields.collect{|f| R.ruby2R(@options[f] ? @options[f].to_s : "NA") } * ", ") << ")" end |
#exists? ⇒ Boolean
124 125 126 |
# File 'lib/rbbt/util/R/model.rb', line 124 def exists? File.exist? model_file end |
#fit(tsv, method = 'lm', args = {}) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/rbbt/util/R/model.rb', line 128 def fit(tsv, method='lm', args = {}) args_str = "" args_str = args.collect{|name,value| [name,R.ruby2R(value)] * "=" } * ", " args_str = ", " << args_str unless args_str.empty? tsv = Model.groom(tsv, formula) FileUtils.mkdir_p File.dirname(model_file) unless File.exist?(File.dirname(model_file)) = (tsv) tsv.R <<-EOF, model = rbbt.model.fit(data, #{formula}, method=#{method}#{args_str}) save(model, file='#{model_file}') data = NULL EOF Open.write(model_file + '.formula', formula) end |
#predict(tsv, field = "Prediction") ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/rbbt/util/R/model.rb', line 93 def predict(tsv, field = "Prediction") case tsv when TSV tsv = Model.groom tsv, formula tsv.R <<-EOF, (tsv) model = rbbt.model.load('#{model_file}'); data.groomed = rbbt.model.groom(data,formula=#{formula}) data$#{field} = predict(model, data.groomed); EOF when Hash res = R.eval_a <<-EOF model = rbbt.model.load('#{model_file}'); predict(model, data.frame(#{R.ruby2R tsv})); EOF Array === tsv.values.first ? res : res.first when Numeric, Array, String field = formula.split("~").last.strip field.gsub!(/log\((.*)\)/,'\1') script = <<-EOF model = rbbt.model.load('#{model_file}'); predict(model, data.frame(#{field} = #{R.ruby2R tsv})); EOF res = R.eval_a script Array === tsv ? res : res.first else raise "Unknown object for predict: #{Misc.fingerprint tsv}" end end |
#predict_interval(value, interval = 'confidence') ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/rbbt/util/R/model.rb', line 80 def predict_interval(value, interval='confidence') field = formula.split("~").last.strip field.gsub!(/log\((.*)\)/,'\1') script = <<-EOF model = rbbt.model.load('#{model_file}'); predict(model, data.frame(#{field} = #{R.ruby2R value}), interval=#{R.ruby2R interval}, level=0.90); EOF res = R.eval_a script Hash[*%w(fit lower upper).zip(res).flatten] end |
#r_options(tsv) ⇒ Object
49 50 51 52 53 |
# File 'lib/rbbt/util/R/model.rb', line 49 def (tsv) {:R_open => "colClasses=#{colClasses(tsv)}", :R_method => (@options[:R_method] || R_METHOD), :source => @options[:source]} end |
#update(tsv, field = "Prediction") ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/rbbt/util/R/model.rb', line 59 def update(tsv, field = "Prediction") tsv.R <<-EOF, (tsv) model = rbbt.model.load('#{model_file}'); model = update(model, data); save(model, file='#{model_file}'); data = NULL EOF end |