statsample 0.18.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +23 -0
  3. data/Manifest.txt +28 -17
  4. data/Rakefile +3 -2
  5. data/benchmarks/correlation_matrix_15_variables.rb +31 -0
  6. data/benchmarks/correlation_matrix_5_variables.rb +32 -0
  7. data/benchmarks/correlation_matrix_methods/correlation_matrix.ds +0 -0
  8. data/benchmarks/correlation_matrix_methods/correlation_matrix.html +93 -0
  9. data/benchmarks/correlation_matrix_methods/correlation_matrix.rb +75 -0
  10. data/benchmarks/correlation_matrix_methods/correlation_matrix.xls +0 -0
  11. data/benchmarks/correlation_matrix_methods/correlation_matrix_gsl_ruby.ods +0 -0
  12. data/benchmarks/correlation_matrix_methods/correlation_matrix_with_graphics.ods +0 -0
  13. data/benchmarks/correlation_matrix_methods/results.ds +0 -0
  14. data/benchmarks/factor_map.rb +37 -0
  15. data/benchmarks/helpers_benchmark.rb +5 -0
  16. data/examples/boxplot.rb +13 -14
  17. data/examples/correlation_matrix.rb +16 -8
  18. data/examples/dataset.rb +13 -4
  19. data/examples/dominance_analysis.rb +23 -17
  20. data/examples/dominance_analysis_bootstrap.rb +28 -22
  21. data/examples/histogram.rb +8 -9
  22. data/examples/icc.rb +20 -21
  23. data/examples/levene.rb +10 -4
  24. data/examples/multiple_regression.rb +9 -28
  25. data/examples/multivariate_correlation.rb +9 -3
  26. data/examples/parallel_analysis.rb +20 -16
  27. data/examples/polychoric.rb +15 -9
  28. data/examples/principal_axis.rb +18 -6
  29. data/examples/reliability.rb +26 -13
  30. data/examples/scatterplot.rb +10 -6
  31. data/examples/t_test.rb +15 -6
  32. data/examples/tetrachoric.rb +9 -2
  33. data/examples/u_test.rb +12 -4
  34. data/examples/vector.rb +13 -2
  35. data/examples/velicer_map_test.rb +33 -26
  36. data/lib/statsample.rb +32 -12
  37. data/lib/statsample/analysis.rb +79 -0
  38. data/lib/statsample/analysis/suite.rb +72 -0
  39. data/lib/statsample/analysis/suitereportbuilder.rb +38 -0
  40. data/lib/statsample/bivariate.rb +70 -16
  41. data/lib/statsample/dataset.rb +25 -19
  42. data/lib/statsample/dominanceanalysis.rb +2 -2
  43. data/lib/statsample/factor.rb +2 -0
  44. data/lib/statsample/factor/map.rb +16 -10
  45. data/lib/statsample/factor/parallelanalysis.rb +9 -3
  46. data/lib/statsample/factor/pca.rb +28 -32
  47. data/lib/statsample/factor/rotation.rb +15 -8
  48. data/lib/statsample/graph/boxplot.rb +3 -4
  49. data/lib/statsample/graph/histogram.rb +2 -1
  50. data/lib/statsample/graph/scatterplot.rb +1 -0
  51. data/lib/statsample/matrix.rb +106 -16
  52. data/lib/statsample/regression.rb +4 -1
  53. data/lib/statsample/regression/binomial.rb +1 -1
  54. data/lib/statsample/regression/multiple/baseengine.rb +19 -9
  55. data/lib/statsample/regression/multiple/gslengine.rb +127 -126
  56. data/lib/statsample/regression/multiple/matrixengine.rb +8 -5
  57. data/lib/statsample/regression/multiple/rubyengine.rb +1 -1
  58. data/lib/statsample/regression/simple.rb +31 -6
  59. data/lib/statsample/reliability.rb +11 -3
  60. data/lib/statsample/reliability/scaleanalysis.rb +4 -4
  61. data/lib/statsample/shorthand.rb +81 -0
  62. data/lib/statsample/test/chisquare.rb +1 -1
  63. data/lib/statsample/vector.rb +163 -163
  64. data/lib/statsample/vector/gsl.rb +106 -0
  65. data/references.txt +2 -2
  66. data/{data → test/fixtures}/crime.txt +0 -0
  67. data/{data → test/fixtures}/hartman_23.matrix +0 -0
  68. data/{data → test/fixtures}/repeated_fields.csv +0 -0
  69. data/{data → test/fixtures}/test_binomial.csv +0 -0
  70. data/test/{test_csv.csv → fixtures/test_csv.csv} +0 -0
  71. data/test/{test_xls.xls → fixtures/test_xls.xls} +0 -0
  72. data/{data → test/fixtures}/tetmat_matrix.txt +0 -0
  73. data/{data → test/fixtures}/tetmat_test.txt +0 -0
  74. data/test/helpers_tests.rb +18 -2
  75. data/test/test_analysis.rb +118 -0
  76. data/test/test_anovatwoway.rb +1 -1
  77. data/test/test_anovatwowaywithdataset.rb +1 -1
  78. data/test/test_anovawithvectors.rb +1 -2
  79. data/test/test_bartlettsphericity.rb +1 -2
  80. data/test/test_bivariate.rb +64 -22
  81. data/test/test_codification.rb +1 -2
  82. data/test/test_crosstab.rb +1 -2
  83. data/test/test_csv.rb +3 -4
  84. data/test/test_dataset.rb +24 -3
  85. data/test/test_dominance_analysis.rb +1 -2
  86. data/test/test_factor.rb +8 -69
  87. data/test/test_factor_map.rb +43 -0
  88. data/test/test_factor_pa.rb +54 -0
  89. data/test/test_ggobi.rb +1 -1
  90. data/test/test_gsl.rb +12 -18
  91. data/test/test_histogram.rb +1 -2
  92. data/test/test_logit.rb +62 -18
  93. data/test/test_matrix.rb +4 -5
  94. data/test/test_mle.rb +3 -4
  95. data/test/test_regression.rb +21 -2
  96. data/test/test_reliability.rb +3 -3
  97. data/test/test_reliability_icc.rb +1 -1
  98. data/test/test_reliability_skillscale.rb +20 -4
  99. data/test/test_resample.rb +1 -2
  100. data/test/test_rserve_extension.rb +1 -2
  101. data/test/test_srs.rb +1 -2
  102. data/test/test_statistics.rb +1 -2
  103. data/test/test_stest.rb +1 -2
  104. data/test/test_stratified.rb +1 -2
  105. data/test/test_test_f.rb +1 -2
  106. data/test/test_test_t.rb +1 -2
  107. data/test/test_umannwhitney.rb +1 -2
  108. data/test/test_vector.rb +117 -18
  109. data/test/test_xls.rb +2 -3
  110. data/web/Rakefile +39 -0
  111. metadata +109 -29
  112. metadata.gz.sig +0 -0
  113. data/examples/parallel_analysis_tetrachoric.rb +0 -31
  114. data/lib/distribution.rb +0 -25
  115. data/lib/distribution/chisquare.rb +0 -23
  116. data/lib/distribution/f.rb +0 -35
  117. data/lib/distribution/normal.rb +0 -60
  118. data/lib/distribution/normalbivariate.rb +0 -284
  119. data/lib/distribution/normalmultivariate.rb +0 -73
  120. data/lib/distribution/t.rb +0 -55
  121. data/test/test_distribution.rb +0 -73
