Class: Statsample::Regression::Multiple::AlglibEngine

Inherits:
BaseEngine
  • Object
show all
Defined in:
lib/statsample/regression/multiple/alglibengine.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, #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) ⇒ AlglibEngine

Returns a new instance of AlglibEngine.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/statsample/regression/multiple/alglibengine.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=[]
  @ds.fields.each{|f|
      if f!=@y_var
          columns.push(@ds[f].to_a)
          @fields.push(f)
      end
  }
  @dep_columns=columns.dup
  columns.push(@ds[@y_var])
  matrix=Matrix.columns(columns)
  @lr_s=nil
  @lr=::Alglib::LinearRegression.build_from_matrix(matrix)
  @coeffs=assign_names(@lr.coeffs)
  
end

Class Method Details

._load(data) ⇒ Object



47
48
49
50
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 47

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

Instance Method Details

#_dump(i) ⇒ Object



44
45
46
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 44

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

#build_standarizedObject



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 89

def build_standarized
    @ds_s=@ds.standarize
    columns=[]
    @ds_s.fields.each{|f|
        columns.push(@ds_s[f].to_a) unless f==@y_var
    }
    @dep_columns_s=columns.dup
    columns.push(@ds_s[@y_var])
    matrix=Matrix.columns(columns)
    @lr_s=Alglib::LinearRegression.build_from_matrix(matrix)
end

#coeffsObject



52
53
54
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 52

def coeffs
    @coeffs
end

#constantObject



76
77
78
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 76

def constant
    @lr.constant
end

#lr_sObject



83
84
85
86
87
88
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 83

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



57
58
59
60
61
62
63
64
65
66
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 57

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(v) ⇒ Object



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

def process(v)
    @lr.process(v)
end

#process_s(v) ⇒ Object



103
104
105
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 103

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

#rObject



70
71
72
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 70

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

#r2Object



67
68
69
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 67

def r2
    r**2
end

#sstObject



73
74
75
# File 'lib/statsample/regression/multiple/alglibengine.rb', line 73

def sst
    @dy.ss
end

#standarized_coeffsObject



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

def standarized_coeffs
    l=lr_s
    assign_names(l.coeffs)
end

#standarized_residualsObject

???? Not equal to SPSS output



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

def standarized_residuals
    res=residuals
    red_sd=residuals.sds
    res.collect {|v|
        v.quo(red_sd)
    }.to_vector(:scale)
end