statsample 1.4.1 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -3
  3. data/History.txt +4 -0
  4. data/README.md +4 -0
  5. data/lib/statsample/converter/csv.rb +41 -54
  6. data/lib/statsample/converters.rb +18 -19
  7. data/lib/statsample/version.rb +1 -1
  8. data/test/fixtures/scientific_notation.csv +4 -0
  9. data/test/helpers_tests.rb +37 -38
  10. data/test/test_analysis.rb +96 -97
  11. data/test/test_anova_contrast.rb +22 -22
  12. data/test/test_anovaoneway.rb +12 -12
  13. data/test/test_anovatwoway.rb +16 -17
  14. data/test/test_anovatwowaywithdataset.rb +22 -24
  15. data/test/test_anovawithvectors.rb +67 -69
  16. data/test/test_awesome_print_bug.rb +9 -9
  17. data/test/test_bartlettsphericity.rb +13 -13
  18. data/test/test_bivariate.rb +122 -126
  19. data/test/test_codification.rb +51 -49
  20. data/test/test_crosstab.rb +44 -40
  21. data/test/test_csv.rb +52 -70
  22. data/test/test_dataset.rb +347 -330
  23. data/test/test_dominance_analysis.rb +22 -24
  24. data/test/test_factor.rb +163 -166
  25. data/test/test_factor_map.rb +25 -30
  26. data/test/test_factor_pa.rb +28 -28
  27. data/test/test_ggobi.rb +19 -18
  28. data/test/test_gsl.rb +13 -15
  29. data/test/test_histogram.rb +74 -77
  30. data/test/test_matrix.rb +29 -31
  31. data/test/test_multiset.rb +132 -126
  32. data/test/test_regression.rb +143 -149
  33. data/test/test_reliability.rb +149 -155
  34. data/test/test_reliability_icc.rb +100 -104
  35. data/test/test_reliability_skillscale.rb +38 -40
  36. data/test/test_resample.rb +14 -12
  37. data/test/test_rserve_extension.rb +33 -33
  38. data/test/test_srs.rb +5 -5
  39. data/test/test_statistics.rb +52 -50
  40. data/test/test_stest.rb +27 -28
  41. data/test/test_stratified.rb +10 -10
  42. data/test/test_test_f.rb +17 -17
  43. data/test/test_test_kolmogorovsmirnov.rb +21 -21
  44. data/test/test_test_t.rb +52 -52
  45. data/test/test_umannwhitney.rb +16 -16
  46. data/test/test_vector.rb +419 -410
  47. data/test/test_wilcoxonsignedrank.rb +60 -63
  48. data/test/test_xls.rb +41 -41
  49. metadata +55 -5
  50. data/web/Rakefile +0 -39
@@ -1,41 +1,39 @@
1
- require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
- class StatsampleDominanceAnalysisTestCase < MiniTest::Unit::TestCase
1
+ require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
2
+ class StatsampleDominanceAnalysisTestCase < Minitest::Test
3
3
  def test_dominance_univariate
4
4
  # Example from Budescu (1993)
5
- m=Matrix[[1, 0.683, 0.154, 0.460, 0.618],[0.683, 1, -0.050, 0.297, 0.461], [0.154, -0.050, 1, 0.006, 0.262],[0.460, 0.297, 0.006, 1, 0.507],[0.618, 0.461, 0.262, 0.507, 1]]
5
+ m = Matrix[[1, 0.683, 0.154, 0.460, 0.618], [0.683, 1, -0.050, 0.297, 0.461], [0.154, -0.050, 1, 0.006, 0.262], [0.460, 0.297, 0.006, 1, 0.507], [0.618, 0.461, 0.262, 0.507, 1]]
6
6
  m.extend Statsample::CovariateMatrix
7
- m.fields=%w{x1 x2 x3 x4 y}
8
- da=Statsample::DominanceAnalysis.new(m,'y')
7
+ m.fields = %w(x1 x2 x3 x4 y)
8
+ da = Statsample::DominanceAnalysis.new(m, 'y')
9
9
 
