# Module: Statsample::CovariateMatrix

Includes:
NamedMatrix
Defined in:
lib/statsample/matrix.rb

## Overview

Module to add method for variance/covariance and correlation matrices

## Usage

``````matrix=Matrix[[1,2],[2,3]]
matrix.extend CovariateMatrix
``````

## Constant Summary collapse

@@covariatematrix =
`0`

## Instance Method Summary collapse

• Get type of covariate matrix.

• Select a submatrix of factors.

• Get variance for field k.

#summary

## Instance Method Details

### #_type ⇒ Object

Get type of covariate matrix. Could be :covariance or :correlation

 ``` 228 229 230 231 232 233 234 235 236 237 238 239``` ```# File 'lib/statsample/matrix.rb', line 228 def _type if row_size==column_size if row_size.times.find {|i| self[i,i]!=1.0} :covariance else :correlation end else @type end end```

### #_type=(t) ⇒ Object

 ``` 240 241 242``` ```# File 'lib/statsample/matrix.rb', line 240 def _type=(t) @type=t end```

### #correlation ⇒ Object

 ``` 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262``` ```# File 'lib/statsample/matrix.rb', line 243 def correlation if(_type==:covariance) matrix=Matrix.rows(row_size.times.collect { |i| column_size.times.collect { |j| if i==j 1.0 else self[i,j].quo(Math::sqrt(self[i,i])*Math::sqrt(self[j,j])) end } }) matrix.extend CovariateMatrix matrix.fields_x=fields_x matrix.fields_y=fields_y matrix._type=:correlation matrix else self end end```

### #get_new_name ⇒ Object

 ``` 271 272 273 274``` ```# File 'lib/statsample/matrix.rb', line 271 def get_new_name @@covariatematrix+=1 _("Covariate matrix %d") % @@covariatematrix end```

### #report_building(generator) ⇒ Object

 ``` 320 321 322 323 324 325 326 327 328 329``` ```# File 'lib/statsample/matrix.rb', line 320 def report_building(generator) @name||= (_type==:correlation ? _("Correlation"):_("Covariance"))+_(" Matrix") generator.table(:name=>@name, :header=>[""]+fields_y) do |t| row_size.times {|i| t.row([fields_x[i]]+row(i).to_a.collect {|i1| i1.nil? ? "--" : sprintf("%0.3f",i1).gsub("0.",".") }) } end end```

### #submatrix(rows, columns = nil) ⇒ Object

Select a submatrix of factors. If you have a correlation matrix with a, b and c, you could obtain a submatrix of correlations of a and b, b and c or a and b

You could use labels or index to select the factors. If you don't specify columns, its will be equal to rows.

Example:

``````a=Matrix[[1.0, 0.3, 0.2],
[0.3, 1.0, 0.5],
[0.2, 0.5, 1.0]]
a.extend CovariateMatrix
a.fields=%w{a b c}
a.submatrix(%w{c a}, %w{b})
=> Matrix[[0.5],[0.3]]
a.submatrix(%w{c a})
=> Matrix[[1.0, 0.2] , [0.2, 1.0]]
``````

Raises:

• (ArgumentError)
 ``` 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319``` ```# File 'lib/statsample/matrix.rb', line 293 def submatrix(rows,columns = nil) raise ArgumentError, "rows shouldn't be empty" if rows.respond_to? :size and rows.size == 0 columns ||= rows # Convert all fields on index row_index = rows.collect do |v| r = v.is_a?(Numeric) ? v : fields_x.index(v) raise "Index #{v} doesn't exists on matrix" if r.nil? r end column_index = columns.collect do |v| r = v.is_a?(Numeric) ? v : fields_y.index(v) raise "Index #{v} doesn't exists on matrix" if r.nil? r end fx=row_index.collect {|v| fields_x[v]} fy=column_index.collect {|v| fields_y[v]} matrix = Matrix.rows(row_index.collect { |i| column_index.collect { |j| self[i, j] }}) matrix.extend CovariateMatrix matrix.fields_x = fx matrix.fields_y = fy matrix._type = _type matrix end```

### #variance(k) ⇒ Object

Get variance for field k

 ``` 267 268 269``` ```# File 'lib/statsample/matrix.rb', line 267 def variance(k) submatrix([k])[0,0] end```