Class: Statsample::Regression::Multiple::GslEngine

Inherits:
BaseEngine show all
Defined in:
lib/statsample/regression/multiple/gslengine.rb

Instance Attribute Summary

Attributes inherited from BaseEngine

#cases, #digits, #name, #total_cases, #valid_cases

Class Method Summary collapse

Instance Method Summary collapse

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

#summary

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
54
# 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.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

Class Method Details

._load(data) ⇒ Object


59
60
61
62
# File 'lib/statsample/regression/multiple/gslengine.rb', line 59

def self._load(data)
  h=Marshal.load(data)
  self.new(h['ds'], h['y_var'])
end

Instance Method Details

#_dump(i) ⇒ Object


56
57
58
# File 'lib/statsample/regression/multiple/gslengine.rb', line 56

def _dump(i)
  Marshal.dump({'ds'=>@ds,'y_var'=>@y_var})
end

#build_standarizedObject


100
101
102
103
# File 'lib/statsample/regression/multiple/gslengine.rb', line 100

def build_standarized
  @ds_s=@ds.standardize
  @lr_s=GslEngine.new(@ds_s,@y_var)
end

#coeffsObject


64
65
66
# File 'lib/statsample/regression/multiple/gslengine.rb', line 64

def coeffs
  @coeffs
end

#coeffs_seObject


115
116
117
118
119
120
121
122
123
124
# File 'lib/statsample/regression/multiple/gslengine.rb', line 115

def coeffs_se
  out  = {}
  evcm = estimated_variance_covariance_matrix
  @ds_valid.vectors.to_a.each_with_index do |f,i|
    mi = i+1
    next if f == @y_var
    out[f] = evcm[mi,mi]
  end
  out
end

#constantObject


87
88
89
# File 'lib/statsample/regression/multiple/gslengine.rb', line 87

def constant
  @constant
end

#lr_sObject


94
95
96
97
98
99
# File 'lib/statsample/regression/multiple/gslengine.rb', line 94

def lr_s
  if @lr_s.nil?
    build_standarized
  end
  @lr_s
end

#matrix_resolutionObject


69
70
71
72
73
74
75
76
77
# File 'lib/statsample/regression/multiple/gslengine.rb', line 69

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


104
105
106
# File 'lib/statsample/regression/multiple/gslengine.rb', line 104

def process_s(v)
  lr_s.process(v)
end

#rObject


81
82
83
# File 'lib/statsample/regression/multiple/gslengine.rb', line 81

def r
  Bivariate::pearson(@dy, predicted)
end

#r2Object


78
79
80
# File 'lib/statsample/regression/multiple/gslengine.rb', line 78

def r2
  r**2
end

#sstObject


84
85
86
# File 'lib/statsample/regression/multiple/gslengine.rb', line 84

def sst
  @dy.ss
end

#standarized_coeffsObject


90
91
92
93
# File 'lib/statsample/regression/multiple/gslengine.rb', line 90

def standarized_coeffs
  l=lr_s
  l.coeffs
end

#standarized_residualsObject


108
109
110
111
112
# File 'lib/statsample/regression/multiple/gslengine.rb', line 108

def standarized_residuals
  res=residuals
  red_sd=residuals.sds
  Daru::Vector.new(res.collect {|v| v.quo(red_sd) })
end