10
- contr_x1={'x2'=>0.003, 'x3'=>0.028, 'x4'=>0.063}
11
- contr_x1.each do |k,v|
10
+ contr_x1 = { 'x2' => 0.003, 'x3' => 0.028, 'x4' => 0.063 }
11
+ contr_x1.each do |k, v|
12
12
  assert_in_delta(v, da.models_data[['x1']].contributions[k], 0.001)
13
13
  end
14
- assert_in_delta(0.052, da.models_data[['x2','x3','x4']].contributions['x1'], 0.001)
15
- expected_dominances=[1, 1, 0.5, 0.5, 0,0]
16
- expected_g_dominances=[1, 1, 1, 1, 0,0]
14
+ assert_in_delta(0.052, da.models_data[%w(x2 x3 x4)].contributions['x1'], 0.001)
15
+ expected_dominances = [1, 1, 0.5, 0.5, 0, 0]
16
+ expected_g_dominances = [1, 1, 1, 1, 0, 0]
17
17
 
18
- da.pairs.each_with_index do |a,i|
19
- assert_equal(expected_dominances[i], da.total_dominance_pairwise(a[0],a[1]))
20
- assert_equal(expected_dominances[i], da.conditional_dominance_pairwise(a[0],a[1]))
21
- assert_equal(expected_g_dominances[i], da.general_dominance_pairwise(a[0],a[1]))
18
+ da.pairs.each_with_index do |a, i|
19
+ assert_equal(expected_dominances[i], da.total_dominance_pairwise(a[0], a[1]))
20
+ assert_equal(expected_dominances[i], da.conditional_dominance_pairwise(a[0], a[1]))
21
+ assert_equal(expected_g_dominances[i], da.general_dominance_pairwise(a[0], a[1]))
22
22
  end
23
- assert(da.summary.size>0)
23
+ assert(da.summary.size > 0)
24
24
  end
25
+
25
26
  def test_dominance_multivariate
26
- m=Matrix[[1.0, -0.19, -0.358, -0.343, 0.359, 0.257], [-0.19, 1.0, 0.26, 0.29, -0.11, -0.11], [-0.358, 0.26, 1.0, 0.54, -0.49, -0.23], [-0.343, 0.29, 0.54, 1.0, -0.22, -0.41], [0.359, -0.11, -0.49, -0.22, 1.0, 0.62], [0.257, -0.11, -0.23, -0.41, 0.62, 1]]
27
+ m = Matrix[[1.0, -0.19, -0.358, -0.343, 0.359, 0.257], [-0.19, 1.0, 0.26, 0.29, -0.11, -0.11], [-0.358, 0.26, 1.0, 0.54, -0.49, -0.23], [-0.343, 0.29, 0.54, 1.0, -0.22, -0.41], [0.359, -0.11, -0.49, -0.22, 1.0, 0.62], [0.257, -0.11, -0.23, -0.41, 0.62, 1]]
27
28
  m.extend Statsample::CovariateMatrix
28
- m.fields=%w{y1 y2 x1 x2 x3 x4}
29
- m2=m.submatrix(%w{y1 x1 x2 x3 x4})
30
-
29
+ m.fields = %w(y1 y2 x1 x2 x3 x4)
30
+ m2 = m.submatrix(%w(y1 x1 x2 x3 x4))
31
31
 
32
- da=Statsample::DominanceAnalysis.new(m, ['y1','y2'], :cases=>683, :method_association=>:p2yx)
32
+ da = Statsample::DominanceAnalysis.new(m, %w(y1 y2), cases: 683, method_association: :p2yx)
33
33
 
34
- contr_x1={'x2'=>0.027, 'x3'=>0.024, 'x4'=>0.017}
35
- contr_x1.each do |k,v|
34
+ contr_x1 = { 'x2' => 0.027, 'x3' => 0.024, 'x4' => 0.017 }
35
+ contr_x1.each do |k, v|
36
36
  assert_in_delta(v, da.models_data[['x1']].contributions[k], 0.003)
37
37
  end
38
-
39
-
40
38
  end
41
39
  end
data/test/test_factor.rb CHANGED
@@ -1,222 +1,219 @@
1
- require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
- #require 'rserve'
3
- #require 'statsample/rserve_extension'
1
+ require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
2
+ # require 'rserve'
3
+ # require 'statsample/rserve_extension'
4
4
 
