$:.unshift(File.dirname(__FILE__)+'/../lib/') require 'statsample' require 'test/unit' class StatsampleStatisicsTestCase < Test::Unit::TestCase def initialize(*args) super end def test_is_number assert("10".is_number?) assert("-10".is_number?) assert("0.1".is_number?) assert("-0.1".is_number?) assert("10e3".is_number?) assert("10e-3".is_number?) assert(!"1212-1212-1".is_number?) assert(!"a10".is_number?) assert(!"".is_number?) end def test_chi_square assert_raise TypeError do Statsample::Test.chi_square(1,1) end real=Matrix[[95,95],[45,155]] expected=Matrix[[68,122],[72,128]] assert_nothing_raised do chi=Statsample::Test.chi_square(real,expected) end chi=Statsample::Test.chi_square(real,expected) assert_in_delta(32.53,chi,0.1) end def test_sum_of_codeviated v1=[1,2,3,4,5,6].to_vector(:scale) v2=[6,2,4,10,12,8].to_vector(:scale) assert_equal(23.0, Statsample::Bivariate.sum_of_codeviated(v1,v2)) end def test_pearson v1=[6,5,4,7,8,4,3,2].to_vector(:scale) v2=[2,3,7,8,6,4,3,2].to_vector(:scale) assert_in_delta(0.525,Statsample::Bivariate.pearson(v1,v2), 0.001) v3=[6,2, 1000,1000,5,4,7,8,4,3,2,nil].to_vector(:scale) v4=[2,nil,nil,nil, 3,7,8,6,4,3,2,500].to_vector(:scale) assert_in_delta(0.525,Statsample::Bivariate.pearson(v3,v4),0.001) end def test_matrix_correlation v1=[6,5,4,7,8,4,3,2].to_vector(:scale) v2=[2,3,7,8,6,4,3,2].to_vector(:scale) v3=[6,2, 1000,1000,5,4,7,8].to_vector(:scale) v4=[2,nil,nil,nil, 3,7,8,6].to_vector(:scale) ds={'v1'=>v1,'v2'=>v2,'v3'=>v3,'v4'=>v4}.to_dataset c=Proc.new {|n1,n2|Statsample::Bivariate.pearson(n1,n2)} expected=Matrix[ [c.call(v1,v1),c.call(v1,v2),c.call(v1,v3),c.call(v1,v4)], [c.call(v2,v1),c.call(v2,v2),c.call(v2,v3),c.call(v2,v4)], [c.call(v3,v1),c.call(v3,v2),c.call(v3,v3),c.call(v3,v4)], [c.call(v4,v1),c.call(v4,v2),c.call(v4,v3),c.call(v4,v4)] ] obt=Statsample::Bivariate.correlation_matrix(ds) for i in 0...expected.row_size for j in 0...expected.column_size #puts expected[i,j].inspect #puts obt[i,j].inspect assert_in_delta(expected[i,j], obt[i,j],0.0001,"#{expected[i,j].class}!=#{obt[i,j].class} ") end end #assert_equal(expected,obt) end def test_prop_pearson assert_in_delta(0.42, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.084,94), 94),0.01) assert_in_delta(0.65, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.046,95), 95),0.01) r=0.9 n=100 t=Statsample::Bivariate.t_r(r,n) assert(Statsample::Bivariate.prop_pearson(t,n,:both)<0.05) assert(Statsample::Bivariate.prop_pearson(t,n,:right)<0.05) assert(Statsample::Bivariate.prop_pearson(t,n,:left)>0.05) r=-0.9 n=100 t=Statsample::Bivariate.t_r(r,n) assert(Statsample::Bivariate.prop_pearson(t,n,:both)<0.05) assert(Statsample::Bivariate.prop_pearson(t,n,:right)>0.05) assert(Statsample::Bivariate.prop_pearson(t,n,:left)<0.05) end def test_covariance if HAS_GSL v1=[6,5,4,7,8,4,3,2].to_vector(:scale) v2=[2,3,7,8,6,4,3,2].to_vector(:scale) assert_in_delta(Statsample::Bivariate.covariance(v1,v2), Statsample::Bivariate.covariance_slow(v1,v2), 0.001) end end def test_spearman v1=[86,97,99,100,101,103,106,110,112,113].to_vector(:scale) v2=[0,20,28,27,50,29,7,17,6,12].to_vector(:scale) assert_in_delta(-0.175758,Statsample::Bivariate.spearman(v1,v2),0.0001) end def test_point_biserial c=[1,3,5,6,7,100,200,300,400,300].to_vector(:scale) d=[1,1,1,1,1,0,0,0,0,0].to_vector(:scale) assert_raise TypeError do Statsample::Bivariate.point_biserial(c,d) end assert_in_delta(Statsample::Bivariate.point_biserial(d,c), Statsample::Bivariate.pearson(d,c), 0.0001) end def test_tau v1=[1,2,3,4,5,6,7,8,9,10,11].to_vector(:ordinal) v2=[1,3,4,5,7,8,2,9,10,6,11].to_vector(:ordinal) assert_in_delta(0.6727,Statsample::Bivariate.tau_a(v1,v2),0.001) assert_in_delta(0.6727,Statsample::Bivariate.tau_b((Statsample::Crosstab.new(v1,v2).to_matrix)),0.001) v1=[12,14,14,17,19,19,19,19,19,20,21,21,21,21,21,22,23,24,24,24,26,26,27].to_vector(:ordinal) v2=[11,4,4,2,0,0,0,0,0,0,4,0,4,0,0,0,0,4,0,0,0,0,0].to_vector(:ordinal) assert_in_delta(-0.376201540231705, Statsample::Bivariate.tau_b(Statsample::Crosstab.new(v1,v2).to_matrix),0.001) end def test_gamma m=Matrix[[10,5,2],[10,15,20]] assert_in_delta(0.636,Statsample::Bivariate.gamma(m),0.001) m2=Matrix[[15,12,6,5],[12,8,10,8],[4,6,9,10]] assert_in_delta(0.349,Statsample::Bivariate.gamma(m2),0.001) end def test_estimation_mean v=([42]*23+[41]*4+[36]*1+[32]*1+[29]*1+[27]*2+[23]*1+[19]*1+[16]*2+[15]*2+[14,11,10,9,7]+ [6]*3+[5]*2+[4,3]).to_vector(:scale) assert_equal(50,v.size) assert_equal(1471,v.sum()) limits=Statsample::SRS.mean_confidence_interval_z(v.mean(), v.sds(), v.size,676,0.80) end def test_estimation_proportion # total pop=3042 sam=200 prop=0.19 assert_in_delta(81.8, Statsample::SRS.proportion_total_sd_ep_wor(prop, sam, pop), 0.1) # confidence limits pop=500 sam=100 prop=0.37 a=0.95 l= Statsample::SRS.proportion_confidence_interval_z(prop, sam, pop, a) assert_in_delta(0.28,l[0],0.01) assert_in_delta(0.46,l[1],0.01) end def test_ml if(true) real=[1,1,1,1].to_vector(:scale) pred=[0.0001,0.0001,0.0001,0.0001].to_vector(:scale) # puts Statsample::Bivariate.maximum_likehood_dichotomic(pred,real) end end def test_simple_linear_regression a=[1,2,3,4,5,6].to_vector(:scale) b=[6,2,4,10,12,8].to_vector(:scale) reg = Statsample::Regression::Simple.new_from_vectors(a,b) assert_in_delta((reg.ssr+reg.sse).to_f,reg.sst,0.001) assert_in_delta(Statsample::Bivariate.pearson(a,b),reg.r,0.001) assert_in_delta(2.4,reg.a,0.01) assert_in_delta(1.314,reg.b,0.001) assert_in_delta(0.657,reg.r,0.001) assert_in_delta(0.432,reg.r2,0.001) end end