Class: Statsample::Multiset

Inherits:
Object
  • Object
show all
Defined in:
lib/statsample/multiset.rb

Overview

Multiset joins multiple dataset with the same fields and vectors but with different number of cases. This is the base class for stratified and cluster sampling estimation

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fields) ⇒ Multiset

To create a multiset

  • Multiset.new(%wf2 f3) # define only fields



9
10
11
12
# File 'lib/statsample/multiset.rb', line 9

def initialize(fields)
    @fields=fields
    @datasets={}
end

Instance Attribute Details

#datasetsObject (readonly)

Returns the value of attribute datasets.



6
7
8
# File 'lib/statsample/multiset.rb', line 6

def datasets
  @datasets
end

#fieldsObject (readonly)

Returns the value of attribute fields.



6
7
8
# File 'lib/statsample/multiset.rb', line 6

def fields
  @fields
end

Class Method Details

.new_empty_vectors(fields, ds_names) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/statsample/multiset.rb', line 13

def self.new_empty_vectors(fields,ds_names) 
    ms=Multiset.new(fields)
    ds_names.each{|d|
        ms.add_dataset(d,Dataset.new(fields))
    }
    ms
end

Instance Method Details

#[](i) ⇒ Object



46
47
48
# File 'lib/statsample/multiset.rb', line 46

def[](i)
  @datasets[i]
end

#add_dataset(key, ds) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/statsample/multiset.rb', line 26

def add_dataset(key,ds)
  if(ds.fields!=@fields)
   raise ArgumentError, "Dataset(#{ds.fields.to_s})must have the same fields of the Multiset(#{@fields})"
  else
      @datasets[key]=ds
  end
end

#collect_vector(field) ⇒ Object



41
42
43
44
45
# File 'lib/statsample/multiset.rb', line 41

def collect_vector(field)
  @datasets.collect {|k,v|
    yield k, v[field]
  }
end

#datasets_namesObject



20
21
22
# File 'lib/statsample/multiset.rb', line 20

def datasets_names
    @datasets.keys.sort
end

#n_datasetsObject



23
24
25
# File 'lib/statsample/multiset.rb', line 23

def n_datasets
    @datasets.size
end

#sum_field(field) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/statsample/multiset.rb', line 33

def sum_field(field)
  @datasets.inject(0) {|a,da|
    stratum_name=da[0]
    vector=da[1][field]
    val=yield stratum_name,vector
    a+val
  }
end