5
- class StatsampleFactorTestCase < MiniTest::Unit::TestCase
5
+ class StatsampleFactorTestCase < Minitest::Test
6
6
  include Statsample::Fixtures
7
7
  # Based on Hardle and Simar
8
8
  def setup
9
- @fixtures_dir=File.expand_path(File.dirname(__FILE__)+"/fixtures")
9
+ @fixtures_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures')
10
10
  end
11
11
  # Based on Hurdle example
12
12
  def test_covariance_matrix
13
- ds=Statsample::PlainText.read(@fixtures_dir+"/bank2.dat", %w{v1 v2 v3 v4 v5 v6})
13
+ ds = Statsample::PlainText.read(@fixtures_dir + '/bank2.dat', %w(v1 v2 v3 v4 v5 v6))
14
14
  ds.fields.each {|f|
15
- ds[f]=ds[f].centered
15
+ ds[f] = ds[f].centered
16
16
  }
17
- cm=ds.covariance_matrix
18
- pca =Statsample::Factor::PCA.new( cm, :m=>6)
19
- #puts pca.summary
20
- #puts pca.feature_matrix
21
- exp_eig=[2.985, 0.931,0.242, 0.194, 0.085, 0.035].to_scale
17
+ cm = ds.covariance_matrix
18
+ pca = Statsample::Factor::PCA.new(cm, m: 6)
19
+ # puts pca.summary
20
+ # puts pca.feature_matrix
21
+ exp_eig = [2.985, 0.931, 0.242, 0.194, 0.085, 0.035].to_scale
22
22
  assert_similar_vector(exp_eig, pca.eigenvalues.to_scale, 0.1)
23
- pcs=pca.principal_components(ds)
24
- k=6
25
- comp_matrix=pca.component_matrix()
23
+ pcs = pca.principal_components(ds)
24
+ k = 6
25
+ comp_matrix = pca.component_matrix
26
26
  k.times {|i|
27
- pc_id="PC_#{i+1}"
27
+ pc_id = "PC_#{i + 1}"
28
28
  k.times {|j| # variable
29
- ds_id="v#{j+1}"
30
- r= Statsample::Bivariate.correlation(ds[ds_id], pcs[pc_id])
31
- assert_in_delta( r, comp_matrix[j,i])
32
- }
29
+ ds_id = "v#{j + 1}"
30
+ r = Statsample::Bivariate.correlation(ds[ds_id], pcs[pc_id])
31
+ assert_in_delta(r, comp_matrix[j, i])
32
+ }
33
33
  }
34
-
35
34
  end
35
+
36
36
  def test_principalcomponents_ruby_gsl
