Class: Statsample::Factor::MAP
- Includes:
- DirtyMemoize, Summarizable
- Defined in:
- lib/statsample/factor/map.rb
Instance Attribute Summary collapse
-
#eigenvalues ⇒ Object
readonly
Returns the value of attribute eigenvalues.
-
#fm ⇒ Object
readonly
Average squared correlations.
-
#minfm ⇒ Object
readonly
Smallest average squared correlation.
-
#name ⇒ Object
Name of analysis.
-
#number_of_factors ⇒ Object
readonly
Number of factors to retain.
-
#use_gsl ⇒ Object
Returns the value of attribute use_gsl.
Class Method Summary collapse
Instance Method Summary collapse
- #compute ⇒ Object
-
#initialize(matrix, opts = Hash.new) ⇒ MAP
constructor
A new instance of MAP.
-
#report_building(g) ⇒ Object
:nodoc:.
Methods included from Summarizable
Constructor Details
#initialize(matrix, opts = Hash.new) ⇒ MAP
Returns a new instance of MAP.
56 57 58 59 60 61 62 63 64 |
# File 'lib/statsample/factor/map.rb', line 56 def initialize(matrix, opts=Hash.new) @matrix=matrix opts_default={ :use_gsl=>true, :name=>_("Velicer's MAP") } @opts=opts_default.merge(opts) opts_default.keys.each {|k| send("#{k}=", @opts[k]) } end |
Instance Attribute Details
#eigenvalues ⇒ Object (readonly)
Returns the value of attribute eigenvalues.
44 45 46 |
# File 'lib/statsample/factor/map.rb', line 44 def eigenvalues @eigenvalues end |
#fm ⇒ Object (readonly)
Average squared correlations
48 49 50 |
# File 'lib/statsample/factor/map.rb', line 48 def fm @fm end |
#minfm ⇒ Object (readonly)
Smallest average squared correlation
50 51 52 |
# File 'lib/statsample/factor/map.rb', line 50 def minfm @minfm end |
#name ⇒ Object
Name of analysis
43 44 45 |
# File 'lib/statsample/factor/map.rb', line 43 def name @name end |
#number_of_factors ⇒ Object (readonly)
Number of factors to retain
46 47 48 |
# File 'lib/statsample/factor/map.rb', line 46 def number_of_factors @number_of_factors end |
#use_gsl ⇒ Object
Returns the value of attribute use_gsl.
52 53 54 |
# File 'lib/statsample/factor/map.rb', line 52 def use_gsl @use_gsl end |
Class Method Details
.with_dataset(ds, opts = Hash.new) ⇒ Object
53 54 55 |
# File 'lib/statsample/factor/map.rb', line 53 def self.with_dataset(ds,opts=Hash.new) new(ds.correlation_matrix,opts) end |
Instance Method Details
#compute ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/statsample/factor/map.rb', line 65 def compute gsl_m=(use_gsl and Statsample.has_gsl?) ? @matrix.to_gsl : @matrix klass_m=gsl_m.class eigvect,@eigenvalues=gsl_m.eigenvectors_matrix, gsl_m.eigenvalues eigenvalues_sqrt=@eigenvalues.collect {|v| Math.sqrt(v)} loadings=eigvect*(klass_m.diagonal(*eigenvalues_sqrt)) fm=Array.new(@matrix.row_size) ncol=@matrix.column_size fm[0]=(gsl_m.mssq - ncol).quo(ncol*(ncol-1)) (ncol-1).times do |m| puts "MAP:Eigenvalue #{m+1}" if $DEBUG a=use_gsl ? loadings[0..(loadings.row_size-1),0..m] : loadings.minor(0..(loadings.row_size-1),0..m) partcov= gsl_m - (a*a.transpose) d=klass_m.diagonal(*(partcov.diagonal.collect {|v| Math::sqrt(1/v)})) pr=d*partcov*d fm[m+1]=(pr.mssq-ncol).quo(ncol*(ncol-1)) end minfm=fm[0] nfactors=0 @errors=[] fm.each_with_index do |v,s| if defined?(Complex) and v.is_a? ::Complex @errors.push(s) else if v < minfm minfm=v nfactors=s end end end @number_of_factors=nfactors @fm=fm @minfm=minfm end |
#report_building(g) ⇒ Object
:nodoc:
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/statsample/factor/map.rb', line 104 def report_building(g) #:nodoc: g.section(:name=>@name) do |s| s.table(:name=>_("Eigenvalues"),:header=>[_("Value")]) do |t| eigenvalues.each_with_index do |e,i| t.row([@errors.include?(i) ? "*" : "%0.6f" % e]) end end s.table(:name=>_("Velicer's Average Squared Correlations"), :header=>[_("number of components"),_("average square correlation")]) do |t| fm.each_with_index do |v,i| t.row(["%d" % i, @errors.include?(i) ? "*" : "%0.6f" % v]) end end s.text(_("The smallest average squared correlation is : %0.6f" % minfm)) s.text(_("The number of components is : %d" % number_of_factors)) end end |