Class: Statsample::Regression::Multiple::GslEngine
- Inherits:
-
BaseEngine
- Object
- BaseEngine
- Statsample::Regression::Multiple::GslEngine
- Defined in:
- lib/statsample/regression/multiple/gslengine.rb
Overview
Class for Multiple Regression Analysis Requires rbgsl and uses a listwise aproach. Slower on prediction of values than Alglib, because predict is ruby based. Better memory management on multiple (+1000) series of regression. If you need pairwise, use RubyEngine Example:
@a=[1,3,2,4,3,5,4,6,5,7].to_vector(:numeric)
@b=[3,3,4,4,5,5,6,6,4,4].to_vector(:numeric)
@c=[11,22,30,40,50,65,78,79,99,100].to_vector(:numeric)
@y=[3,4,5,6,7,8,9,10,20,30].to_vector(:numeric)
ds={'a'=>@a,'b'=>@b,'c'=>@c,'y'=>@y}.to_dataset
lr=Statsample::Regression::Multiple::GslEngine.new(ds,'y')
Instance Attribute Summary
Attributes inherited from BaseEngine
#cases, #digits, #name, #total_cases, #valid_cases
Class Method Summary collapse
Instance Method Summary collapse
- #_dump(i) ⇒ Object
- #build_standarized ⇒ Object
- #coeffs ⇒ Object
-
#coeffs_se ⇒ Object
Standard error for coeffs.
- #constant ⇒ Object
-
#initialize(ds, y_var, opts = Hash.new) ⇒ GslEngine
constructor
A new instance of GslEngine.
- #lr_s ⇒ Object
-
#matrix_resolution ⇒ Object
Coefficients using a constant Based on www.xycoon.com/ols1.htm.
- #process_s(v) ⇒ Object
- #r ⇒ Object
- #r2 ⇒ Object
- #sst ⇒ Object
- #standarized_coeffs ⇒ Object
-
#standarized_residuals ⇒ Object
???? Not equal to SPSS output.
Methods inherited from BaseEngine
#anova, #assign_names, #coeffs_t, #coeffs_tolerances, #constant_se, #constant_t, #df_e, #df_r, #estimated_variance_covariance_matrix, #f, #mse, #msr, #predicted, #probability, #process, #r2_adjusted, #report_building, #residuals, #se_estimate, #se_r2, #sse, #sse_direct, #ssr, #ssr_direct, #standarized_predicted, #tolerance, univariate?
Methods included from Summarizable
Constructor Details
#initialize(ds, y_var, opts = Hash.new) ⇒ GslEngine
Returns a new instance of GslEngine.
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 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 20 def initialize(ds,y_var, opts=Hash.new) super @ds=ds.dup_only_valid @ds_valid=@ds @valid_cases=@ds_valid.cases @dy=@ds[@y_var] @ds_indep=ds.dup(ds.fields-[y_var]) # Create a custom matrix columns=[] @fields=[] max_deps = GSL::Matrix.alloc(@ds.cases, @ds.fields.size) constant_col=@ds.fields.size-1 for i in 0...@ds.cases max_deps.set(i,constant_col,1) end j=0 @ds.fields.each{|f| if f!=@y_var @ds[f].each_index{|i1| max_deps.set(i1,j,@ds[f][i1]) } columns.push(@ds[f].to_a) @fields.push(f) j+=1 end } @dep_columns=columns.dup @lr_s=nil c, @cov, @chisq, @status = GSL::MultiFit.linear(max_deps, @dy.gsl) @constant=c[constant_col] @coeffs_a=c.to_a.slice(0...constant_col) @coeffs=assign_names(@coeffs_a) c=nil end |
Class Method Details
._load(data) ⇒ Object
58 59 60 61 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 58 def self._load(data) h=Marshal.load(data) self.new(h['ds'], h['y_var']) end |
Instance Method Details
#_dump(i) ⇒ Object
55 56 57 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 55 def _dump(i) Marshal.dump({'ds'=>@ds,'y_var'=>@y_var}) end |
#build_standarized ⇒ Object
99 100 101 102 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 99 def build_standarized @ds_s=@ds.standarize @lr_s=GslEngine.new(@ds_s,@y_var) end |
#coeffs ⇒ Object
63 64 65 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 63 def coeffs @coeffs end |
#coeffs_se ⇒ Object
Standard error for coeffs
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 116 def coeffs_se out={} evcm=estimated_variance_covariance_matrix @ds_valid.fields.each_with_index do |f,i| mi=i+1 next if f==@y_var out[f]=evcm[mi,mi] end out end |
#constant ⇒ Object
86 87 88 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 86 def constant @constant end |
#lr_s ⇒ Object
93 94 95 96 97 98 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 93 def lr_s if @lr_s.nil? build_standarized end @lr_s end |
#matrix_resolution ⇒ Object
Coefficients using a constant Based on www.xycoon.com/ols1.htm
68 69 70 71 72 73 74 75 76 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 68 def matrix_resolution columns=@dep_columns.dup.map {|xi| xi.map{|i| i.to_f}} columns.unshift([1.0]*@ds.cases) y=Matrix.columns([@dy.data.map {|i| i.to_f}]) x=Matrix.columns(columns) xt=x.t matrix=((xt*x)).inverse*xt matrix*y end |
#process_s(v) ⇒ Object
103 104 105 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 103 def process_s(v) lr_s.process(v) end |
#r ⇒ Object
80 81 82 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 80 def r Bivariate::pearson(@dy, predicted) end |
#r2 ⇒ Object
77 78 79 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 77 def r2 r**2 end |
#sst ⇒ Object
83 84 85 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 83 def sst @dy.ss end |
#standarized_coeffs ⇒ Object
89 90 91 92 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 89 def standarized_coeffs l=lr_s l.coeffs end |
#standarized_residuals ⇒ Object
???? Not equal to SPSS output
107 108 109 110 111 112 113 |
# File 'lib/statsample/regression/multiple/gslengine.rb', line 107 def standarized_residuals res=residuals red_sd=residuals.sds res.collect {|v| v.quo(red_sd) }.to_vector(:numeric) end |