37
-
38
- ran=Distribution::Normal.rng
39
-
40
- # @r=::Rserve::Connection.new
41
-
42
- samples=20
43
- [3,5,7].each {|k|
44
- v={}
45
- v["x0"]=samples.times.map { ran.call()}.to_scale.centered
37
+ ran = Distribution::Normal.rng
38
+
39
+ # @r=::Rserve::Connection.new
40
+
41
+ samples = 20
42
+ [3, 5, 7].each {|k|
43
+ v = {}
44
+ v['x0'] = samples.times.map { ran.call }.to_scale.centered
46
45
  (1...k).each {|i|
47
- v["x#{i}"]=samples.times.map {|ii| ran.call()*0.5+v["x#{i-1}"][ii]*0.5}.to_scale.centered
46
+ v["x#{i}"] = samples.times.map { |ii| ran.call * 0.5 + v["x#{i - 1}"][ii] * 0.5 }.to_scale.centered
48
47
  }
49
-
50
- ds=v.to_dataset
51
- cm=ds.covariance_matrix
52
- # @r.assign('ds',ds)
53
- # @r.eval('cm<-cor(ds);sm<-eigen(cm, sym=TRUE);v<-sm$vectors')
54
- # puts "eigenvalues"
55
- # puts @r.eval('v').to_ruby.to_s
56
- pca_ruby=Statsample::Factor::PCA.new( cm, :m=>k, :use_gsl=>false )
57
- pca_gsl =Statsample::Factor::PCA.new( cm, :m=>k, :use_gsl=>true )
48
+
49
+ ds = v.to_dataset
50
+ cm = ds.covariance_matrix
51
+ # @r.assign('ds',ds)
52
+ # @r.eval('cm<-cor(ds);sm<-eigen(cm, sym=TRUE);v<-sm$vectors')
53
+ # puts "eigenvalues"
54
+ # puts @r.eval('v').to_ruby.to_s
55
+ pca_ruby = Statsample::Factor::PCA.new(cm, m: k, use_gsl: false)
56
+ pca_gsl = Statsample::Factor::PCA.new(cm, m: k, use_gsl: true)
58
57
  pc_ruby = pca_ruby.principal_components(ds)
59
58
  pc_gsl = pca_gsl.principal_components(ds)
60
59
  # Test component matrix correlation!
61
- cm_ruby=pca_ruby.component_matrix
62
- #puts cm_ruby.summary
60
+ cm_ruby = pca_ruby.component_matrix
61
+ # puts cm_ruby.summary
63
62
  k.times {|i|
64
- pc_id="PC_#{i+1}"
65
- assert_in_delta(pca_ruby.eigenvalues[i], pca_gsl.eigenvalues[i],1e-10)
63
+ pc_id = "PC_#{i + 1}"
64
+ assert_in_delta(pca_ruby.eigenvalues[i], pca_gsl.eigenvalues[i], 1e-10)
66
65
  # Revert gsl component values
67
- pc_gsl_data= (pc_gsl[pc_id][0]-pc_ruby[pc_id][0]).abs>1e-6 ? pc_gsl[pc_id].recode {|v| -v} : pc_gsl[pc_id]
68
- assert_similar_vector(pc_gsl_data, pc_ruby[pc_id], 1e-6,"PC for #{k} variables")
66
+ pc_gsl_data = (pc_gsl[pc_id][0] - pc_ruby[pc_id][0]).abs > 1e-6 ? pc_gsl[pc_id].recode(&:-@) : pc_gsl[pc_id]
67
+ assert_similar_vector(pc_gsl_data, pc_ruby[pc_id], 1e-6, "PC for #{k} variables")
69
68
  if false
70
- k.times {|j| # variable
71
- ds_id="x#{j}"
72
- r= Statsample::Bivariate.correlation(ds[ds_id],pc_ruby[pc_id])
73
- puts "#{pc_id}-#{ds_id}:#{r}"
74
- }
69
+ k.times {|j| # variable
70
+ ds_id = "x#{j}"
71
+ r = Statsample::Bivariate.correlation(ds[ds_id], pc_ruby[pc_id])
72
+ puts "#{pc_id}-#{ds_id}:#{r}"
73
+ }
75
74
  end
76
75
  }
77
76
  }
78
- #@r.close
77
+ # @r.close
78
+ end
79
+
80
+ def test_principalcomponents
81
+ principalcomponents(true)
82
+ principalcomponents(false)
79
83
  end
80
- def test_principalcomponents()
81
- principalcomponents(true)
82
- principalcomponents(false)
83
-
84
- end
84
+
85
85
  def principalcomponents(gsl)
86
- ran=Distribution::Normal.rng
87
- samples=50
88
- x1=samples.times.map { ran.call()}.to_scale
89
- x2=samples.times.map {|i| ran.call()*0.5+x1[i]*0.5}.to_scale
90
- ds={'x1'=>x1,'x2'=>x2}.to_dataset
91
-
92
- cm=ds.correlation_matrix
93
- r=cm[0,1]
94
- pca=Statsample::Factor::PCA.new(cm,:m=>2,:use_gsl=>gsl)
95
- assert_in_delta(1+r,pca.eigenvalues[0],1e-10)
96
- assert_in_delta(1-r,pca.eigenvalues[1],1e-10)
97
- hs=1.0 / Math.sqrt(2)
98
- assert_equal_vector(Vector[1, 1]*hs, pca.eigenvectors[0])
99
- m_1=gsl ? Vector[-1,1] : Vector[1,-1]
100
-
101
- assert_equal_vector(hs*m_1, pca.eigenvectors[1])
102
-
103
- pcs=pca.principal_components(ds)
104
- exp_pc_1=ds.collect_with_index {|row,i|
105
- hs*(row['x1']+row['x2'])
106
- }
107
- exp_pc_2=ds.collect_with_index {|row,i|
108
- gsl ? hs*(row['x2']-row['x1']) : hs*(row['x1']-row['x2'])
86
+ ran = Distribution::Normal.rng
87
+ samples = 50
88
+ x1 = samples.times.map { ran.call }.to_scale
89
+ x2 = samples.times.map { |i| ran.call * 0.5 + x1[i] * 0.5 }.to_scale
90
+ ds = { 'x1' => x1, 'x2' => x2 }.to_dataset
91
+
92
+ cm = ds.correlation_matrix
93
+ r = cm[0, 1]
94
+ pca = Statsample::Factor::PCA.new(cm, m: 2, use_gsl: gsl)
95
+ assert_in_delta(1 + r, pca.eigenvalues[0], 1e-10)
96
+ assert_in_delta(1 - r, pca.eigenvalues[1], 1e-10)
97
+ hs = 1.0 / Math.sqrt(2)
98
+ assert_equal_vector(Vector[1, 1] * hs, pca.eigenvectors[0])
99
+ m_1 = gsl ? Vector[-1, 1] : Vector[1, -1]
109
100
 
101
+ assert_equal_vector(hs * m_1, pca.eigenvectors[1])
102
+
103
+ pcs = pca.principal_components(ds)
104
+ exp_pc_1 = ds.collect_with_index {|row, _i|
105
+ hs * (row['x1'] + row['x2'])
106
+ }
107
+ exp_pc_2 = ds.collect_with_index {|row, _i|
108
+ gsl ? hs * (row['x2'] - row['x1']) : hs * (row['x1'] - row['x2'])
110
109
  }
111
- assert_similar_vector(exp_pc_1, pcs["PC_1"])
112
- assert_similar_vector(exp_pc_2, pcs["PC_2"])
110
+ assert_similar_vector(exp_pc_1, pcs['PC_1'])
111
+ assert_similar_vector(exp_pc_2, pcs['PC_2'])
113
112
  end
113
+
114
114
  def test_antiimage
115
- cor=Matrix[[1,0.964, 0.312],[0.964,1,0.411],[0.312,0.411,1]]
116
- expected=Matrix[[0.062,-0.057, 0.074],[-0.057, 0.057, -0.089], [0.074, -0.089, 0.729]]
117
- ai=Statsample::Factor.anti_image_covariance_matrix(cor)
118
- assert(Matrix.equal_in_delta?(expected, ai, 0.01), "#{expected.to_s} not equal to #{ai.to_s}")
115
+ cor = Matrix[[1, 0.964, 0.312], [0.964, 1, 0.411], [0.312, 0.411, 1]]
116
+ expected = Matrix[[0.062, -0.057, 0.074], [-0.057, 0.057, -0.089], [0.074, -0.089, 0.729]]
117
+ ai = Statsample::Factor.anti_image_covariance_matrix(cor)
118
+ assert(Matrix.equal_in_delta?(expected, ai, 0.01), "#{expected} not equal to #{ai}")
119
119
  end
120
+
120
121
  def test_kmo
121
- @v1=[1 ,2 ,3 ,4 ,7 ,8 ,9 ,10,14,15,20,50,60,70].to_scale
122
- @v2=[5 ,6 ,11,12,13,16,17,18,19,20,30,0,0,0].to_scale
123
- @v3=[10,3 ,20,30,40,50,80,10,20,30,40,2,3,4].to_scale
124
- # KMO: 0.490
125
- ds={'v1'=>@v1,'v2'=>@v2,'v3'=>@v3}.to_dataset
126
- cor=Statsample::Bivariate.correlation_matrix(ds)
127
- kmo=Statsample::Factor.kmo(cor)
128
- assert_in_delta(0.667, kmo,0.001)
129
- assert_in_delta(0.81, Statsample::Factor.kmo(harman_817),0.01)
130
-
122
+ @v1 = [1, 2, 3, 4, 7, 8, 9, 10, 14, 15, 20, 50, 60, 70].to_scale
123
+ @v2 = [5, 6, 11, 12, 13, 16, 17, 18, 19, 20, 30, 0, 0, 0].to_scale
124
+ @v3 = [10, 3, 20, 30, 40, 50, 80, 10, 20, 30, 40, 2, 3, 4].to_scale
125
+ # KMO: 0.490
126
+ ds = { 'v1' => @v1, 'v2' => @v2, 'v3' => @v3 }.to_dataset
127
+ cor = Statsample::Bivariate.correlation_matrix(ds)
128
+ kmo = Statsample::Factor.kmo(cor)
129
+ assert_in_delta(0.667, kmo, 0.001)
130
+ assert_in_delta(0.81, Statsample::Factor.kmo(harman_817), 0.01)
131
131
  end
132
+
132
133
  def test_kmo_univariate
133
- m=harman_817
134
- expected=[0.73,0.76,0.84,0.87,0.53,0.93,0.78,0.86]
134
+ m = harman_817
135
+ expected = [0.73, 0.76, 0.84, 0.87, 0.53, 0.93, 0.78, 0.86]
135
136
  m.row_size.times.map {|i|
136
- assert_in_delta(expected[i], Statsample::Factor.kmo_univariate(m,i),0.01)
137
+ assert_in_delta(expected[i], Statsample::Factor.kmo_univariate(m, i), 0.01)
137
138
  }
138
139
  end
139
140
  # Tested with SPSS and R
140
141
  def test_pca
141
- a=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2.0, 1.0, 1.5, 1.1].to_scale
142
- b=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9].to_scale
143
- a.recode! {|c| c-a.mean}
144
- b.recode! {|c| c-b.mean}
145
- ds={'a'=>a,'b'=>b}.to_dataset
146
- cov_matrix=Statsample::Bivariate.covariance_matrix(ds)
147
- if Statsample.has_gsl?
148
- pca=Statsample::Factor::PCA.new(cov_matrix,:use_gsl=>true)
149
- pca_set(pca,"gsl")
150
- else
151
- skip("Eigenvalues could be calculated with GSL (requires gsl)")
152
- end
153
- pca=Statsample::Factor::PCA.new(cov_matrix,:use_gsl=>false)
154
- pca_set(pca,"ruby")
142
+ a = [2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2.0, 1.0, 1.5, 1.1].to_scale
143
+ b = [2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9].to_scale
144
+ a.recode! { |c| c - a.mean }
145
+ b.recode! { |c| c - b.mean }
146
+ ds = { 'a' => a, 'b' => b }.to_dataset
147
+ cov_matrix = Statsample::Bivariate.covariance_matrix(ds)
148
+ if Statsample.has_gsl?
149
+ pca = Statsample::Factor::PCA.new(cov_matrix, use_gsl: true)
150
+ pca_set(pca, 'gsl')
151
+ else
152
+ skip('Eigenvalues could be calculated with GSL (requires gsl)')
153
+ end
154
+ pca = Statsample::Factor::PCA.new(cov_matrix, use_gsl: false)
155
+ pca_set(pca, 'ruby')
155
156
  end