@@ -0,0 +1,106 @@
1
+ module Statsample
2
+ class Vector
3
+ module GSL_
4
+ def clear_gsl
5
+ @gsl=nil
6
+ end
7
+
8
+ def set_valid_data
9
+ clear_gsl
10
+ set_valid_data_ruby
11
+ end
12
+ def push(v)
13
+ # If data is GSL::Vector, should be converted first to an Array
14
+ if @data.is_a? GSL::Vector
15
+ @data=@data.to_a
16
+ end
17
+ push_ruby(v)
18
+ end
19
+
20
+ def gsl
21
+ @gsl||=GSL::Vector.alloc(@scale_data) if @scale_data.size>0
22
+ end
23
+
24
+ alias :to_gsl :gsl
25
+ def vector_standarized_compute(m,sd)
26
+ if flawed?
27
+ vector_standarized_compute_ruby(m,sd)
28
+ else
29
+ gsl.collect {|x| (x.to_f - m).quo(sd)}.to_scale
30
+ end
31
+ end
32
+
33
+ def vector_centered_compute(m)
34
+ if flawed?
35
+ vector_centered_compute_ruby(m)
36
+ else
37
+ gsl.collect {|x| (x.to_f - m)}.to_scale
38
+ end
39
+ end
40
+ def sample_with_replacement(sample=1)
41
+ if(@type!=:scale)
42
+ sample_with_replacement_ruby(sample)
43
+ else
44
+ r = GSL::Rng.alloc(GSL::Rng::MT19937,rand(10000))
45
+ Statsample::Vector.new(r.sample(gsl, sample).to_a,:scale)
46
+ end
47
+ end
48
+
49
+ def sample_without_replacement(sample=1)
50
+ if(@type!=:scale)
51
+ sample_without_replacement_ruby(sample)
52
+ else
53
+ r = GSL::Rng.alloc(GSL::Rng::MT19937,rand(10000))
54
+ r.choose(gsl, sample).to_a
55
+ end
56
+ end
57
+ def median
58
+ if @type!=:scale
59
+ median_ruby
60
+ else
61
+ sorted=GSL::Vector.alloc(@scale_data.sort)
62
+ GSL::Stats::median_from_sorted_data(sorted)
63
+ end
64
+ end
65
+
66
+ def sum
67
+ check_type :scale
68
+ gsl.nil? ? nil : gsl.sum
69
+ end
70
+ def mean
71
+ check_type :scale
72
+ gsl.nil? ? nil : gsl.mean
73
+ end
74
+ def variance_sample(m=nil)
75
+ check_type :scale
76
+ m||=mean
77
+ gsl.nil? ? nil : gsl.variance_m
78
+ end
79
+
80
+ def standard_deviation_sample(m=nil)
81
+ check_type :scale
82
+ m||=mean
83
+ gsl.nil? ? nil : gsl.sd(m)
84
+ end
85
+
86
+ def variance_population(m=nil) # :nodoc:
87
+ check_type :scale
88
+ m||=mean
89
+ gsl.nil? ? nil : gsl.variance_with_fixed_mean(m)
90
+ end
91
+ def standard_deviation_population(m=nil) # :nodoc:
92
+ check_type :scale
93
+ m||=mean
94
+ gsl.nil? ? nil : gsl.sd_with_fixed_mean(m)
95
+ end
96
+ def skew # :nodoc:
97
+ check_type :scale
98
+ gsl.nil? ? nil : gsl.skew
99
+ end
100
+ def kurtosis # :nodoc:
101
+ check_type :scale
102
+ gsl.nil? ? nil : gsl.kurtosis
103
+ end
104
+ end
105
+ end
106
+ end
data/references.txt CHANGED
@@ -7,6 +7,7 @@ References
7
7
  * Dinneen, L., & Blakesley, B. (1973). Algorithm AS 62: A Generator for the Sampling Distribution of the Mann- Whitney U Statistic. <em>Journal of the Royal Statistical Society, 22</em>(2), 269-273
