module Statsample::Reliability
Public Instance Methods
Second derivative for alfa Parameters n
: Number of items
sx
: mean of variances sxy
: mean of covariances
# File lib/statsample/reliability.rb, line 106 def alfa_second_derivative(n,sx,sxy) (2*(sxy**2)*(sxy-sx)).quo(((sxy*(n-1))+sx)**3) end
First derivative for alfa Parameters n
: Number of items
sx
: mean of variances sxy
: mean of covariances
# File lib/statsample/reliability.rb, line 97 def alpha_first_derivative(n,sx,sxy) (sxy*(sx-sxy)).quo(((sxy*(n-1))+sx)**2) end
Calculate Chonbach's alpha for a given dataset. only uses tuples without missing data
# File lib/statsample/reliability.rb, line 6 def cronbach_alpha(ods) ds=ods.dup_only_valid return nil if ds.vectors.any? {|k,v| v.variance==0} n_items=ds.fields.size return nil if n_items<=1 s2_items=ds.vectors.inject(0) {|ac,v| ac+v[1].variance } total=ds.vector_sum (n_items.quo(n_items-1)) * (1-(s2_items.quo(total.variance))) end
Get Cronbach's alpha from a covariance matrix
# File lib/statsample/reliability.rb, line 57 def cronbach_alpha_from_covariance_matrix(cov) n=cov.row_size raise "covariance matrix should have at least 2 variables" if n < 2 s2=n.times.inject(0) {|ac,i| ac+cov[i,i]} (n.quo(n-1))*(1-(s2.quo(cov.total_sum))) end
Get Cronbach alpha from n
cases, s2
mean
variance and cov
mean covariance
# File lib/statsample/reliability.rb, line 53 def cronbach_alpha_from_n_s2_cov(n,s2,cov) (n.quo(n-1)) * (1-(s2.quo(s2+(n-1)*cov))) end
Calculate Chonbach's alpha for a given dataset using standarized values for every vector. Only uses tuples without missing data Return nil if one or more vectors has 0 variance
# File lib/statsample/reliability.rb, line 21 def cronbach_alpha_standarized(ods) ds=ods.dup_only_valid return nil if ds.vectors.any? {|k,v| v.variance==0} ds=ds.fields.inject({}){|a,f| a[f]=ods[f].standarized; a }.to_dataset cronbach_alpha(ds) end
Returns n necessary to obtain specific alpha given variance and covariance mean of items
# File lib/statsample/reliability.rb, line 65 def n_for_desired_alpha(alpha,s2,cov) # Start with a regular test : 50 items min=2 max=1000 n=50 prev_n=0 epsilon=0.0001 dif=1000 c_a=cronbach_alpha_from_n_s2_cov(n,s2,cov) dif=c_a - alpha while(dif.abs>epsilon and n!=prev_n) prev_n=n if dif<0 min=n n=(n+(max-min).quo(2)).to_i else max=n n=(n-(max-min).quo(2)).to_i end c_a=cronbach_alpha_from_n_s2_cov(n,s2,cov) dif=c_a - alpha #puts "#{n} , #{c_a}" end n end
Returns the number of items to obtain r_d
desired reliability
from r
current reliability, achieved with n
items
# File lib/statsample/reliability.rb, line 45 def n_for_desired_reliability(r,r_d,n=1) return nil if r.nil? (r_d*(1-r)).quo(r*(1-r_d))*n end
Predicted reliability of a test by replicating n
times the
number of items
# File lib/statsample/reliability.rb, line 36 def spearman_brown_prophecy(r,n) (n*r).quo(1+(n-1)*r) end