156
- def pca_set(pca,type)
157
- expected_eigenvalues=[1.284, 0.0490]
158
- expected_eigenvalues.each_with_index{|ev,i|
159
- assert_in_delta(ev,pca.eigenvalues[i],0.001)
160
- }
161
- expected_communality=[0.590, 0.694]
162
- expected_communality.each_with_index{|ev,i|
163
- assert_in_delta(ev,pca.communalities[i],0.001)
164
- }
165
- expected_cm=[0.768, 0.833]
166
- obs=pca.component_matrix_correlation(1).column(0).to_a
167
- expected_cm.each_with_index{|ev,i|
168
- assert_in_delta(ev,obs[i],0.001)
169
- }
170
157
 
171
- assert(pca.summary)
158
+ def pca_set(pca, _type)
159
+ expected_eigenvalues = [1.284, 0.0490]
160
+ expected_eigenvalues.each_with_index{|ev, i|
161
+ assert_in_delta(ev, pca.eigenvalues[i], 0.001)
162
+ }
163
+ expected_communality = [0.590, 0.694]
164
+ expected_communality.each_with_index{|ev, i|
165
+ assert_in_delta(ev, pca.communalities[i], 0.001)
166
+ }
167
+ expected_cm = [0.768, 0.833]
168
+ obs = pca.component_matrix_correlation(1).column(0).to_a
169
+ expected_cm.each_with_index{|ev, i|
170
+ assert_in_delta(ev, obs[i], 0.001)
171
+ }
172
+
173
+ assert(pca.summary)
172
174
  end
