class Statsample::Reliability::SkillScaleAnalysis

Analysis of a Skill Scale Given a dataset with results and a correct answers hash, generates a ScaleAnalysis

Usage

x1=%Q{a b b c}.to_vector
x2=%Q{b a b c}.to_vector
x3=%Q{a c b a}.to_vector
ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3}.to_dataset
key={'x1'=>'a','x2'=>'b','x3'=>'a'}    
ssa=Statsample::Reliability::SkillScaleAnalysis.new(ds,key)
puts ssa.summary

Analysis of a Skill Scale Given a dataset with results and a correct answers hash, generates a ScaleAnalysis

Usage

x1=%Q{a b b c}.to_vector
x2=%Q{b a b c}.to_vector
x3=%Q{a c b a}.to_vector
ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3}.to_dataset
key={'x1'=>'a','x2'=>'b','x3'=>'a'}    
ssa=Statsample::Reliability::SkillScaleAnalysis.new(ds,key)
puts ssa.summary

Attributes

name[RW]
summary_minimal_item_correlation[RW]
summary_show_problematic_items[RW]

Public Class Methods

new(ds,key,opts=Hash.new) click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 19
def initialize(ds,key,opts=Hash.new)
  opts_default={
    :name=>_("Skill Scale Reliability Analysis (%s)") % ds.name,
    :summary_minimal_item_correlation=>0.10,
    :summary_show_problematic_items=>true
  }
  @ds=ds
  @key=key
  @opts=opts_default.merge(opts)
  @opts.each{|k,v| self.send("#{k}=",v) if self.respond_to? k }
  @cds=nil
end

Public Instance Methods

corrected_dataset() click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 54
def corrected_dataset
  if @cds.nil?
    @cds=@ds.dup_empty
    @key.keys.each {|k| @cds[k].type=:scale; @cds[k].name=@ds[k].name}
    @ds.each do |row|
      out={}
      row.each do |k,v|
        if @key.keys.include? k
          if @ds[k].is_valid? v
            out[k]= @key[k]==v ? 1 : 0
          else
            out[k]=nil
          end
        else
          out[k]=v
        end
      end
      @cds.add_case(out,false)
    end
    @cds.update_valid_data
  end
  @cds
end
corrected_dataset_minimal() click to toggle source

Dataset only corrected vectors

# File lib/statsample/reliability/skillscaleanalysis.rb, line 32
def corrected_dataset_minimal
  cds=corrected_dataset
  dsm=@key.keys.inject({}) {|ac,v| ac[v]=cds[v];ac}.to_dataset
  @key.keys.each do |k|
    dsm[k].name=_("%s(corrected)") % @ds[k].name
    dsm[k].labels=@ds[k].labels
  end
  
  dsm.name=_("Corrected dataset from %s") % @ds.name
  dsm
end
report_building(builder) click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 77
def report_building(builder)
  builder.section(:name=>@name) do |s|
    sa=scale_analysis
    s.parse_element(sa)
    if summary_show_problematic_items
      s.section(:name=>_("Problematic Items")) do |spi|
        count=0
        sa.item_total_correlation.each do |k,v|
          if v < summary_minimal_item_correlation
            count+=1
            spi.section(:name=>_("Item: %s") % @ds[k].name) do |spii|
              spii.text _("Correct answer: %s") % @key[k]
              spii.text _("p: %0.3f") % corrected_dataset[k].mean
              props=@ds[k].proportions.inject({}) {|ac,v| ac[v[0]] = v[1].to_f;ac}
              
              spi.table(:name=>"Proportions",:header=>[_("Value"), _("%")]) do |table|
                props.each do |k1,v|
                  table.row [ @ds[k].labeling(k1), "%0.3f" % v]
                end
              end
              
            end
          end
        end
        spi.text _("No problematic items") if count==0
      end
    end
    
  end
end
scale_analysis() click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 49
def scale_analysis
  sa=ScaleAnalysis.new(corrected_dataset_minimal)
  sa.name=_("%s (Scale Analysis)") % @name
  sa
end
vector_mean() click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 46
def vector_mean
  corrected_dataset_minimal.vector_mean
end
vector_sum() click to toggle source
# File lib/statsample/reliability/skillscaleanalysis.rb, line 43
def vector_sum
  corrected_dataset_minimal.vector_sum
end