8
8
  * Dziuban, C., & Shirkey E. (1974). When is a correlation matrix appropriate for factor analysis? Some decision rules. Psychological Bulletin, 81(6), 358-361.
9
9
  * Hayton, J., Allen, D. & Scarpello, V.(2004). Factor Retention Decisions in Exploratory Factor Analysis: a Tutorial on Parallel Analysis. <i>Organizational Research Methods, 7</i> (2), 191-205.
10
+ * Härdle, W. & Simar, L. (2003). Applied Multivariate Statistical Analysis. Springer
10
11
  * Lin, J. (2007). VARIMAX_K58 [Source code]. [http://www.johnny-lin.com/idl_code/varimax_k58.pro]
11
12
  * Liu, O., & Rijmen, F. (2008). A modified procedure for parallel analysis of ordered categorical data. Behavior Research Methods, 40(2), 556-562.
12
13
  * McGraw, K. & Wong, S.P. (1996). Forming Inferences About Some Intraclass Correlation Coefficients. Psychological methods, 1(1), 30-46.
@@ -16,8 +17,7 @@ References
16
17
  * Smith, L. (2002). A tutorial on Principal Component Analysis. Available on http://courses.eas.ualberta.ca/eas570/pca_tutorial.pdf
17
18
  * http://en.wikipedia.org/wiki/Welch-Satterthwaite_equation
18
19
  * http://europe.isixsigma.com/library/content/c080806a.asp
19
- * http://snippets.dzone.com/posts/show/4666
20
20
  * http://stattrek.com/Lesson6/SRS.aspx
21
- * http://www.cut-the-knot.org/do_you_know/AllPerm.shtml
21
+ * http://talkstats.com/showthread.php?t=5056
22
22
  * http://www.gnu.org/software/gsl/manual/html_node/The-histogram-struct.html
23
23
  * http://www.taygeta.com/random/gaussian.html
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,7 +1,6 @@
1
1
  $:.unshift(File.expand_path(File.dirname(__FILE__)+'/../lib/'))
2
2
  $:.unshift(File.expand_path(File.dirname(__FILE__)+'/'))
3
3
 
4
-
5
4
  require 'minitest/unit'
6
5
  require 'tempfile'
7
6
  require 'tmpdir'
@@ -17,7 +16,18 @@ module MiniTest
17
16
  include Shoulda::InstanceMethods
18
17
  extend Shoulda::ClassMethods
19
18
  include Shoulda::Assertions
20
-
19
+
20
+ def self.should_with_gsl(name,&block)
21
+ should(name) do
22
+ if Statsample.has_gsl?
23
+ instance_eval(&block)
24
+ else
25
+ skip("Requires GSL")
26
+ end
27
+
28
+ end
29
+ end
30
+
21
31
  end
22
32
  end
23
33
 
@@ -29,6 +39,12 @@ module MiniTest
29
39
  assert_in_delta(v,obs[i],delta)
30
40
  }