173
175
 
174
176
  # Tested with R
175
177
  def test_principalaxis
176
- matrix=::Matrix[
177
- [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]]
178
-
179
-
180
- fa=Statsample::Factor::PrincipalAxis.new(matrix,:m=>1, :max_iterations=>50)
181
-
182
- cm=::Matrix[[0.923],[0.912],[0.507],[0.483]]
183
-
184
- assert_equal_matrix(cm,fa.component_matrix,0.001)
185
-
186
- h2=[0.852,0.832,0.257,0.233]
187
- h2.each_with_index{|ev,i|
188
- assert_in_delta(ev,fa.communalities[i],0.001)
189
- }
190
- eigen1=2.175
191
- assert_in_delta(eigen1, fa.eigenvalues[0],0.001)
192
- assert(fa.summary.size>0)
193
- fa=Statsample::Factor::PrincipalAxis.new(matrix,:smc=>false)
194
-
195
- assert_raise RuntimeError do
196
- fa.iterate
197
- end
178
+ matrix = ::Matrix[
179
+ [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]]
198
180
 
199
- end
181
+ fa = Statsample::Factor::PrincipalAxis.new(matrix, m: 1, max_iterations: 50)
200
182
 
183
+ cm = ::Matrix[[0.923], [0.912], [0.507], [0.483]]
184
+
185
+ assert_equal_matrix(cm, fa.component_matrix, 0.001)
186
+
187
+ h2 = [0.852, 0.832, 0.257, 0.233]
188
+ h2.each_with_index{|ev, i|
189
+ assert_in_delta(ev, fa.communalities[i], 0.001)
190
+ }
191
+ eigen1 = 2.175
192
+ assert_in_delta(eigen1, fa.eigenvalues[0], 0.001)
193
+ assert(fa.summary.size > 0)
194
+ fa = Statsample::Factor::PrincipalAxis.new(matrix, smc: false)
195
+
196
+ assert_raise RuntimeError do
197
+ fa.iterate
198
+ end
199
+ end
201
200
 
