test/test_factor.rb in statsample-0.14.0 vs test/test_factor.rb in statsample-0.14.1

- old
+ new

@@ -1,13 +1,72 @@ require(File.dirname(__FILE__)+'/helpers_tests.rb') class StatsampleFactorTestCase < MiniTest::Unit::TestCase + include Statsample::Fixtures + def test_antiimage + cor=Matrix[[1,0.964, 0.312],[0.964,1,0.411],[0.312,0.411,1]] + expected=Matrix[[0.062,-0.057, 0.074],[-0.057, 0.057, -0.089], [0.074, -0.089, 0.729]] + ai=Statsample::Factor.anti_image_covariance_matrix(cor) + assert(Matrix.equal_in_delta?(expected, ai, 0.01), "#{expected.to_s} not equal to #{ai.to_s}") + end + def test_kmo + @v1=[1 ,2 ,3 ,4 ,7 ,8 ,9 ,10,14,15,20,50,60,70].to_scale + @v2=[5 ,6 ,11,12,13,16,17,18,19,20,30,0,0,0].to_scale + @v3=[10,3 ,20,30,40,50,80,10,20,30,40,2,3,4].to_scale + # KMO: 0.490 + ds={'v1'=>@v1,'v2'=>@v2,'v3'=>@v3}.to_dataset + cor=Statsample::Bivariate.correlation_matrix(ds) + kmo=Statsample::Factor.kmo(cor) + assert_in_delta(0.667, kmo,0.001) + assert_in_delta(0.81, Statsample::Factor.kmo(harman_817),0.01) + + end + def test_kmo_univariate + m=harman_817 + expected=[0.73,0.76,0.84,0.87,0.53,0.93,0.78,0.86] + m.row_size.times.map {|i| + assert_in_delta(expected[i], Statsample::Factor.kmo_univariate(m,i),0.01) + } + end + def test_parallelanalysis_with_data + samples=100 + variables=10 + iterations=50 + rng = GSL::Rng.alloc() + f1=samples.times.collect {rng.ugaussian()}.to_scale + f2=samples.times.collect {rng.ugaussian()}.to_scale + vectors={} + variables.times do |i| + if i<5 + vectors["v#{i}"]=samples.times.collect {|nv| + f1[nv]*5+f2[nv]*2+rng.ugaussian() + }.to_scale + else + vectors["v#{i}"]=samples.times.collect {|nv| + f2[nv]*5+f1[nv]*2+rng.ugaussian() + }.to_scale + end + + end + ds=vectors.to_dataset + + pa1=Statsample::Factor::ParallelAnalysis.new(ds, :bootstrap_method=>:data, :iterations=>iterations) + pa2=Statsample::Factor::ParallelAnalysis.with_random_data(samples,variables,:iterations=>iterations,:percentil=>95) + 3.times do |n| + var="ev_0000#{n+1}" + assert_in_delta(pa1.ds_eigenvalues[var].mean,pa2.ds_eigenvalues[var].mean,0.04) + end + end def test_parallelanalysis - pa=Statsample::Factor::ParallelAnalysis.with_random_data(305,8,150) + pa=Statsample::Factor::ParallelAnalysis.with_random_data(305,8,:iterations=>100,:percentil=>95) assert_in_delta(1.2454, pa.ds_eigenvalues['ev_00001'].mean, 0.01) assert_in_delta(1.1542, pa.ds_eigenvalues['ev_00002'].mean, 0.01) assert_in_delta(1.0836, pa.ds_eigenvalues['ev_00003'].mean, 0.01) + #puts pa.summary + assert(pa.summary.size>0) + #pa=Statsample::Factor::ParallelAnalysis.with_random_data(305,8,100, 95, true) + #puts pa.summary end def test_map fields=%w{height arm.span forearm lower.leg weight bitro.diameter chest.girth chest.width} m=Matrix[ [ 1, 0.846, 0.805, 0.859, 0.473, 0.398, 0.301, 0.382], @@ -67,11 +126,13 @@ # Tested with R def test_principalaxis matrix=::Matrix[ [1.0, 0.709501601093587, 0.877596585880047, 0.272219316266807], [0.709501601093587, 1.0, 0.291633797330304, 0.871141831433844], [0.877596585880047, 0.291633797330304, 1.0, -0.213373722977167], [0.272219316266807, 0.871141831433844, -0.213373722977167, 1.0]] - fa=Statsample::Factor::PrincipalAxis.new(matrix,:m=>1, :max_iterations=>50) + + fa=Statsample::Factor::PrincipalAxis.new(matrix,:m=>1, :max_iterations=>50) + cm=::Matrix[[0.923],[0.912],[0.507],[0.483]] _test_matrix(cm,fa.component_matrix) h2=[0.852,0.832,0.257,0.233]