31
41
  end
42
+ def assert_equal_vector(exp,obs,delta=1e-10,msg=nil)
43
+ assert_equal(exp.size, obs.size, "Different size.#{msg}")
44
+ exp.size.times {|i|
45
+ assert_in_delta(exp[i],obs[i],delta, "Different element #{i}. \nExpected:\n#{exp}\nObserved:\n#{obs}.#{msg}")
46
+ }
47
+ end
32
48
  def assert_equal_matrix(exp,obs,delta=1e-10,msg=nil)
33
49
  assert_equal(exp.row_size, obs.row_size, "Different row size.#{msg}")
34
50
  assert_equal(exp.column_size, obs.column_size, "Different column size.#{msg}")
@@ -0,0 +1,118 @@
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
+ require 'mocha'
3
+ class StatsampleAnalysisTestCase < MiniTest::Unit::TestCase
4
+ context(Statsample::Analysis) do
5
+ should "store() should create and store Statsample::Analysis::Suite" do
6
+ Statsample::Analysis.store(:first) do
7
+ a=1
8
+ end
9
+ assert(Statsample::Analysis.stored_analysis[:first])
10
+ assert(Statsample::Analysis.stored_analysis[:first].is_a? Statsample::Analysis::Suite)
11
+ end
12
+ should "store last created analysis" do
13
+ an=Statsample::Analysis.store(:first) do
14
+ a=1
15
+ end
16
+ assert_equal(an,Statsample::Analysis.last)
17
+ end
18
+ context(Statsample::Analysis::Suite) do
19
+ should "echo() uses output#puts with same arguments" do
20
+ an=Statsample::Analysis::Suite.new(:output)
21
+ obj=mock()
22
+ obj.expects(:puts).with(:first,:second).once
23
+ an.output=obj
24
+ an.echo(:first,:second)
25
+ end
26
+ should "summary() should call object.summary" do
27
+ an=Statsample::Analysis::Suite.new(:summary)
28
+ obj=stub('summarizable',:summary=>'summary')
29
+ assert_equal(obj.summary,an.summary(obj))
30
+ end
31
+ should "attach() allows to call objects on objects which respond to fields" do
32
+ an=Statsample::Analysis::Suite.new(:summary)
33
+ ds={'x'=>stub(:mean=>10),'y'=>stub(:mean=>12)}
34
+ ds.expects(:fields).returns(%w{x y}).at_least_once
35
+ an.attach(ds)
36
+ assert_equal(10,an.x.mean)
37
+ assert_equal(12,an.y.mean)
38
+ assert_raise(RuntimeError) {
39
+ an.z
40
+ }
41
+ end
42
+ should "attached objects should be called LIFO" do
43
+ an=Statsample::Analysis::Suite.new(:summary)
44
+ ds1={'x'=>stub(:mean=>100),'y'=>stub(:mean=>120),'z'=>stub(:mean=>13)}
45
+ ds1.expects(:fields).returns(%w{x y z}).at_least_once
46
+ ds2={'x'=>stub(:mean=>10),'y'=>stub(:mean=>12)}
47
+ ds2.expects(:fields).returns(%w{x y}).at_least_once
48
+ an.attach(ds1)
49
+ an.attach(ds2)
50
+ assert_equal(10,an.x.mean)
51
+ assert_equal(12,an.y.mean)
52
+ assert_equal(13,an.z.mean)
53
+ end
54
+
55
+ should "detach() without arguments drop latest object" do
56
+ an=Statsample::Analysis::Suite.new(:summary)
57
+ ds1={'x'=>stub(:mean=>100),'y'=>stub(:mean=>120),'z'=>stub(:mean=>13)}
58
+ ds1.expects(:fields).returns(%w{x y z}).at_least_once
59
+ ds2={'x'=>stub(:mean=>10),'y'=>stub(:mean=>12)}
60
+ ds2.expects(:fields).returns(%w{x y}).at_least_once
61
+ an.attach(ds1)
62
+ an.attach(ds2)
63
+ assert_equal(10,an.x.mean)
64
+ an.detach
65
+ assert_equal(100, an.x.mean)
66
+ end
67
+ should "detach() with argument drop select object" do
68
+ an=Statsample::Analysis::Suite.new(:summary)
69
+ ds1={'x'=>1}
70
+ ds1.expects(:fields).returns(%w{x}).at_least_once
71
+ ds2={'x'=>2,'y'=>3}
72
+ ds2.expects(:fields).returns(%w{x y}).at_least_once
73
+ ds3={'y'=>4}
74
+ ds3.expects(:fields).returns(%w{y}).at_least_once
75
+
76
+ an.attach(ds3)
77
+ an.attach(ds2)
78
+ an.attach(ds1)
79
+ assert_equal(1,an.x)
80
+ assert_equal(3,an.y)
81
+ an.detach(ds2)
82
+ assert_equal(4,an.y)
83
+ end
84
+ should "perform a simple analysis" do
85
+ output=mock()
86
+ output.expects(:puts).with(5.5)
87
+ an=Statsample::Analysis.store(:simple, :output=>output) do
88
+ ds=data_frame(:x=>c(1..10),:y=>c(1..10))
89
+ attach(ds)
90
+ echo x.mean
91
+ end
92
+ an.run
93
+ end
94
+ should "rnorm returns a random normal distribution vector" do
95
+ an=Statsample::Analysis::Suite.new(:simple)
96
+ v=an.rnorm(1000)
97
+ assert_in_delta(0,v.mean,0.09)
98
+ assert_in_delta(1,v.sd,0.09)
99
+ v=an.rnorm(1000,5,10)
100
+ assert_in_delta(5,v.mean,0.9)
101
+ assert_in_delta(10,v.sd,0.9)
102
+ end
103
+ end
104
+ context(Statsample::Analysis::SuiteReportBuilder) do
105
+ should "echo() use add on rb object" do
106
+ an=Statsample::Analysis::SuiteReportBuilder.new(:puts_to_add)
107
+ an.rb.expects(:add).with(:first).twice
108
+ an.echo(:first, :first)
109
+ end
110
+ should "summary() uses add on rb object" do
111
+ an=Statsample::Analysis::SuiteReportBuilder.new(:summary_to_add)
112
+ an.rb.expects(:add).with(:first).once
113
+ an.summary(:first)
114
+ end
115
+ end
116
+
117
+ end
118
+ end
@@ -1,4 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
2
  class StatsampleAnovaTwoWayTestCase < MiniTest::Unit::TestCase