202
201
  def test_rotation_varimax
203
- a = Matrix[ [ 0.4320, 0.8129, 0.3872] ,
204
- [0.7950, -0.5416, 0.2565] ,
205
- [0.5944, 0.7234, -0.3441],
206
- [0.8945, -0.3921, -0.1863] ]
207
-
208
- expected= Matrix[[-0.0204423, 0.938674, -0.340334],
209
- [0.983662, 0.0730206, 0.134997],
210
- [0.0826106, 0.435975, -0.893379],
211
- [0.939901, -0.0965213, -0.309596]]
212
- varimax=Statsample::Factor::Varimax.new(a)
202
+ a = Matrix[[0.4320, 0.8129, 0.3872],
203
+ [0.7950, -0.5416, 0.2565],
204
+ [0.5944, 0.7234, -0.3441],
205
+ [0.8945, -0.3921, -0.1863]]
206
+
207
+ expected = Matrix[[-0.0204423, 0.938674, -0.340334],
208
+ [0.983662, 0.0730206, 0.134997],
209
+ [0.0826106, 0.435975, -0.893379],
210
+ [0.939901, -0.0965213, -0.309596]]
211
+ varimax = Statsample::Factor::Varimax.new(a)
213
212
  assert(!varimax.rotated.nil?, "Rotated shouldn't be empty")
214
213
  assert(!varimax.component_transformation_matrix.nil?, "Component matrix shouldn't be empty")
215
214
  assert(!varimax.h2.nil?, "H2 shouldn't be empty")
