statsample 2.0.2 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +7 -0
- data/README.md +2 -4
- data/Rakefile +6 -0
- data/benchmarks/correlation_matrix_methods/correlation_matrix.rb +0 -1
- data/examples/correlation_matrix.rb +0 -16
- data/examples/dataset.rb +0 -7
- data/examples/dominance_analysis_bootstrap.rb +0 -6
- data/examples/reliability.rb +0 -2
- data/lib/statsample.rb +3 -2
- data/lib/statsample/anova/oneway.rb +1 -1
- data/lib/statsample/bivariate.rb +4 -4
- data/lib/statsample/converter/spss.rb +1 -1
- data/lib/statsample/crosstab.rb +3 -3
- data/lib/statsample/daru.rb +1 -3
- data/lib/statsample/factor/parallelanalysis.rb +1 -3
- data/lib/statsample/formula/fit_model.rb +46 -0
- data/lib/statsample/formula/formula.rb +306 -0
- data/lib/statsample/matrix.rb +0 -2
- data/lib/statsample/regression.rb +1 -3
- data/lib/statsample/regression/multiple/alglibengine.rb +1 -1
- data/lib/statsample/regression/multiple/gslengine.rb +1 -1
- data/lib/statsample/regression/multiple/rubyengine.rb +1 -3
- data/lib/statsample/reliability.rb +3 -3
- data/lib/statsample/reliability/icc.rb +1 -2
- data/lib/statsample/reliability/multiscaleanalysis.rb +0 -1
- data/lib/statsample/reliability/scaleanalysis.rb +2 -3
- data/lib/statsample/reliability/skillscaleanalysis.rb +1 -1
- data/lib/statsample/test/levene.rb +4 -4
- data/lib/statsample/test/t.rb +10 -10
- data/lib/statsample/test/umannwhitney.rb +3 -3
- data/lib/statsample/version.rb +1 -1
- data/statsample.gemspec +4 -1
- data/test/fixtures/df.csv +15 -0
- data/test/helpers_tests.rb +7 -0
- data/test/test_factor.rb +0 -5
- data/test/test_factor_pa.rb +1 -6
- data/test/test_fit_model.rb +88 -0
- data/test/test_reliability.rb +0 -10
- data/test/test_statistics.rb +1 -1
- metadata +52 -48
data/lib/statsample/matrix.rb
CHANGED
@@ -21,7 +21,6 @@ class ::Matrix
|
|
21
21
|
row_size.times {|i|
|
22
22
|
ds.add_row(self.row(i).to_a)
|
23
23
|
}
|
24
|
-
ds.update
|
25
24
|
ds.rename(self.name) if self.respond_to? :name
|
26
25
|
ds
|
27
26
|
end
|
@@ -95,7 +94,6 @@ module GSL
|
|
95
94
|
row_size.times {|i|
|
96
95
|
ds.add_row(self.row(i).to_a)
|
97
96
|
}
|
98
|
-
ds.update
|
99
97
|
ds.rename(self.name) if self.respond_to? :name
|
100
98
|
ds
|
101
99
|
end
|
@@ -15,8 +15,6 @@ module Statsample
|
|
15
15
|
#
|
16
16
|
# * Simple Regression : Statsample::Regression::Simple
|
17
17
|
# * Multiple Regression: Statsample::Regression::Multiple
|
18
|
-
# * Logit Regression: Statsample::Regression::Binomial::Logit
|
19
|
-
# * Probit Regression: Statsample::Regression::Binomial::Probit
|
20
18
|
module Regression
|
21
19
|
|
22
20
|
LinearDependency=Class.new(Exception)
|
@@ -58,7 +56,7 @@ module Statsample
|
|
58
56
|
if Statsample.has_gsl? and false
|
59
57
|
Statsample::Regression::Multiple::GslEngine.new(ds, y_var, opts)
|
60
58
|
else
|
61
|
-
ds2=ds.
|
59
|
+
ds2=ds.reject_values(*Daru::MISSING_VALUES)
|
62
60
|
Statsample::Regression::Multiple::RubyEngine.new(ds2,y_var, opts)
|
63
61
|
end
|
64
62
|
end
|
@@ -19,7 +19,7 @@ module Multiple
|
|
19
19
|
class AlglibEngine < BaseEngine
|
20
20
|
def initialize(ds,y_var, opts=Hash.new)
|
21
21
|
super
|
22
|
-
@ds = ds.
|
22
|
+
@ds = ds.reject_values(*Daru::MISSING_VALUES)
|
23
23
|
@ds_valid = @ds
|
24
24
|
@dy = @ds[@y_var]
|
25
25
|
@ds_indep = ds.dup(ds.vectors.to_a - [y_var])
|
@@ -30,7 +30,7 @@ class RubyEngine < MatrixEngine
|
|
30
30
|
super(matrix, y_var, opts)
|
31
31
|
@ds = ds
|
32
32
|
@dy = ds[@y_var]
|
33
|
-
@ds_valid = ds.
|
33
|
+
@ds_valid = ds.reject_values(*Daru::MISSING_VALUES)
|
34
34
|
@total_cases = @ds.nrows
|
35
35
|
@valid_cases = @ds_valid.nrows
|
36
36
|
@ds_indep = ds.dup(ds.vectors.to_a - [y_var])
|
@@ -55,7 +55,6 @@ class RubyEngine < MatrixEngine
|
|
55
55
|
end
|
56
56
|
i += 1
|
57
57
|
end
|
58
|
-
@ds_indep.update
|
59
58
|
set_dep_columns
|
60
59
|
end
|
61
60
|
def fix_with_regression
|
@@ -75,7 +74,6 @@ class RubyEngine < MatrixEngine
|
|
75
74
|
end
|
76
75
|
i+=1
|
77
76
|
end
|
78
|
-
@ds_indep.update
|
79
77
|
set_dep_columns
|
80
78
|
end
|
81
79
|
# Standard error for constant
|
@@ -4,10 +4,10 @@ module Statsample
|
|
4
4
|
# Calculate Chonbach's alpha for a given dataset.
|
5
5
|
# only uses tuples without missing data
|
6
6
|
def cronbach_alpha(ods)
|
7
|
-
ds = ods.
|
7
|
+
ds = ods.reject_values(*Daru::MISSING_VALUES)
|
8
8
|
n_items = ds.ncols
|
9
9
|
return nil if n_items <= 1
|
10
|
-
s2_items = ds.
|
10
|
+
s2_items = ds.to_h.values.inject(0) { |ac,v|
|
11
11
|
ac + v.variance }
|
12
12
|
total = ds.vector_sum
|
13
13
|
|
@@ -18,7 +18,7 @@ module Statsample
|
|
18
18
|
# Only uses tuples without missing data
|
19
19
|
# Return nil if one or more vectors has 0 variance
|
20
20
|
def cronbach_alpha_standarized(ods)
|
21
|
-
ds = ods.
|
21
|
+
ds = ods.reject_values(*Daru::MISSING_VALUES)
|
22
22
|
return nil if ds.any? { |v| v.variance==0}
|
23
23
|
|
24
24
|
ds = Daru::DataFrame.new(
|
@@ -21,7 +21,7 @@ module Statsample
|
|
21
21
|
}
|
22
22
|
|
23
23
|
@ods = ds
|
24
|
-
@ds = ds.
|
24
|
+
@ds = ds.reject_values(*Daru::MISSING_VALUES).dup(ds.vectors.to_a - @dumped)
|
25
25
|
@ds.rename ds.name
|
26
26
|
|
27
27
|
@k = @ds.ncols
|
@@ -117,11 +117,10 @@ module Statsample
|
|
117
117
|
ds_new = Daru::DataFrame.new({}, order: ([:case,:score] + dif_sort.collect{|a,b| a.to_sym}))
|
118
118
|
scores_sort.each do |i,score|
|
119
119
|
row = [i, score]
|
120
|
-
case_row = @ds.row[i].
|
120
|
+
case_row = @ds.row[i].to_h
|
121
121
|
dif_sort.each{ |variable,dif_value| row.push(case_row[variable]) }
|
122
122
|
ds_new.add_row(row)
|
123
123
|
end
|
124
|
-
ds_new.update
|
125
124
|
ds_new
|
126
125
|
end
|
127
126
|
|
@@ -30,7 +30,7 @@ module Statsample
|
|
30
30
|
# Input could be an array of vectors or a dataset
|
31
31
|
def initialize(input, opts=Hash.new())
|
32
32
|
if input.is_a? Daru::DataFrame
|
33
|
-
@vectors = input.
|
33
|
+
@vectors = input.to_h.values
|
34
34
|
else
|
35
35
|
@vectors = input
|
36
36
|
end
|
@@ -48,7 +48,7 @@ module Statsample
|
|
48
48
|
builder.text "%s : F(%d, %d) = %0.4f , p = %0.4f" % [@name, @d1, @d2, f, probability]
|
49
49
|
end
|
50
50
|
def compute
|
51
|
-
n=@vectors.inject(0) { |ac,v| ac + v.
|
51
|
+
n=@vectors.inject(0) { |ac,v| ac + v.reject_values(*Daru::MISSING_VALUES).size }
|
52
52
|
|
53
53
|
zi=@vectors.collect do |vector|
|
54
54
|
mean=vector.mean
|
@@ -57,7 +57,7 @@ module Statsample
|
|
57
57
|
|
58
58
|
total_mean = Daru::Vector.new(
|
59
59
|
zi.inject([]) do |ac,vector|
|
60
|
-
ac + vector.
|
60
|
+
ac + vector.reject_values(*Daru::MISSING_VALUES).to_a
|
61
61
|
end
|
62
62
|
).mean
|
63
63
|
|
@@ -68,7 +68,7 @@ module Statsample
|
|
68
68
|
|
69
69
|
sum_den = zi.inject(0) do |ac,vector|
|
70
70
|
z_mean = vector.mean
|
71
|
-
ac + vector.
|
71
|
+
ac + vector.reject_values(*Daru::MISSING_VALUES).to_a.inject(0) do |acp,zij|
|
72
72
|
acp + (zij - z_mean)**2
|
73
73
|
end
|
74
74
|
end
|
data/lib/statsample/test/t.rb
CHANGED
@@ -163,11 +163,11 @@ module Statsample
|
|
163
163
|
@u=@opts[:u]
|
164
164
|
@tails=@opts[:tails]
|
165
165
|
@confidence_level=@opts[:confidence_level] || 0.95
|
166
|
-
@df= @vector.
|
166
|
+
@df= @vector.reject_values(*Daru::MISSING_VALUES).size-1
|
167
167
|
@t=nil
|
168
168
|
end
|
169
169
|
def t_object
|
170
|
-
T.new(@vector.mean-u, @vector.se, @vector.
|
170
|
+
T.new(@vector.mean-u, @vector.se, @vector.reject_values(*Daru::MISSING_VALUES).size-1, opts)
|
171
171
|
end
|
172
172
|
def t
|
173
173
|
t_object.t
|
@@ -264,12 +264,12 @@ module Statsample
|
|
264
264
|
|
265
265
|
# Set t and probability for given u
|
266
266
|
def compute
|
267
|
-
@t_equal_variance= T.two_sample_independent(@v1.mean, @v2.mean, @v1.sd, @v2.sd, @v1.
|
267
|
+
@t_equal_variance= T.two_sample_independent(@v1.mean, @v2.mean, @v1.sd, @v2.sd, @v1.reject_values(*Daru::MISSING_VALUES).size, @v2.reject_values(*Daru::MISSING_VALUES).size,true)
|
268
268
|
|
269
|
-
@t_not_equal_variance= T.two_sample_independent(@v1.mean, @v2.mean, @v1.sd, @v2.sd, @v1.
|
269
|
+
@t_not_equal_variance= T.two_sample_independent(@v1.mean, @v2.mean, @v1.sd, @v2.sd, @v1.reject_values(*Daru::MISSING_VALUES).size, @v2.reject_values(*Daru::MISSING_VALUES).size, false)
|
270
270
|
|
271
|
-
@df_equal_variance=T.df_equal_variance(@v1.
|
272
|
-
@df_not_equal_variance=T.df_not_equal_variance(@v1.sd, @v2.sd, @v1.
|
271
|
+
@df_equal_variance=T.df_equal_variance(@v1.reject_values(*Daru::MISSING_VALUES).size, @v2.reject_values(*Daru::MISSING_VALUES).size)
|
272
|
+
@df_not_equal_variance=T.df_not_equal_variance(@v1.sd, @v2.sd, @v1.reject_values(*Daru::MISSING_VALUES).size, @v2.reject_values(*Daru::MISSING_VALUES).size)
|
273
273
|
|
274
274
|
@probability_equal_variance = p_using_cdf(Distribution::T.cdf(@t_equal_variance, @df_equal_variance), tails)
|
275
275
|
|
@@ -278,8 +278,8 @@ module Statsample
|
|
278
278
|
end
|
279
279
|
# Cohen's d is a measure of effect size. Its defined as the difference between two means divided by a standard deviation for the data
|
280
280
|
def d
|
281
|
-
n1=@v1.
|
282
|
-
n2=@v2.
|
281
|
+
n1=@v1.reject_values(*Daru::MISSING_VALUES).size
|
282
|
+
n2=@v2.reject_values(*Daru::MISSING_VALUES).size
|
283
283
|
num=@v1.mean-@v2.mean
|
284
284
|
den=Math::sqrt( ((n1-1)*@v1.sd+(n2-1)*@v2.sd).quo(n1+n2))
|
285
285
|
num.quo(den)
|
@@ -288,8 +288,8 @@ module Statsample
|
|
288
288
|
def report_building(b) # :nodoc:
|
289
289
|
b.section(:name=>@name) {|g|
|
290
290
|
g.table(:name=>_("Mean and standard deviation"), :header=>[_("Variable"), _("mean"), _("sd"),_("n")]) {|t|
|
291
|
-
t.row([@v1.name,"%0.4f" % @v1.mean,"%0.4f" % @v1.sd, @v1.
|
292
|
-
t.row([@v2.name,"%0.4f" % @v2.mean,"%0.4f" % @v2.sd, @v2.
|
291
|
+
t.row([@v1.name,"%0.4f" % @v1.mean,"%0.4f" % @v1.sd, @v1.reject_values(*Daru::MISSING_VALUES).size])
|
292
|
+
t.row([@v2.name,"%0.4f" % @v2.mean,"%0.4f" % @v2.sd, @v2.reject_values(*Daru::MISSING_VALUES).size])
|
293
293
|
}
|
294
294
|
g.parse_element(Statsample::Test.levene([@v1,@v2],:name=>_("Levene test for equality of variances")))
|
295
295
|
|
@@ -118,8 +118,8 @@ module Statsample
|
|
118
118
|
def initialize(v1,v2, opts=Hash.new)
|
119
119
|
@v1 = v1
|
120
120
|
@v2 = v2
|
121
|
-
v1_valid = v1.
|
122
|
-
v2_valid = v2.
|
121
|
+
v1_valid = v1.reject_values(*Daru::MISSING_VALUES).reset_index!
|
122
|
+
v2_valid = v2.reject_values(*Daru::MISSING_VALUES).reset_index!
|
123
123
|
@n1 = v1_valid.size
|
124
124
|
@n2 = v2_valid.size
|
125
125
|
data = Daru::Vector.new(v1_valid.to_a + v2_valid.to_a)
|
@@ -172,7 +172,7 @@ module Statsample
|
|
172
172
|
# == Reference:
|
173
173
|
# * http://europe.isixsigma.com/library/content/c080806a.asp
|
174
174
|
def adjust_for_ties(data)
|
175
|
-
@t = data.frequencies.find_all { |k,v| v > 1 }.inject(0) { |a,v|
|
175
|
+
@t = data.frequencies.to_h.find_all { |k,v| v > 1 }.inject(0) { |a,v|
|
176
176
|
a + (v[1]**3 - v[1]).quo(12)
|
177
177
|
}
|
178
178
|
end
|
data/lib/statsample/version.rb
CHANGED
data/statsample.gemspec
CHANGED
@@ -60,7 +60,7 @@ Gem::Specification.new do |s|
|
|
60
60
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
61
61
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
62
62
|
|
63
|
-
s.add_runtime_dependency 'daru', '~> 0.1'
|
63
|
+
s.add_runtime_dependency 'daru', '~> 0.1.6'
|
64
64
|
s.add_runtime_dependency 'spreadsheet', '~> 1.1'
|
65
65
|
s.add_runtime_dependency 'reportbuilder', '~> 1.4'
|
66
66
|
s.add_runtime_dependency 'minimization', '~> 0.2'
|
@@ -81,4 +81,7 @@ Gem::Specification.new do |s|
|
|
81
81
|
s.add_development_dependency 'mocha', '~> 1.1'
|
82
82
|
s.add_development_dependency 'nmatrix', '~> 0.2.1'
|
83
83
|
s.add_development_dependency 'gsl', '~> 2.1'
|
84
|
+
s.add_development_dependency 'pry'
|
85
|
+
s.add_development_dependency 'rubocop'
|
86
|
+
s.add_development_dependency 'activesupport', '~> 4.2'
|
84
87
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
y,a,b,c,d,e
|
2
|
+
0,6,62.1,no,female,A
|
3
|
+
1,18,34.7,yes,male,B
|
4
|
+
1,6,29.7,no,female,C
|
5
|
+
0,4,71,no,male,C
|
6
|
+
1,5,36.9,yes,male,B
|
7
|
+
0,11,58.7,no,female,B
|
8
|
+
0,8,63.3,no,male,B
|
9
|
+
1,21,20.4,yes,male,A
|
10
|
+
1,2,20.5,yes,male,C
|
11
|
+
0,11,59.2,no,male,B
|
12
|
+
0,1,76.4,yes,female,A
|
13
|
+
0,8,71.7,no,female,B
|
14
|
+
1,2,77.5,no,male,C
|
15
|
+
1,3,31.1,no,male,B
|
data/test/helpers_tests.rb
CHANGED
@@ -30,6 +30,13 @@ module Minitest
|
|
30
30
|
end
|
31
31
|
|
32
32
|
module Assertions
|
33
|
+
def assert_vectors_from_formula(formula, names)
|
34
|
+
model = Statsample::FitModel.new formula, @df
|
35
|
+
|
36
|
+
model.df_for_regression.vectors.to_a.sort
|
37
|
+
.must_equal names.sort
|
38
|
+
end
|
39
|
+
|
33
40
|
def assert_similar_vector(exp, obs, delta = 1e-10, msg = nil)
|
34
41
|
msg ||= "Different vectors #{exp} - #{obs}"
|
35
42
|
assert_equal(exp.size, obs.size)
|
data/test/test_factor.rb
CHANGED
@@ -7,19 +7,14 @@ class StatsampleFactorTestCase < Minitest::Test
|
|
7
7
|
# Based on Hardle and Simar
|
8
8
|
def setup
|
9
9
|
@fixtures_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures')
|
10
|
-
Daru.lazy_update = true
|
11
10
|
end
|
12
11
|
|
13
|
-
def teardown
|
14
|
-
Daru.lazy_update = false
|
15
|
-
end
|
16
12
|
# Based on Hurdle example
|
17
13
|
def test_covariance_matrix
|
18
14
|
ds = Daru::DataFrame.from_plaintext(@fixtures_dir + '/bank2.dat', [:v1,:v2,:v3,:v4,:v5,:v6])
|
19
15
|
ds.vectors.each {|f|
|
20
16
|
ds[f] = ds[f].center
|
21
17
|
}
|
22
|
-
ds.update
|
23
18
|
cm = Statsample::Bivariate.covariance_matrix ds
|
24
19
|
pca = Statsample::Factor::PCA.new(cm, m: 6)
|
25
20
|
# puts pca.summary
|
data/test/test_factor_pa.rb
CHANGED
@@ -7,11 +7,6 @@ class StatsampleFactorTestCase < Minitest::Test
|
|
7
7
|
# Based on Hardle and Simar
|
8
8
|
def setup
|
9
9
|
@fixtures_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures')
|
10
|
-
Daru.lazy_update = true
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
Daru.lazy_update = false
|
15
10
|
end
|
16
11
|
|
17
12
|
def test_parallelanalysis_with_data
|
@@ -44,7 +39,7 @@ class StatsampleFactorTestCase < Minitest::Test
|
|
44
39
|
pa2 = Statsample::Factor::ParallelAnalysis.with_random_data(samples, variables, iterations: iterations, percentil: 95)
|
45
40
|
3.times do |n|
|
46
41
|
var = "ev_0000#{n + 1}".to_sym
|
47
|
-
assert_in_delta(pa1.ds_eigenvalues[var].mean, pa2.ds_eigenvalues[var].mean, 0.
|
42
|
+
assert_in_delta(pa1.ds_eigenvalues[var].mean, pa2.ds_eigenvalues[var].mean, 0.07)
|
48
43
|
end
|
49
44
|
else
|
50
45
|
skip('Too slow without GSL')
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
describe Statsample::FitModel do
|
5
|
+
before do
|
6
|
+
@df = Daru::DataFrame.from_csv 'test/fixtures/df.csv'
|
7
|
+
@df.to_category 'c', 'd', 'e'
|
8
|
+
end
|
9
|
+
context '#df_for_regression' do
|
10
|
+
context 'no interaction' do
|
11
|
+
it { assert_vectors_from_formula 'y~a+e', %w[a e_B e_C y] }
|
12
|
+
end
|
13
|
+
|
14
|
+
context '2-way interaction' do
|
15
|
+
context 'interaction of numerical with numerical' do
|
16
|
+
context 'none reoccur' do
|
17
|
+
it { assert_vectors_from_formula 'y~a:b', %w[a:b y] }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'one reoccur' do
|
21
|
+
it { assert_vectors_from_formula 'y~a+a:b', %w[a a:b y] }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'both reoccur' do
|
25
|
+
it { assert_vectors_from_formula 'y~a+b+a:b', %w[a a:b b y] }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'interaction of category with numerical' do
|
30
|
+
context 'none reoccur' do
|
31
|
+
it { assert_vectors_from_formula 'y~a:e', %w[e_A:a e_B:a e_C:a y] }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'one reoccur' do
|
35
|
+
context 'numeric occur' do
|
36
|
+
it { assert_vectors_from_formula 'y~a+a:e', %w[a e_B:a e_C:a y] }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'category occur' do
|
40
|
+
it { assert_vectors_from_formula 'y~e+a:e',
|
41
|
+
%w[e_B e_C e_A:a e_B:a e_C:a y] }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'both reoccur' do
|
46
|
+
it { assert_vectors_from_formula 'y~a+e+a:e',
|
47
|
+
%w[a e_B e_C e_B:a e_C:a y] }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'interaction of category with category' do
|
52
|
+
context 'none reoccur' do
|
53
|
+
it { assert_vectors_from_formula 'y~c:e',
|
54
|
+
%w[e_B e_C c_yes:e_A c_yes:e_B c_yes:e_C y] }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'one reoccur' do
|
58
|
+
it { assert_vectors_from_formula 'y~e+c:e',
|
59
|
+
%w[e_B e_C c_yes:e_A c_yes:e_B c_yes:e_C y] }
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'both reoccur' do
|
63
|
+
it { assert_vectors_from_formula 'y~c+e+c:e',
|
64
|
+
%w[c_yes e_B e_C c_yes:e_B c_yes:e_C y] }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'corner case' do
|
70
|
+
context 'example 1' do
|
71
|
+
it { assert_vectors_from_formula 'y~d:a+d:e',
|
72
|
+
%w[e_B e_C d_male:e_A d_male:e_B d_male:e_C d_female:a d_male:a y] }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'complex examples' do
|
77
|
+
context 'random example 1' do
|
78
|
+
it { assert_vectors_from_formula 'y~a+e+c:d+e:d',
|
79
|
+
%w[e_B e_C d_male c_yes:d_female c_yes:d_male e_B:d_male e_C:d_male a y] }
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'random example 2' do
|
83
|
+
it { assert_vectors_from_formula 'y~e+b+c+d:e+b:e+a:e+0',
|
84
|
+
%w[e_A e_B e_C c_yes d_male:e_A d_male:e_B d_male:e_C b e_B:b e_C:b e_A:a e_B:a e_C:a y] }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/test/test_reliability.rb
CHANGED
@@ -1,14 +1,6 @@
|
|
1
1
|
require(File.expand_path(File.dirname(__FILE__) + '/helpers_tests.rb'))
|
2
2
|
class StatsampleReliabilityTestCase < Minitest::Test
|
3
3
|
context Statsample::Reliability do
|
4
|
-
setup do
|
5
|
-
Daru.lazy_update = true
|
6
|
-
end
|
7
|
-
|
8
|
-
teardown do
|
9
|
-
Daru.lazy_update = false
|
10
|
-
end
|
11
|
-
|
12
4
|
should 'return correct r according to Spearman-Brown prophecy' do
|
13
5
|
r = 0.6849
|
14
6
|
n = 62.quo(15)
|
@@ -29,14 +21,12 @@ class StatsampleReliabilityTestCase < Minitest::Test
|
|
29
21
|
@ds[i] = Daru::Vector.new(base.collect { |v| v + rand })
|
30
22
|
end
|
31
23
|
|
32
|
-
@ds.update
|
33
24
|
@k = @ds.ncols
|
34
25
|
@cm = Statsample::Bivariate.covariance_matrix(@ds)
|
35
26
|
@dse = @ds.dup
|
36
27
|
@dse.vectors.each do |f|
|
37
28
|
@dse[f] = @dse[f].standardize
|
38
29
|
end
|
39
|
-
@dse.update
|
40
30
|
@cme = Statsample::Bivariate.covariance_matrix(@dse)
|
41
31
|
@a = Statsample::Reliability.cronbach_alpha(@ds)
|
42
32
|
@as = Statsample::Reliability.cronbach_alpha_standarized(@ds)
|