Method: Statsample::Regression::Multiple::GslEngine#initialize

Defined in:
lib/statsample/regression/multiple/gslengine.rb

#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
54
# File 'lib/statsample/regression/multiple/gslengine.rb', line 20

def initialize(ds,y_var, opts=Hash.new)
  super
  @ds          = ds.reject_values(*Daru::MISSING_VALUES)
  @ds_valid    = @ds
  @valid_cases = @ds_valid.nrows
  @dy          = @ds[@y_var]
  @ds_indep    = ds.dup(ds.vectors.to_a - [y_var])
  # Create a custom matrix
  columns=[]
  @fields=[]
  max_deps = GSL::Matrix.alloc(@ds.nrows, @ds.vectors.size)
  constant_col=@ds.vectors.size-1
  for i in 0...@ds.nrows
    max_deps.set(i,constant_col,1)
  end
  j = 0
  @ds.vectors.each do |f|
    if f != @y_var
      @ds[f].each_index do |i1|
        max_deps.set(i1,j,@ds[f][i1])
      end

      columns.push(@ds[f].to_a)
      @fields.push(f)
      j += 1
    end
  end
  @dep_columns = columns.dup
  @lr_s        = nil
  c, @cov, @chisq, @status = GSL::MultiFit.linear(max_deps, @dy.to_gsl)
  @constant=c[constant_col]
  @coeffs_a=c.to_a.slice(0...constant_col)
  @coeffs=assign_names(@coeffs_a)
  c=nil
end