216
-
217
- assert_equal_matrix(expected,varimax.rotated,1e-6)
218
- assert(varimax.summary.size>0)
219
- end
220
-
221
215
 
216
+ assert_equal_matrix(expected, varimax.rotated, 1e-6)
217
+ assert(varimax.summary.size > 0)
218
+ end
222
219
  end
@@ -1,43 +1,38 @@
1
- require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
- #require 'rserve'
3
- #require 'statsample/rserve_extension'
1
+ require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
2
+ # require 'rserve'
3
+ # require 'statsample/rserve_extension'
4
4
 
5
- class StatsampleFactorMpaTestCase < MiniTest::Unit::TestCase
5
+ class StatsampleFactorMpaTestCase < Minitest::Test
6
6
  context Statsample::Factor::MAP do
7
7
  setup do
8
- m=Matrix[
9
- [ 1, 0.846, 0.805, 0.859, 0.473, 0.398, 0.301, 0.382],
10
- [ 0.846, 1, 0.881, 0.826, 0.376, 0.326, 0.277, 0.415],
11
- [ 0.805, 0.881, 1, 0.801, 0.38, 0.319, 0.237, 0.345],
12
- [ 0.859, 0.826, 0.801, 1, 0.436, 0.329, 0.327, 0.365],
13
- [ 0.473, 0.376, 0.38, 0.436, 1, 0.762, 0.73, 0.629],
14
- [ 0.398, 0.326, 0.319, 0.329, 0.762, 1, 0.583, 0.577],
15
- [ 0.301, 0.277, 0.237, 0.327, 0.73, 0.583, 1, 0.539],
16
- [ 0.382, 0.415, 0.345, 0.365, 0.629, 0.577, 0.539, 1]
8
+ m = Matrix[
9
+ [1, 0.846, 0.805, 0.859, 0.473, 0.398, 0.301, 0.382],
10
+ [0.846, 1, 0.881, 0.826, 0.376, 0.326, 0.277, 0.415],
11
+ [0.805, 0.881, 1, 0.801, 0.38, 0.319, 0.237, 0.345],
12
+ [0.859, 0.826, 0.801, 1, 0.436, 0.329, 0.327, 0.365],
13
+ [0.473, 0.376, 0.38, 0.436, 1, 0.762, 0.73, 0.629],
14
+ [0.398, 0.326, 0.319, 0.329, 0.762, 1, 0.583, 0.577],
15
+ [0.301, 0.277, 0.237, 0.327, 0.73, 0.583, 1, 0.539],
16
+ [0.382, 0.415, 0.345, 0.365, 0.629, 0.577, 0.539, 1]
17
17
  ]
18
- @map=Statsample::Factor::MAP.new(m)
18
+ @map = Statsample::Factor::MAP.new(m)
19
19
  end
20
- should "return correct values with pure ruby" do
21
- @map.use_gsl=false
20
+ should 'return correct values with pure ruby' do
21
+ @map.use_gsl = false
22
22
  map_assertions(@map)
23
23
  end
24
- should_with_gsl "return correct values with gsl" do
25
- #require 'ruby-prof'
24
+ should_with_gsl 'return correct values with gsl' do
25
+ # require 'ruby-prof'
26
26
 
27
- @map.use_gsl=true
28
- map_assertions(@map)
27
+ @map.use_gsl = true
28
+ map_assertions(@map)
29
29
  end
30
-
31
-
32
30
  end
33
-
31
+
34
32
  def map_assertions(map)
35
- assert_in_delta(map.minfm, 0.066445,0.00001)
36
- assert_equal(map.number_of_factors, 2)
37
- assert_in_delta(map.fm[0], 0.312475,0.00001)
38
- assert_in_delta(map.fm[1], 0.245121,0.00001)
33
+ assert_in_delta(map.minfm, 0.066445, 0.00001)
34
+ assert_equal(map.number_of_factors, 2)
35
+ assert_in_delta(map.fm[0], 0.312475, 0.00001)
36
+ assert_in_delta(map.fm[1], 0.245121, 0.00001)
39
37
  end
40
-
41
-
42
38
  end
43
-