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

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

Instance Attribute Summary

Attributes inherited from BaseEngine

#name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseEngine

#assign_names, #coeffs_se, #coeffs_t, #coeffs_tolerances, #constant_se, #constant_t, #df_e, #df_r, #estimated_variance_covariance_matrix, #f, #mse, #msr, #predicted, #process, #report_building, #residuals, #se_r2, #significance, #sse, #sse_direct, #ssr, #ssr_direct, #standarized_predicted, #summary, #tolerance, univariate?

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
# 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
  @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



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

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

Instance Method Details

#_dump(i) ⇒ Object



54
55
56
# File 'lib/statsample/regression/multiple/gslengine.rb', line 54

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

#build_standarizedObject



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

#coeffsObject



62
63
64
# File 'lib/statsample/regression/multiple/gslengine.rb', line 62

def coeffs
  @coeffs
end

#constantObject



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

def constant
  @constant
end

#lr_sObject



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_resolutionObject

Coefficients using a constant Based on www.xycoon.com/ols1.htm



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

def matrix_resolution
  mse_p=mse
  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

#rObject



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

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

#r2Object



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

def r2
  r**2
end

#sstObject



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

def sst
  @dy.ss
end

#standarized_coeffsObject



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

def standarized_coeffs
  l=lr_s
  l.coeffs
end

#standarized_residualsObject

???? 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(:scale)
end