3
3
  context(Statsample::Anova::TwoWay) do
4
4
  setup do
@@ -1,4 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
2
2
  # Reference:
3
3
  # * http://www.uwsp.edu/psych/Stat/13/anova-2w.htm#III
4
4
  class StatsampleAnovaTwoWayWithVectorsTestCase < MiniTest::Unit::TestCase
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  class StatsampleAnovaOneWayWithVectorsTestCase < MiniTest::Unit::TestCase
4
3
  context(Statsample::Anova::OneWayWithVectors) do
5
4
  context("when initializing") do
@@ -1,5 +1,4 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
 
4
3
  class StatsampleBartlettSphericityTestCase < MiniTest::Unit::TestCase
5
4
  include Statsample::Test
@@ -1,31 +1,21 @@
1
- require(File.dirname(__FILE__)+'/helpers_tests.rb')
2
-
1
+ require(File.expand_path(File.dirname(__FILE__)+'/helpers_tests.rb'))
3
2
  class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
4
3
  should "method sum of squares should be correct" do
5
4
  v1=[1,2,3,4,5,6].to_vector(:scale)
6
5
  v2=[6,2,4,10,12,8].to_vector(:scale)
7
6
  assert_equal(23.0, Statsample::Bivariate.sum_of_squares(v1,v2))
