class Statsample::GLM::IRLS::Base

Attributes

coefficients[R]
degree_of_freedom[R]
fitted_mean_values[R]
iterations[R]
residuals[R]
standard_error[R]

Public Class Methods

new(data_set, dependent, opts={}) click to toggle source
# File lib/statsample-glm/glm/irls/base.rb, line 9
def initialize data_set, dependent, opts={}
  @data_set  = data_set.to_matrix
  @dependent = dependent
  @opts      = opts

  irls
end

Private Instance Methods

create_vector(arr) click to toggle source
# File lib/statsample-glm/glm/irls/base.rb, line 46
def create_vector arr
  Daru::Vector.new(arr)
end
irls() click to toggle source
# File lib/statsample-glm/glm/irls/base.rb, line 19
def irls
  max_iter   = @opts[:iterations]
  b          = Matrix.column_vector Array.new(@data_set.column_size,0.0)

  1.upto(max_iter) do
    intermediate = (hessian(@data_set,b).inverse * 
                    jacobian(@data_set, b, @dependent))
    b_new        = b - intermediate

    if((b_new - b).map(&:abs)).to_a.flatten.inject(:+) < @opts[:epsilon]
      b = b_new
      break
    end
    b = b_new
  end

  @coefficients       = create_vector(b.column_vectors[0])
  @iterations         = max_iter
  @standard_error     = hessian(@data_set,b).inverse
                                            .diagonal
                                            .map{ |x| -x}
                                            .map{ |y| Math.sqrt(y) }
  @fitted_mean_values = create_vector measurement(@data_set,b).to_a.flatten
  @residuals          = @dependent - @fitted_mean_values
  @degree_of_freedom  = @dependent.count - @data_set.column_size
end