class Statsample::Reliability::ScaleAnalysis

Analysis of a Scale. Analoge of Scale Reliability analysis on SPSS. Returns several statistics for complete scale and each item

Usage

@x1=[1,1,1,1,2,2,2,2,3,3,3,30].to_vector(:scale)
@x2=[1,1,1,2,2,3,3,3,3,4,4,50].to_vector(:scale)
@x3=[2,2,1,1,1,2,2,2,3,4,5,40].to_vector(:scale)
@x4=[1,2,3,4,4,4,4,3,4,4,5,30].to_vector(:scale)
ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3,'x4'=>@x4}.to_dataset
ia=Statsample::Reliability::ScaleAnalysis.new(ds)
puts ia.summary

Analysis of a Scale. Analoge of Scale Reliability analysis on SPSS. Returns several statistics for complete scale and each item

Usage

@x1=[1,1,1,1,2,2,2,2,3,3,3,30].to_vector(:scale)
@x2=[1,1,1,2,2,3,3,3,3,4,4,50].to_vector(:scale)
@x3=[2,2,1,1,1,2,2,2,3,4,5,40].to_vector(:scale)
@x4=[1,2,3,4,4,4,4,3,4,4,5,30].to_vector(:scale)
ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3,'x4'=>@x4}.to_dataset
ia=Statsample::Reliability::ScaleAnalysis.new(ds)
puts ia.summary

Attributes

alpha[R]
alpha_standarized[R]
cov_m[R]
covariances_mean[R]
ds[R]
mean[R]
name[RW]
sd[R]
summary_histogram[RW]
valid_n[R]
variances_mean[R]

Public Class Methods

new(ds, opts=Hash.new) click to toggle source
# File lib/statsample/reliability/scaleanalysis.rb, line 18
def initialize(ds, opts=Hash.new)
  @dumped=ds.fields.find_all {|f|
    ds[f].variance==0
  }
  
  @ods=ds
  @ds=ds.dup_only_valid(ds.fields - @dumped)
  @ds.name=ds.name
  
  @k=@ds.fields.size        
  @total=@ds.vector_sum
  @o_total=@dumped.size > 0 ? @ods.vector_sum : nil
  
  @vector_mean=@ds.vector_mean
  @item_mean=@vector_mean.mean
  @item_sd=@vector_mean.sd
  
  @mean=@total.mean
  @median=@total.median
  
  @skew=@total.skew
  @kurtosis=@total.kurtosis
  @sd = @total.sd
  @variance=@total.variance
  @valid_n = @total.size
  opts_default={
    :name=>_("Reliability Analysis"),
    :summary_histogram=>true
  }
  @opts=opts_default.merge(opts)
  @opts.each{|k,v| self.send("#{k}=",v) if self.respond_to? k }
  
  @cov_m=Statsample::Bivariate.covariance_matrix(@ds)
  # Mean for covariances and variances
  @variances=@k.times.map {|i| @cov_m[i,i]}.to_scale
  @variances_mean=@variances.mean
  @covariances_mean=(@variance-@variances.sum).quo(@k**2-@k)
  #begin
    @alpha = Statsample::Reliability.cronbach_alpha(@ds)
    @alpha_standarized = Statsample::Reliability.cronbach_alpha_standarized(@ds)
  #rescue => e
  #  raise DatasetException.new(@ds,e), "Error calculating alpha"
  #end
end

Public Instance Methods

item_characteristic_curve() click to toggle source

Returns a hash with structure

# File lib/statsample/reliability/scaleanalysis.rb, line 63
def item_characteristic_curve
  i=0
  out={}
  total={}
  @ds.each do |row|
    tot=@total[i]
    @ds.fields.each do |f|
      out[f]||= {}
      total[f]||={}
      out[f][tot]||= 0
      total[f][tot]||=0
      out[f][tot]+= row[f]
      total[f][tot]+=1
    end
    i+=1
  end
  total.each do |f,var|
    var.each do |tot,v|
      out[f][tot]=out[f][tot].quo(total[f][tot])
    end
  end
  out
end
item_difficulty_analysis() click to toggle source

Returns a dataset with cases ordered by score and variables ordered by difficulty

# File lib/statsample/reliability/scaleanalysis.rb, line 111
def item_difficulty_analysis
  dif={}
  @ds.fields.each{|f| dif[f]=@ds[f].mean }
  dif_sort=dif.sort{|a,b| -(a[1]<=>b[1])}
  scores_sort={}
  scores=@ds.vector_mean
  scores.each_index{|i| scores_sort[i]=scores[i] }
  scores_sort=scores_sort.sort{|a,b| a[1]<=>b[1]}
  ds_new=Statsample::Dataset.new(['case','score'] + dif_sort.collect{|a,b| a})
  scores_sort.each do |i,score|
    row=[i, score]
    case_row=@ds.case_as_hash(i)
    dif_sort.each{|variable,dif_value| row.push(case_row[variable]) }
    ds_new.add_case_array(row)
  end
  ds_new.update_valid_data
  ds_new
end
item_statistics() click to toggle source
# File lib/statsample/reliability/scaleanalysis.rb, line 102
def item_statistics
    @is||=@ds.fields.inject({}) do |a,v|
      a[v]={:mean=>@ds[v].mean, :sds=>Math::sqrt(@cov_m.variance(v))}
      a
    end
end
item_total_correlation() click to toggle source

Adjusted R.P.B. for each item

Adjusted RPB(Point biserial-correlation) for each item

# File lib/statsample/reliability/scaleanalysis.rb, line 89
def item_total_correlation
  @itc||=@ds.fields.inject({}) do |a,v|
    vector=@ds[v].clone
    ds2=@ds.clone
    ds2.delete_vector(v)
    total=ds2.vector_sum
    a[v]=Statsample::Bivariate.pearson(vector,total)
    a
  end
end
mean_rpb() click to toggle source
# File lib/statsample/reliability/scaleanalysis.rb, line 99
def mean_rpb
  item_total_correlation.values.to_scale.mean
end
stats_if_deleted() click to toggle source
# File lib/statsample/reliability/scaleanalysis.rb, line 130
def stats_if_deleted
  @sif||=stats_if_deleted_intern
end