statsample 0.14.1 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +9 -0
- data/Manifest.txt +5 -0
- data/README.txt +8 -2
- data/examples/icc.rb +26 -0
- data/grab_references.rb +28 -0
- data/lib/distribution.rb +5 -11
- data/lib/distribution/f.rb +12 -2
- data/lib/statsample.rb +11 -9
- data/lib/statsample/anova/oneway.rb +1 -1
- data/lib/statsample/anova/twoway.rb +4 -10
- data/lib/statsample/dataset.rb +1 -1
- data/lib/statsample/dominanceanalysis.rb +1 -1
- data/lib/statsample/dominanceanalysis/bootstrap.rb +0 -1
- data/lib/statsample/factor/map.rb +1 -1
- data/lib/statsample/factor/parallelanalysis.rb +2 -2
- data/lib/statsample/factor/pca.rb +1 -2
- data/lib/statsample/factor/principalaxis.rb +1 -2
- data/lib/statsample/factor/rotation.rb +2 -2
- data/lib/statsample/histogram.rb +2 -2
- data/lib/statsample/reliability.rb +17 -0
- data/lib/statsample/reliability/icc.rb +404 -0
- data/lib/statsample/reliability/scaleanalysis.rb +18 -6
- data/lib/statsample/srs.rb +5 -1
- data/lib/statsample/test.rb +1 -2
- data/lib/statsample/test/f.rb +5 -1
- data/lib/statsample/test/umannwhitney.rb +3 -3
- data/lib/statsample/vector.rb +2 -4
- data/references.txt +22 -0
- data/test/test_bivariate.rb +11 -11
- data/test/test_reliability.rb +11 -0
- data/test/test_reliability_icc.rb +188 -0
- data/test/test_test_f.rb +2 -2
- metadata +12 -4
- metadata.gz.sig +0 -0
@@ -18,7 +18,9 @@ module Statsample
|
|
18
18
|
@ds=ds.dup_only_valid
|
19
19
|
@k=@ds.fields.size
|
20
20
|
@total=@ds.vector_sum
|
21
|
-
@
|
21
|
+
@vector_mean=@ds.vector_mean
|
22
|
+
@item_mean=@vector_mean.mean
|
23
|
+
@item_sd=@vector_mean.sd
|
22
24
|
@mean=@total.mean
|
23
25
|
@median=@total.median
|
24
26
|
@skew=@total.skew
|
@@ -115,8 +117,11 @@ module Statsample
|
|
115
117
|
}
|
116
118
|
end
|
117
119
|
end
|
120
|
+
# =Adjusted R.P.B. for each item
|
121
|
+
# Adjusted RPB(Point biserial-correlation) for each item
|
122
|
+
#
|
118
123
|
def item_total_correlation
|
119
|
-
@ds.fields.inject({}) do |a,v|
|
124
|
+
@itc||=@ds.fields.inject({}) do |a,v|
|
120
125
|
vector=@ds[v].clone
|
121
126
|
ds2=@ds.clone
|
122
127
|
ds2.delete_vector(v)
|
@@ -125,6 +130,9 @@ module Statsample
|
|
125
130
|
a
|
126
131
|
end
|
127
132
|
end
|
133
|
+
def mean_rpb
|
134
|
+
item_total_correlation.values.to_scale.mean
|
135
|
+
end
|
128
136
|
def item_statistics
|
129
137
|
@is||=@ds.fields.inject({}) do |a,v|
|
130
138
|
a[v]={:mean=>@ds[v].mean, :sds=>Math::sqrt(@cov_m.variance(v))}
|
@@ -183,20 +191,24 @@ module Statsample
|
|
183
191
|
t.row [_("Sum median"), @median]
|
184
192
|
t.hr
|
185
193
|
t.row [_("Item mean"), "%0.4f" % @item_mean]
|
194
|
+
t.row [_("Item sd"), "%0.4f" % @item_sd]
|
195
|
+
t.hr
|
186
196
|
t.row [_("Skewness"), "%0.4f" % @skew]
|
187
197
|
t.row [_("Kurtosis"), "%0.4f" % @kurtosis]
|
188
198
|
t.hr
|
189
199
|
t.row [_("Cronbach's alpha"), "%0.4f" % @alpha]
|
190
200
|
t.row [_("Standarized Cronbach's alpha"), "%0.4f" % @alpha_standarized]
|
201
|
+
t.row [_("Mean rpb"), "%0.4f" % mean_rpb]
|
202
|
+
|
191
203
|
t.row [_("Variances mean"), "%g" % @variances_mean]
|
192
204
|
t.row [_("Covariances mean") , "%g" % @covariances_mean]
|
193
205
|
end
|
194
|
-
s.text _("
|
195
|
-
s.text _("
|
196
|
-
|
206
|
+
s.text _("Items for obtain alpha(0.8) : %d" % Statsample::Reliability::n_for_desired_reliability(@alpha, 0.8, @ds.fields.size))
|
207
|
+
s.text _("Items for obtain alpha(0.9) : %d" % Statsample::Reliability::n_for_desired_reliability(@alpha, 0.9, @ds.fields.size))
|
208
|
+
|
197
209
|
sid=stats_if_deleted
|
198
210
|
is=item_statistics
|
199
|
-
|
211
|
+
itc=item_total_correlation
|
200
212
|
|
201
213
|
|
202
214
|
s.table(:name=>_("Items report for %s") % @name, :header=>["item","mean","sd", "mean if deleted", "var if deleted", "sd if deleted"," item-total correl.", "alpha if deleted"]) do |t|
|
data/lib/statsample/srs.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
module Statsample
|
2
2
|
# Several methods to estimate parameters for simple random sampling
|
3
|
+
# == Reference:
|
4
|
+
# * Cochran, W.(1972). Sampling Techniques [spanish edition].
|
5
|
+
# * http://stattrek.com/Lesson6/SRS.aspx
|
6
|
+
|
3
7
|
module SRS
|
8
|
+
|
4
9
|
class << self
|
5
10
|
########################
|
6
11
|
#
|
@@ -71,7 +76,6 @@ module Statsample
|
|
71
76
|
# Know proportion, sample without replacement.
|
72
77
|
#
|
73
78
|
# Sources:
|
74
|
-
# * http://stattrek.com/Lesson6/SRS.aspx
|
75
79
|
# * Cochran(1972)
|
76
80
|
def proportion_sd_kp_wor(p, sam, pop)
|
77
81
|
fpc(sam,pop)*Math::sqrt(p*(1-p).quo(sam))
|
data/lib/statsample/test.rb
CHANGED
@@ -32,7 +32,6 @@ module Statsample
|
|
32
32
|
extend self
|
33
33
|
# Calculate chi square for two Matrix
|
34
34
|
class << self
|
35
|
-
|
36
35
|
def chi_square(observed, expected=nil)
|
37
36
|
case observed
|
38
37
|
when Vector
|
@@ -41,7 +40,7 @@ module Statsample
|
|
41
40
|
ChiSquare::WithMatrix.new(observed,expected)
|
42
41
|
else
|
43
42
|
raise "Not implemented for #{observed.class}"
|
44
|
-
|
43
|
+
end
|
45
44
|
end
|
46
45
|
# Shorthand for Statsample::Test::UMannWhitney.new
|
47
46
|
#
|
data/lib/statsample/test/f.rb
CHANGED
@@ -41,7 +41,11 @@ module Statsample
|
|
41
41
|
p_using_cdf(Distribution::F.cdf(f, @df_num, @df_den), tails)
|
42
42
|
end
|
43
43
|
def report_building(builder) #:nodoc:
|
44
|
-
|
44
|
+
if @df_num.is_a? Integer and @df_den.is_a? Integer
|
45
|
+
builder.text "%s : F(%d, %d) = %0.4f , p = %0.4f" % [@name, @df_num, @df_den, f, probability]
|
46
|
+
else
|
47
|
+
builder.text "%s : F(%0.2f, %0.2f) = %0.4f , p = %0.4f" % [@name, @df_num, @df_den, f, probability]
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
@@ -25,7 +25,7 @@ module Statsample
|
|
25
25
|
# Parameters:
|
26
26
|
# * <tt>n1</tt>: group 1 size
|
27
27
|
# * <tt>n2</tt>: group 2 size
|
28
|
-
# Reference:
|
28
|
+
# == Reference:
|
29
29
|
# * 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
|
30
30
|
#
|
31
31
|
def self.u_sampling_distribution_as62(n1,n2)
|
@@ -169,7 +169,7 @@ module Statsample
|
|
169
169
|
end
|
170
170
|
# Adjunt for ties.
|
171
171
|
#
|
172
|
-
# Reference:
|
172
|
+
# == Reference:
|
173
173
|
# * http://europe.isixsigma.com/library/content/c080806a.asp
|
174
174
|
def adjust_for_ties(data)
|
175
175
|
@t=data.frequencies.find_all{|k,v| v>1}.inject(0) {|a,v|
|
@@ -182,7 +182,7 @@ module Statsample
|
|
182
182
|
# Z value for U, with adjust for ties.
|
183
183
|
# For large samples, U is approximately normally distributed.
|
184
184
|
# In that case, you can use z to obtain probabily for U.
|
185
|
-
# Reference:
|
185
|
+
# == Reference:
|
186
186
|
# * SPSS Manual
|
187
187
|
def z
|
188
188
|
mu=(@n1*@n2).quo(2)
|
data/lib/statsample/vector.rb
CHANGED
@@ -361,7 +361,7 @@ module Statsample
|
|
361
361
|
sum.push(nil)
|
362
362
|
end
|
363
363
|
}
|
364
|
-
Statsample::Vector.new(sum)
|
364
|
+
Statsample::Vector.new(sum, :scale )
|
365
365
|
else
|
366
366
|
raise ArgumentError, "The array/vector parameter should be of the same size of the original vector"
|
367
367
|
end
|
@@ -373,8 +373,7 @@ module Statsample
|
|
373
373
|
else
|
374
374
|
nil
|
375
375
|
end
|
376
|
-
}
|
377
|
-
)
|
376
|
+
} , :scale)
|
378
377
|
else
|
379
378
|
raise TypeError,"You should pass a scalar or a array/vector"
|
380
379
|
end
|
@@ -761,7 +760,6 @@ module Statsample
|
|
761
760
|
m||=mean
|
762
761
|
@scale_data.inject(0){|a,x| a+(x-m).square}
|
763
762
|
end
|
764
|
-
|
765
763
|
# Sum of squared deviation
|
766
764
|
def sum_of_squared_deviation
|
767
765
|
check_type :scale
|
data/references.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
References
|
2
|
+
* Azen, R. & Budescu, D.V. (2003). The dominance analysis approach for comparing predictors in multiple regression. <em>Psychological Methods, 8</em>(2), 129-148.
|
3
|
+
* Azen, R. & Budescu, D.V. (2006). Comparing predictors in Multivariate Regression Models: An extension of Dominance Analysis. <em>Journal of Educational and Behavioral Statistics, 31</em>(2), 157-180.
|
4
|
+
* Budescu, D. V. (1993). Dominance analysis: a new approach to the problem of relative importance of predictors in multiple regression. <em>Psychological Bulletin, 114</em>, 542-551.
|
5
|
+
* Cochran(1972)
|
6
|
+
* Cohen et al. (2003). Applied Multiple Reggression / Correlation Analysis for the Behavioral Sciences
|
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
|
+
* Dziuban, C., & Shirkey E. (1974). When is a correlation matrix appropriate for factor analysis? Some decision rules. Psychological Bulletin, 81(6), 358-361.
|
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
|
+
* Lin, J. (2007). VARIMAX_K58 [Source code]. [http://www.johnny-lin.com/idl_code/varimax_k58.pro]
|
11
|
+
* Liu, O., & Rijmen, F. (2008). A modified procedure for parallel analysis of ordered categorical data. Behavior Research Methods, 40(2), 556-562.
|
12
|
+
* McGraw, K. & Wong, S.P. (1996). Forming Inferences About Some Intraclass Correlation Coefficients. Psychological methods, 1(1), 30-46.
|
13
|
+
* O'Connor, B. (2000). SPSS and SAS programs for determining the number of components using parallel analysis and Velicer's MAP test. Behavior Research Methods, Instruments, & Computers, 32(3), 396-402.
|
14
|
+
* SPSS Manual
|
15
|
+
* Shrout,P. & Fleiss, J. (1979). Intraclass Correlation: Uses in assessing rater reliability. Psychological Bulletin, 86(2), 420-428
|
16
|
+
* Smith, L. (2002). A tutorial on Principal Component Analysis. Available on http://courses.eas.ualberta.ca/eas570/pca_tutorial.pdf
|
17
|
+
* http://en.wikipedia.org/wiki/Welch-Satterthwaite_equation
|
18
|
+
* http://europe.isixsigma.com/library/content/c080806a.asp
|
19
|
+
* http://snippets.dzone.com/posts/show/4666
|
20
|
+
* http://stattrek.com/Lesson6/SRS.aspx
|
21
|
+
* http://www.cut-the-knot.org/do_you_know/AllPerm.shtml
|
22
|
+
* http://www.gnu.org/software/gsl/manual/html_node/The-histogram-struct.html
|
data/test/test_bivariate.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
2
2
|
|
3
3
|
class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
4
|
-
|
4
|
+
should "method sum of squares should be correct" do
|
5
5
|
v1=[1,2,3,4,5,6].to_vector(:scale)
|
6
6
|
v2=[6,2,4,10,12,8].to_vector(:scale)
|
7
7
|
assert_equal(23.0, Statsample::Bivariate.sum_of_squares(v1,v2))
|
8
8
|
end
|
9
|
-
|
9
|
+
should "return same covariance with ruby and gls implementation" do
|
10
10
|
if Statsample.has_gsl?
|
11
11
|
v1=20.times.collect {|a| rand()}.to_scale
|
12
12
|
v2=20.times.collect {|a| rand()}.to_scale
|
@@ -17,7 +17,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
17
17
|
|
18
18
|
end
|
19
19
|
|
20
|
-
|
20
|
+
should "return same correlation with ruby and gls implementation" do
|
21
21
|
if Statsample.has_gsl?
|
22
22
|
v1=20.times.collect {|a| rand()}.to_scale
|
23
23
|
v2=20.times.collect {|a| rand()}.to_scale
|
@@ -27,7 +27,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
27
27
|
skip "Not tested gsl versus ruby correlation (needs GSL)"
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
should "return correct pearson correlation" do
|
31
31
|
v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
|
32
32
|
v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
|
33
33
|
assert_in_delta(0.525,Statsample::Bivariate.pearson(v1,v2), 0.001)
|
@@ -40,7 +40,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
40
40
|
v3a,v4a=Statsample.only_valid v3, v4
|
41
41
|
assert_in_delta(0.525, Statsample::Bivariate.pearson_slow(v3a,v4a),0.001)
|
42
42
|
end
|
43
|
-
|
43
|
+
should "return correct values for t_pearson and prop_pearson" do
|
44
44
|
v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
|
45
45
|
v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
|
46
46
|
r=Statsample::Bivariate::Pearson.new(v1,v2)
|
@@ -49,7 +49,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
49
49
|
assert_in_delta(Statsample::Bivariate.prop_pearson(r.t,8,:both), r.probability, 0.001)
|
50
50
|
assert(r.summary.size>0)
|
51
51
|
end
|
52
|
-
|
52
|
+
should "return correct correlation_matrix" do
|
53
53
|
v1=[6,5,4,7,8,4,3,2].to_vector(:scale)
|
54
54
|
v2=[2,3,7,8,6,4,3,2].to_vector(:scale)
|
55
55
|
v3=[6,2, 1000,1000,5,4,7,8].to_vector(:scale)
|
@@ -69,7 +69,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
69
69
|
end
|
70
70
|
#assert_equal(expected,obt)
|
71
71
|
end
|
72
|
-
|
72
|
+
should "return correct value for prop pearson" do
|
73
73
|
assert_in_delta(0.42, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.084,94), 94),0.01)
|
74
74
|
assert_in_delta(0.65, Statsample::Bivariate.prop_pearson(Statsample::Bivariate.t_r(0.046,95), 95),0.01)
|
75
75
|
r=0.9
|
@@ -87,13 +87,13 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
87
87
|
assert(Statsample::Bivariate.prop_pearson(t,n,:left)<0.05)
|
88
88
|
end
|
89
89
|
|
90
|
-
|
90
|
+
should "return correct value for Spearman's rho" do
|
91
91
|
v1=[86,97,99,100,101,103,106,110,112,113].to_vector(:scale)
|
92
92
|
v2=[0,20,28,27,50,29,7,17,6,12].to_vector(:scale)
|
93
93
|
assert_in_delta(-0.175758,Statsample::Bivariate.spearman(v1,v2),0.0001)
|
94
94
|
|
95
95
|
end
|
96
|
-
|
96
|
+
should "return correct value for point_biserial correlation" do
|
97
97
|
c=[1,3,5,6,7,100,200,300,400,300].to_vector(:scale)
|
98
98
|
d=[1,1,1,1,1,0,0,0,0,0].to_vector(:scale)
|
99
99
|
assert_raises TypeError do
|
@@ -101,7 +101,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
101
101
|
end
|
102
102
|
assert_in_delta(Statsample::Bivariate.point_biserial(d,c), Statsample::Bivariate.pearson(d,c), 0.0001)
|
103
103
|
end
|
104
|
-
|
104
|
+
should "return correct value for tau_a and tau_b" do
|
105
105
|
v1=[1,2,3,4,5,6,7,8,9,10,11].to_vector(:ordinal)
|
106
106
|
v2=[1,3,4,5,7,8,2,9,10,6,11].to_vector(:ordinal)
|
107
107
|
assert_in_delta(0.6727,Statsample::Bivariate.tau_a(v1,v2),0.001)
|
@@ -110,7 +110,7 @@ class StatsampleBivariateTestCase < MiniTest::Unit::TestCase
|
|
110
110
|
v2=[11,4,4,2,0,0,0,0,0,0,4,0,4,0,0,0,0,4,0,0,0,0,0].to_vector(:ordinal)
|
111
111
|
assert_in_delta(-0.376201540231705, Statsample::Bivariate.tau_b(Statsample::Crosstab.new(v1,v2).to_matrix),0.001)
|
112
112
|
end
|
113
|
-
|
113
|
+
should "return correct value for gamma correlation" do
|
114
114
|
m=Matrix[[10,5,2],[10,15,20]]
|
115
115
|
assert_in_delta(0.636,Statsample::Bivariate.gamma(m),0.001)
|
116
116
|
m2=Matrix[[15,12,6,5],[12,8,10,8],[4,6,9,10]]
|
data/test/test_reliability.rb
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
2
2
|
class StatsampleReliabilityTestCase < MiniTest::Unit::TestCase
|
3
3
|
context Statsample::Reliability do
|
4
|
+
should "return correct r according to Spearman-Brown prophecy" do
|
5
|
+
r=0.6849
|
6
|
+
n=62.quo(15)
|
7
|
+
assert_in_delta(0.9, Statsample::Reliability.sbp(r,n), 0.001)
|
8
|
+
end
|
9
|
+
should "return correct n for desired realiability" do
|
10
|
+
r=0.6849
|
11
|
+
r_d=0.9
|
12
|
+
assert_in_delta(62, Statsample::Reliability.n_for_desired_reliability(r, r_d, 15),0.5)
|
13
|
+
end
|
4
14
|
context "Cronbach's alpha" do
|
5
15
|
setup do
|
6
16
|
@samples=40
|
@@ -44,6 +54,7 @@ class StatsampleReliabilityTestCase < MiniTest::Unit::TestCase
|
|
44
54
|
#p n_obtained
|
45
55
|
assert_in_delta(Statsample::Reliability.cronbach_alpha_from_n_s2_cov(n_obtained, vm,cm) ,@a,0.001)
|
46
56
|
end
|
57
|
+
|
47
58
|
should "standarized alpha will be equal to sum of matrix covariance less the individual variances on standarized values" do
|
48
59
|
total_sum=@cme.total_sum
|
49
60
|
ind_var=@dse.fields.inject(0) {|ac,v| ac+@dse[v].variance}
|
@@ -0,0 +1,188 @@
|
|
1
|
+
$reliability_icc=nil
|
2
|
+
require(File.dirname(__FILE__)+'/helpers_tests.rb')
|
3
|
+
class StatsampleReliabilityIccTestCase < MiniTest::Unit::TestCase
|
4
|
+
context Statsample::Reliability::ICC do
|
5
|
+
setup do
|
6
|
+
a=[9,6,8,7,10,6].to_scale
|
7
|
+
b=[2,1,4,1,5,2].to_scale
|
8
|
+
c=[5,3,6,2,6,4].to_scale
|
9
|
+
d=[8,2,8,6,9,7].to_scale
|
10
|
+
@ds={'a'=>a,'b'=>b,'c'=>c,'d'=>d}.to_dataset
|
11
|
+
@icc=Statsample::Reliability::ICC.new(@ds)
|
12
|
+
end
|
13
|
+
should "basic method be correct" do
|
14
|
+
assert_equal(6,@icc.n)
|
15
|
+
assert_equal(4,@icc.k)
|
16
|
+
end
|
17
|
+
should "total mean be correct" do
|
18
|
+
assert_in_delta(5.291, @icc.total_mean, 0.001)
|
19
|
+
end
|
20
|
+
should "df methods be correct" do
|
21
|
+
assert_equal(5, @icc.df_bt)
|
22
|
+
assert_equal(18, @icc.df_wt)
|
23
|
+
assert_equal(3, @icc.df_bj)
|
24
|
+
assert_equal(15, @icc.df_residual)
|
25
|
+
end
|
26
|
+
should "ms between targets be correct" do
|
27
|
+
assert_in_delta(11.24, @icc.ms_bt, 0.01)
|
28
|
+
end
|
29
|
+
should "ms within targets be correct" do
|
30
|
+
assert_in_delta(6.26, @icc.ms_wt, 0.01)
|
31
|
+
end
|
32
|
+
should "ms between judges be correct" do
|
33
|
+
assert_in_delta(32.49, @icc.ms_bj, 0.01)
|
34
|
+
end
|
35
|
+
should "ms residual be correct" do
|
36
|
+
assert_in_delta(1.02, @icc.ms_residual, 0.01)
|
37
|
+
end
|
38
|
+
context "with McGraw and Wong denominations," do
|
39
|
+
|
40
|
+
end
|
41
|
+
context "with Shrout & Fleiss denominations, " do
|
42
|
+
should "icc(1,1) method be correct" do
|
43
|
+
assert_in_delta(0.17, @icc.icc_1_1, 0.01)
|
44
|
+
end
|
45
|
+
# Verified on SPSS and R
|
46
|
+
should "icc(2,1) method be correct" do
|
47
|
+
assert_in_delta(0.29, @icc.icc_2_1, 0.01)
|
48
|
+
end
|
49
|
+
should "icc(3,1) method be correct" do
|
50
|
+
assert_in_delta(0.71, @icc.icc_3_1, 0.01)
|
51
|
+
end
|
52
|
+
should "icc(1,k) method be correct" do
|
53
|
+
assert_in_delta(0.44, @icc.icc_1_k, 0.01)
|
54
|
+
end
|
55
|
+
# Verified on SPSS and R
|
56
|
+
should "icc(2,k) method be correct" do
|
57
|
+
assert_in_delta(0.62, @icc.icc_2_k, 0.01)
|
58
|
+
end
|
59
|
+
should "icc(3,k) method be correct" do
|
60
|
+
assert_in_delta(0.91, @icc.icc_3_k, 0.01)
|
61
|
+
end
|
62
|
+
|
63
|
+
should "icc(1,1) F be correct" do
|
64
|
+
assert_in_delta(1.795, @icc.icc_1_f.f)
|
65
|
+
end
|
66
|
+
should "icc(1,1) confidence interval should be correct" do
|
67
|
+
assert_in_delta(-0.133, @icc.icc_1_1_ci[0], 0.001)
|
68
|
+
assert_in_delta(0.723, @icc.icc_1_1_ci[1], 0.001)
|
69
|
+
end
|
70
|
+
should "icc(1,k) confidence interval should be correct" do
|
71
|
+
assert_in_delta(-0.884, @icc.icc_1_k_ci[0], 0.001)
|
72
|
+
assert_in_delta(0.912, @icc.icc_1_k_ci[1], 0.001)
|
73
|
+
end
|
74
|
+
|
75
|
+
should "icc(2,1) F be correct" do
|
76
|
+
assert_in_delta(11.027, @icc.icc_2_f.f)
|
77
|
+
end
|
78
|
+
should "icc(2,1) confidence interval should be correct" do
|
79
|
+
#skip("Not yet operational")
|
80
|
+
assert_in_delta(0.019, @icc.icc_2_1_ci[0], 0.001)
|
81
|
+
assert_in_delta(0.761, @icc.icc_2_1_ci[1], 0.001)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Verified on SPSS and R
|
85
|
+
should "icc(2,k) confidence interval should be correct" do
|
86
|
+
#skip("Not yet operational")
|
87
|
+
#p @icc.icc_2_k_ci
|
88
|
+
assert_in_delta(0.039, @icc.icc_2_k_ci[0], 0.001)
|
89
|
+
assert_in_delta(0.929, @icc.icc_2_k_ci[1], 0.001)
|
90
|
+
|
91
|
+
end
|
92
|
+
#should "Shrout icc(2,k) and McGraw icc(a,k) ci be equal" do
|
93
|
+
# assert_in_delta(@icc.icc_2_k_ci_shrout[0], @icc.icc_2_k_ci_mcgraw[0], 10e-5)
|
94
|
+
#end
|
95
|
+
|
96
|
+
should "icc(3,1) F be correct" do
|
97
|
+
assert_in_delta(11.027, @icc.icc_3_f.f)
|
98
|
+
end
|
99
|
+
|
100
|
+
should "icc(3,1) confidence interval should be correct" do
|
101
|
+
assert_in_delta(0.342, @icc.icc_3_1_ci[0], 0.001)
|
102
|
+
assert_in_delta(0.946, @icc.icc_3_1_ci[1], 0.001)
|
103
|
+
end
|
104
|
+
should "icc(3,k) confidence interval should be correct" do
|
105
|
+
assert_in_delta(0.676, @icc.icc_3_k_ci[0], 0.001)
|
106
|
+
assert_in_delta(0.986, @icc.icc_3_k_ci[1], 0.001)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
begin
|
111
|
+
require 'rserve'
|
112
|
+
require 'statsample/rserve_extension'
|
113
|
+
context "McGraw and Wong" do
|
114
|
+
setup do
|
115
|
+
if($reliability_icc.nil?)
|
116
|
+
size=100
|
117
|
+
a=size.times.map {rand(10)}.to_scale
|
118
|
+
b=a.recode{|i|i+rand(4)-2}
|
119
|
+
c=a.recode{|i|i+rand(4)-2}
|
120
|
+
d=a.recode{|i|i+rand(4)-2}
|
121
|
+
@ds={'a'=>a,'b'=>b,'c'=>c,'d'=>d}.to_dataset
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
@icc=Statsample::Reliability::ICC.new(@ds)
|
126
|
+
@r=Rserve::Connection.new
|
127
|
+
@r.assign('ds',@ds)
|
128
|
+
@r.void_eval("library(irr);
|
129
|
+
iccs=list(
|
130
|
+
icc_1=icc(ds,'o','c','s'),
|
131
|
+
icc_k=icc(ds,'o','c','a'),
|
132
|
+
icc_c_1=icc(ds,'t','c','s'),
|
133
|
+
icc_c_k=icc(ds,'t','c','a'),
|
134
|
+
icc_a_1=icc(ds,'t','a','s'),
|
135
|
+
icc_a_k=icc(ds,'t','a','a'))
|
136
|
+
")
|
137
|
+
@iccs=@r.eval('iccs').to_ruby
|
138
|
+
$reliability_icc={ :icc=>@icc, :iccs=>@iccs
|
139
|
+
}
|
140
|
+
end
|
141
|
+
@icc=$reliability_icc[:icc]
|
142
|
+
@iccs=$reliability_icc[:iccs]
|
143
|
+
|
144
|
+
end
|
145
|
+
[:icc_1, :icc_k, :icc_c_1, :icc_c_k, :icc_a_1, :icc_a_k].each do |t|
|
146
|
+
context "ICC Type #{t}" do
|
147
|
+
should "value be correct" do
|
148
|
+
@icc.type=t
|
149
|
+
@r_icc=@iccs[t.to_s]
|
150
|
+
assert_in_delta(@r_icc['value'],@icc.r)
|
151
|
+
end
|
152
|
+
should "fvalue be correct" do
|
153
|
+
@icc.type=t
|
154
|
+
@r_icc=@iccs[t.to_s]
|
155
|
+
assert_in_delta(@r_icc['Fvalue'],@icc.f.f)
|
156
|
+
end
|
157
|
+
should "num df be correct" do
|
158
|
+
@icc.type=t
|
159
|
+
@r_icc=@iccs[t.to_s]
|
160
|
+
assert_in_delta(@r_icc['df1'],@icc.f.df_num)
|
161
|
+
end
|
162
|
+
should "den df be correct" do
|
163
|
+
@icc.type=t
|
164
|
+
@r_icc=@iccs[t.to_s]
|
165
|
+
assert_in_delta(@r_icc['df2'],@icc.f.df_den)
|
166
|
+
end
|
167
|
+
|
168
|
+
should "f probability be correct" do
|
169
|
+
@icc.type=t
|
170
|
+
@r_icc=@iccs[t.to_s]
|
171
|
+
assert_in_delta(@r_icc['p.value'],@icc.f.probability)
|
172
|
+
end
|
173
|
+
should "bounds be equal" do
|
174
|
+
@icc.type=t
|
175
|
+
@r_icc=@iccs[t.to_s]
|
176
|
+
assert_in_delta(@r_icc['lbound'],@icc.lbound)
|
177
|
+
assert_in_delta(@r_icc['ubound'],@icc.ubound)
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
rescue
|
184
|
+
puts "requires rserve"
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
188
|
+
end
|