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]