8
7
  end
9
- should "return same covariance with ruby and gls implementation" do
10
- if Statsample.has_gsl?
11
- v1=20.times.collect {|a| rand()}.to_scale
12
- v2=20.times.collect {|a| rand()}.to_scale
13
- assert_in_delta(Statsample::Bivariate.covariance(v1,v2), Statsample::Bivariate.covariance_slow(v1,v2), 0.001)
14
- else
15
- skip "Bivariate::covariance not tested (needs GSL)"
16
- end
17
-
8
+ should_with_gsl "return same covariance with ruby and gls implementation" do
9
+ v1=20.times.collect {|a| rand()}.to_scale
10
+ v2=20.times.collect {|a| rand()}.to_scale
11
+ assert_in_delta(Statsample::Bivariate.covariance(v1,v2), Statsample::Bivariate.covariance_slow(v1,v2), 0.001)
18
12
  end
19
13
 
20
- should "return same correlation with ruby and gls implementation" do
21
- if Statsample.has_gsl?
22
- v1=20.times.collect {|a| rand()}.to_scale
23
- v2=20.times.collect {|a| rand()}.to_scale
14
+ should_with_gsl "return same correlation with ruby and gls implementation" do
15
+ v1=20.times.collect {|a| rand()}.to_scale
16
+ v2=20.times.collect {|a| rand()}.to_scale
24
17
 
25
- assert_in_delta(GSL::Stats::correlation(v1.gsl, v2.gsl), Statsample::Bivariate.pearson_slow(v1,v2), 1e-10)
26
- else
27
- skip "Not tested gsl versus ruby correlation (needs GSL)"
28
- end
18
+ assert_in_delta(GSL::Stats::correlation(v1.gsl, v2.gsl), Statsample::Bivariate.pearson_slow(v1,v2), 1e-10)
29
19
  end
30
20
  should "return correct pearson correlation" do
31
21
  v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
@@ -49,7 +39,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
49
39
  assert_in_delta(Statsample::Bivariate.prop_pearson(r.t,8,:both), r.probability, 0.001)
50
40
  assert(r.summary.size>0)
51
41
  end
52
- should "return correct correlation_matrix" do
42
+ should "return correct correlation_matrix with nils values" do
53
43
  v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
54
44
  v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
55
45
  v3=[6,2, 1000,1000,5,4,7,8].to_vector(:scale)
@@ -69,6 +59,60 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
69
59
  end
70
60
  #assert_equal(expected,obt)
71
61
  end
62
+ should_with_gsl "return same values for optimized and pairwise covariance matrix" do
63
+ cases=100
64
+ v1=Statsample::Vector.new_scale(cases) {rand()}
65
+ v2=Statsample::Vector.new_scale(cases) {rand()}
66
+ v3=Statsample::Vector.new_scale(cases) {rand()}
67
+ v4=Statsample::Vector.new_scale(cases) {rand()}
68
+ v5=Statsample::Vector.new_scale(cases) {rand()}
69
+
70
+ ds={'v1'=>v1,'v2'=>v2,'v3'=>v3,'v4'=>v4,'v5'=>v5}.to_dataset
71
+
72
+ cor_opt=Statsample::Bivariate.covariance_matrix_optimized(ds)
73
+
74
+ cor_pw =Statsample::Bivariate.covariance_matrix_pairwise(ds)
75
+ assert_equal_matrix(cor_opt,cor_pw,1e-15)
76
+ end
77
+ should_with_gsl "return same values for optimized and pairwise correlation matrix" do
78
+
79
+ cases=100
80
+ v1=Statsample::Vector.new_scale(cases) {rand()}
81
+ v2=Statsample::Vector.new_scale(cases) {rand()}
82
+ v3=Statsample::Vector.new_scale(cases) {rand()}
83
+ v4=Statsample::Vector.new_scale(cases) {rand()}
84
+ v5=Statsample::Vector.new_scale(cases) {rand()}
85
+
86
+ ds={'v1'=>v1,'v2'=>v2,'v3'=>v3,'v4'=>v4,'v5'=>v5}.to_dataset
87
+
88
+ cor_opt=Statsample::Bivariate.correlation_matrix_optimized(ds)
89
+
90
+ cor_pw =Statsample::Bivariate.correlation_matrix_pairwise(ds)
91
+ assert_equal_matrix(cor_opt,cor_pw,1e-15)
92
+
93
+ end
94
+ should "return correct correlation_matrix without nils values" do
95
+ v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
96
+ v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
97
+ v3=[6,2, 1000,1000,5,4,7,8].to_vector(:scale)
98
+ v4=[2,4,6,7, 3,7,8,6].to_vector(:scale)
99
+ ds={'v1'=>v1,'v2'=>v2,'v3'=>v3,'v4'=>v4}.to_dataset
100
+ c=Proc.new {|n1,n2|Statsample::Bivariate.pearson(n1,n2)}
101
+ 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)],
102
+ [c.call(v4,v1),c.call(v4,v2),c.call(v4,v3),c.call(v4,v4)]
103
+ ]
104
+ obt=Statsample::Bivariate.correlation_matrix(ds)
105
+ for i in 0...expected.row_size
106
+ for j in 0...expected.column_size
107
+ #puts expected[i,j].inspect
108
+ #puts obt[i,j].inspect
109
+ assert_in_delta(expected[i,j], obt[i,j],0.0001, "#{expected[i,j].class}!=#{obt[i,j].class} ")
110
+ end
111
+ end
112
+ #assert_equal(expected,obt)
113
+ end
114
+
115
+
72
116
  should "return correct value for prop pearson" do
73
117
  assert_in_delta(0.42, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.084,94), 94),0.01)
74
118
  assert_in_delta(0.65, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.046,95), 95),0.01)
@@ -115,7 +159,5 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
115
159
  assert_in_delta(0.636,Statsample::Bivariate.gamma(m),0.001)
116
160
  m2=Matrix[[15,12,6,5],[12,8,10,8],[4,6,9,10]]
117
161
  assert_in_delta(0.349,Statsample::Bivariate.gamma(m2),0.001)
118
-
119
-
120
162
  end
121
163
  end