statsample-ekatena 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +23 -0
  4. data/CONTRIBUTING.md +17 -0
  5. data/Gemfile +2 -0
  6. data/History.txt +457 -0
  7. data/LICENSE.txt +12 -0
  8. data/README.md +175 -0
  9. data/Rakefile +44 -0
  10. data/benchmarks/correlation_matrix_15_variables.rb +32 -0
  11. data/benchmarks/correlation_matrix_5_variables.rb +33 -0
  12. data/benchmarks/correlation_matrix_methods/correlation_matrix.ds +0 -0
  13. data/benchmarks/correlation_matrix_methods/correlation_matrix.html +93 -0
  14. data/benchmarks/correlation_matrix_methods/correlation_matrix.rb +71 -0
  15. data/benchmarks/correlation_matrix_methods/correlation_matrix.xls +0 -0
  16. data/benchmarks/correlation_matrix_methods/correlation_matrix_gsl_ruby.ods +0 -0
  17. data/benchmarks/correlation_matrix_methods/correlation_matrix_with_graphics.ods +0 -0
  18. data/benchmarks/correlation_matrix_methods/results.ds +0 -0
  19. data/benchmarks/factor_map.rb +37 -0
  20. data/benchmarks/helpers_benchmark.rb +5 -0
  21. data/data/locale/es/LC_MESSAGES/statsample.mo +0 -0
  22. data/doc_latex/manual/equations.tex +78 -0
  23. data/examples/boxplot.rb +28 -0
  24. data/examples/chisquare_test.rb +23 -0
  25. data/examples/correlation_matrix.rb +32 -0
  26. data/examples/dataset.rb +30 -0
  27. data/examples/dominance_analysis.rb +33 -0
  28. data/examples/dominance_analysis_bootstrap.rb +32 -0
  29. data/examples/histogram.rb +26 -0
  30. data/examples/icc.rb +24 -0
  31. data/examples/levene.rb +29 -0
  32. data/examples/multiple_regression.rb +20 -0
  33. data/examples/multivariate_correlation.rb +33 -0
  34. data/examples/parallel_analysis.rb +40 -0
  35. data/examples/polychoric.rb +40 -0
  36. data/examples/principal_axis.rb +26 -0
  37. data/examples/reliability.rb +31 -0
  38. data/examples/scatterplot.rb +25 -0
  39. data/examples/t_test.rb +27 -0
  40. data/examples/tetrachoric.rb +17 -0
  41. data/examples/u_test.rb +24 -0
  42. data/examples/vector.rb +20 -0
  43. data/examples/velicer_map_test.rb +46 -0
  44. data/grab_references.rb +29 -0
  45. data/lib/spss.rb +134 -0
  46. data/lib/statsample-ekatena/analysis.rb +100 -0
  47. data/lib/statsample-ekatena/analysis/suite.rb +89 -0
  48. data/lib/statsample-ekatena/analysis/suitereportbuilder.rb +44 -0
  49. data/lib/statsample-ekatena/anova.rb +24 -0
  50. data/lib/statsample-ekatena/anova/contrast.rb +79 -0
  51. data/lib/statsample-ekatena/anova/oneway.rb +187 -0
  52. data/lib/statsample-ekatena/anova/twoway.rb +207 -0
  53. data/lib/statsample-ekatena/bivariate.rb +406 -0
  54. data/lib/statsample-ekatena/bivariate/pearson.rb +54 -0
  55. data/lib/statsample-ekatena/codification.rb +182 -0
  56. data/lib/statsample-ekatena/converter/csv.rb +28 -0
  57. data/lib/statsample-ekatena/converter/spss.rb +48 -0
  58. data/lib/statsample-ekatena/converters.rb +211 -0
  59. data/lib/statsample-ekatena/crosstab.rb +188 -0
  60. data/lib/statsample-ekatena/daru.rb +115 -0
  61. data/lib/statsample-ekatena/dataset.rb +10 -0
  62. data/lib/statsample-ekatena/dominanceanalysis.rb +425 -0
  63. data/lib/statsample-ekatena/dominanceanalysis/bootstrap.rb +232 -0
  64. data/lib/statsample-ekatena/factor.rb +104 -0
  65. data/lib/statsample-ekatena/factor/map.rb +124 -0
  66. data/lib/statsample-ekatena/factor/parallelanalysis.rb +166 -0
  67. data/lib/statsample-ekatena/factor/pca.rb +242 -0
  68. data/lib/statsample-ekatena/factor/principalaxis.rb +243 -0
  69. data/lib/statsample-ekatena/factor/rotation.rb +198 -0
  70. data/lib/statsample-ekatena/formula/fit_model.rb +46 -0
  71. data/lib/statsample-ekatena/formula/formula.rb +306 -0
  72. data/lib/statsample-ekatena/graph.rb +11 -0
  73. data/lib/statsample-ekatena/graph/boxplot.rb +236 -0
  74. data/lib/statsample-ekatena/graph/histogram.rb +198 -0
  75. data/lib/statsample-ekatena/graph/scatterplot.rb +213 -0
  76. data/lib/statsample-ekatena/histogram.rb +180 -0
  77. data/lib/statsample-ekatena/matrix.rb +329 -0
  78. data/lib/statsample-ekatena/multiset.rb +310 -0
  79. data/lib/statsample-ekatena/regression.rb +65 -0
  80. data/lib/statsample-ekatena/regression/multiple.rb +89 -0
  81. data/lib/statsample-ekatena/regression/multiple/alglibengine.rb +128 -0
  82. data/lib/statsample-ekatena/regression/multiple/baseengine.rb +251 -0
  83. data/lib/statsample-ekatena/regression/multiple/gslengine.rb +129 -0
  84. data/lib/statsample-ekatena/regression/multiple/matrixengine.rb +205 -0
  85. data/lib/statsample-ekatena/regression/multiple/rubyengine.rb +86 -0
  86. data/lib/statsample-ekatena/regression/simple.rb +121 -0
  87. data/lib/statsample-ekatena/reliability.rb +150 -0
  88. data/lib/statsample-ekatena/reliability/icc.rb +415 -0
  89. data/lib/statsample-ekatena/reliability/multiscaleanalysis.rb +181 -0
  90. data/lib/statsample-ekatena/reliability/scaleanalysis.rb +233 -0
  91. data/lib/statsample-ekatena/reliability/skillscaleanalysis.rb +114 -0
  92. data/lib/statsample-ekatena/resample.rb +15 -0
  93. data/lib/statsample-ekatena/shorthand.rb +125 -0
  94. data/lib/statsample-ekatena/srs.rb +169 -0
  95. data/lib/statsample-ekatena/test.rb +82 -0
  96. data/lib/statsample-ekatena/test/bartlettsphericity.rb +45 -0
  97. data/lib/statsample-ekatena/test/chisquare.rb +73 -0
  98. data/lib/statsample-ekatena/test/f.rb +52 -0
  99. data/lib/statsample-ekatena/test/kolmogorovsmirnov.rb +63 -0
  100. data/lib/statsample-ekatena/test/levene.rb +88 -0
  101. data/lib/statsample-ekatena/test/t.rb +309 -0
  102. data/lib/statsample-ekatena/test/umannwhitney.rb +208 -0
  103. data/lib/statsample-ekatena/test/wilcoxonsignedrank.rb +90 -0
  104. data/lib/statsample-ekatena/vector.rb +19 -0
  105. data/lib/statsample-ekatena/version.rb +3 -0
  106. data/lib/statsample.rb +282 -0
  107. data/po/es/statsample.mo +0 -0
  108. data/po/es/statsample.po +959 -0
  109. data/po/statsample.pot +947 -0
  110. data/references.txt +24 -0
  111. data/statsample-ekatena.gemspec +49 -0
  112. data/test/fixtures/bank2.dat +200 -0
  113. data/test/fixtures/correlation_matrix.rb +17 -0
  114. data/test/fixtures/df.csv +15 -0
  115. data/test/fixtures/hartman_23.matrix +9 -0
  116. data/test/fixtures/stock_data.csv +500 -0
  117. data/test/fixtures/tetmat_matrix.txt +5 -0
  118. data/test/fixtures/tetmat_test.txt +1001 -0
  119. data/test/helpers_tests.rb +83 -0
  120. data/test/test_analysis.rb +176 -0
  121. data/test/test_anova_contrast.rb +36 -0
  122. data/test/test_anovaoneway.rb +26 -0
  123. data/test/test_anovatwoway.rb +37 -0
  124. data/test/test_anovatwowaywithdataset.rb +47 -0
  125. data/test/test_anovawithvectors.rb +102 -0
  126. data/test/test_awesome_print_bug.rb +16 -0
  127. data/test/test_bartlettsphericity.rb +25 -0
  128. data/test/test_bivariate.rb +164 -0
  129. data/test/test_codification.rb +78 -0
  130. data/test/test_crosstab.rb +67 -0
  131. data/test/test_dominance_analysis.rb +39 -0
  132. data/test/test_factor.rb +228 -0
  133. data/test/test_factor_map.rb +38 -0
  134. data/test/test_factor_pa.rb +56 -0
  135. data/test/test_fit_model.rb +88 -0
  136. data/test/test_ggobi.rb +35 -0
  137. data/test/test_gsl.rb +15 -0
  138. data/test/test_histogram.rb +109 -0
  139. data/test/test_matrix.rb +48 -0
  140. data/test/test_multiset.rb +176 -0
  141. data/test/test_regression.rb +231 -0
  142. data/test/test_reliability.rb +223 -0
  143. data/test/test_reliability_icc.rb +198 -0
  144. data/test/test_reliability_skillscale.rb +57 -0
  145. data/test/test_resample.rb +24 -0
  146. data/test/test_srs.rb +9 -0
  147. data/test/test_statistics.rb +69 -0
  148. data/test/test_stest.rb +69 -0
  149. data/test/test_stratified.rb +17 -0
  150. data/test/test_test_f.rb +33 -0
  151. data/test/test_test_kolmogorovsmirnov.rb +34 -0
  152. data/test/test_test_t.rb +62 -0
  153. data/test/test_umannwhitney.rb +27 -0
  154. data/test/test_vector.rb +12 -0
  155. data/test/test_wilcoxonsignedrank.rb +64 -0
  156. metadata +570 -0
@@ -0,0 +1,233 @@
1
+ module Statsample
2
+ module Reliability
3
+ # Analysis of a Scale. Analoge of Scale Reliability analysis on SPSS.
4
+ # Returns several statistics for complete scale and each item
5
+ # == Usage
6
+ # @x1 = Daru::Vector.new([1,1,1,1,2,2,2,2,3,3,3,30])
7
+ # @x2 = Daru::Vector.new([1,1,1,2,2,3,3,3,3,4,4,50])
8
+ # @x3 = Daru::Vector.new([2,2,1,1,1,2,2,2,3,4,5,40])
9
+ # @x4 = Daru::Vector.new([1,2,3,4,4,4,4,3,4,4,5,30])
10
+ # ds = Daru::DataFrame.new({:x1 => @x1,:x2 => @x2,:x3 => @x3,:x4 => @x4})
11
+ # ia = Statsample::Reliability::ScaleAnalysis.new(ds)
12
+ # puts ia.summary
13
+ class ScaleAnalysis
14
+ include Summarizable
15
+ attr_reader :ds,:mean, :sd,:valid_n, :alpha , :alpha_standarized, :variances_mean, :covariances_mean, :cov_m
16
+ attr_accessor :name
17
+ attr_accessor :summary_histogram
18
+ def initialize(ds, opts=Hash.new)
19
+ @dumped=ds.vectors.to_a.find_all {|f|
20
+ ds[f].variance == 0
21
+ }
22
+
23
+ @ods = ds
24
+ @ds = ds.reject_values(*Daru::MISSING_VALUES).dup(ds.vectors.to_a - @dumped)
25
+ @ds.rename ds.name
26
+
27
+ @k = @ds.ncols
28
+ @total = @ds.vector_sum
29
+ @o_total=@dumped.size > 0 ? @ods.vector_sum : nil
30
+
31
+ @vector_mean = @ds.vector_mean
32
+ @item_mean = @vector_mean.mean
33
+ @item_sd = @vector_mean.sd
34
+
35
+ @mean = @total.mean
36
+ @median = @total.median
37
+ @skew = @total.skew
38
+ @kurtosis = @total.kurtosis
39
+ @sd = @total.sd
40
+ @variance = @total.variance
41
+ @valid_n = @total.size
42
+
43
+ opts_default = {
44
+ :name => _("Reliability Analysis"),
45
+ :summary_histogram => true
46
+ }
47
+ @opts = opts_default.merge(opts)
48
+ @opts.each{ |k,v| self.send("#{k}=",v) if self.respond_to? k }
49
+
50
+ @cov_m=Statsample::Bivariate.covariance_matrix(@ds)
51
+ # Mean for covariances and variances
52
+ @variances = Daru::Vector.new(@k.times.map { |i| @cov_m[i,i] })
53
+ @variances_mean=@variances.mean
54
+ @covariances_mean=(@variance-@variances.sum).quo(@k**2-@k)
55
+ #begin
56
+ @alpha = Statsample::Reliability.cronbach_alpha(@ds)
57
+ @alpha_standarized = Statsample::Reliability.cronbach_alpha_standarized(@ds)
58
+ #rescue => e
59
+ # raise DatasetException.new(@ds,e), "Error calculating alpha"
60
+ #end
61
+ end
62
+ # Returns a hash with structure
63
+ def item_characteristic_curve
64
+ i=0
65
+ out={}
66
+ total={}
67
+ @ds.each do |row|
68
+ tot=@total[i]
69
+ @ds.vectors.each do |f|
70
+ out[f]||= {}
71
+ total[f]||={}
72
+ out[f][tot]||= 0
73
+ total[f][tot]||=0
74
+ out[f][tot]+= row[f]
75
+ total[f][tot]+=1
76
+ end
77
+ i+=1
78
+ end
79
+ total.each do |f,var|
80
+ var.each do |tot,v|
81
+ out[f][tot]=out[f][tot].quo(total[f][tot])
82
+ end
83
+ end
84
+ out
85
+ end
86
+ # =Adjusted R.P.B. for each item
87
+ # Adjusted RPB(Point biserial-correlation) for each item
88
+ #
89
+ def item_total_correlation
90
+ vecs = @ds.vectors.to_a
91
+ @itc ||= vecs.inject({}) do |a,v|
92
+ total=@ds.vector_sum(vecs - [v])
93
+ a[v]=Statsample::Bivariate.pearson(@ds[v],total)
94
+ a
95
+ end
96
+ end
97
+ def mean_rpb
98
+ Daru::Vector.new(item_total_correlation.values).mean
99
+ end
100
+ def item_statistics
101
+ @is||=@ds.vectors.to_a.inject({}) do |a,v|
102
+ a[v]={:mean=>@ds[v].mean, :sds=>Math::sqrt(@cov_m.variance(v))}
103
+ a
104
+ end
105
+ end
106
+ # Returns a dataset with cases ordered by score
107
+ # and variables ordered by difficulty
108
+
109
+ def item_difficulty_analysis
110
+ dif={}
111
+ @ds.vectors.each{|f| dif[f]=@ds[f].mean }
112
+ dif_sort = dif.sort { |a,b| -(a[1]<=>b[1]) }
113
+ scores_sort={}
114
+ scores=@ds.vector_mean
115
+ scores.each_index{ |i| scores_sort[i]=scores[i] }
116
+ scores_sort=scores_sort.sort{|a,b| a[1]<=>b[1]}
117
+ ds_new = Daru::DataFrame.new({}, order: ([:case,:score] + dif_sort.collect{|a,b| a.to_sym}))
118
+ scores_sort.each do |i,score|
119
+ row = [i, score]
120
+ case_row = @ds.row[i].to_hash
121
+ dif_sort.each{ |variable,dif_value| row.push(case_row[variable]) }
122
+ ds_new.add_row(row)
123
+ end
124
+ ds_new
125
+ end
126
+
127
+ def stats_if_deleted
128
+ @sif||=stats_if_deleted_intern
129
+ end
130
+
131
+ def stats_if_deleted_intern # :nodoc:
132
+ return Hash.new if @ds.ncols == 1
133
+ vecs = @ds.vectors.to_a
134
+ vecs.inject({}) do |a,v|
135
+ cov_2=@cov_m.submatrix(vecs - [v])
136
+ #ds2=@ds.clone
137
+ #ds2.delete_vector(v)
138
+ #total=ds2.vector_sum
139
+ a[v]={}
140
+ #a[v][:mean]=total.mean
141
+ a[v][:mean]=@mean-item_statistics[v][:mean]
142
+ a[v][:variance_sample]=cov_2.total_sum
143
+ a[v][:sds]=Math::sqrt(a[v][:variance_sample])
144
+ n=cov_2.row_size
145
+ a[v][:alpha] = (n>=2) ? Statsample::Reliability.cronbach_alpha_from_covariance_matrix(cov_2) : nil
146
+ a
147
+ end
148
+ end
149
+ def report_building(builder) #:nodoc:
150
+ builder.section(:name=>@name) do |s|
151
+
152
+ if @dumped.size>0
153
+ s.section(:name=>"Items with variance=0") do |s1|
154
+ s.table(:name=>_("Summary for %s with all items") % @name) do |t|
155
+ t.row [_("Items"), @ods.ncols]
156
+ t.row [_("Sum mean"), "%0.4f" % @o_total.mean]
157
+ t.row [_("S.d. mean"), "%0.4f" % @o_total.sd]
158
+ end
159
+ s.table(:name=>_("Deleted items"), :header=>['item','mean']) do |t|
160
+ @dumped.each do |f|
161
+ t.row(["#{@ods[f].name}(#{f})", "%0.5f" % @ods[f].mean])
162
+ end
163
+ end
164
+ s.parse_element(Statsample::Graph::Histogram.new(@o_total, :name=>"Histogram (complete data) for %s" % @name)) if @summary_histogram
165
+ end
166
+ end
167
+
168
+
169
+ s.table(:name=>_("Summary for %s") % @name) do |t|
170
+ t.row [_("Valid Items"), @ds.ncols]
171
+
172
+ t.row [_("Valid cases"), @valid_n]
173
+ t.row [_("Sum mean"), "%0.4f" % @mean]
174
+ t.row [_("Sum sd"), "%0.4f" % @sd ]
175
+ # t.row [_("Sum variance"), "%0.4f" % @variance]
176
+ t.row [_("Sum median"), @median]
177
+ t.hr
178
+ t.row [_("Item mean"), "%0.4f" % @item_mean]
179
+ t.row [_("Item sd"), "%0.4f" % @item_sd]
180
+ t.hr
181
+ t.row [_("Skewness"), "%0.4f" % @skew]
182
+ t.row [_("Kurtosis"), "%0.4f" % @kurtosis]
183
+ t.hr
184
+ t.row [_("Cronbach's alpha"), @alpha ? ("%0.4f" % @alpha) : "--"]
185
+ t.row [_("Standarized Cronbach's alpha"), @alpha_standarized ? ("%0.4f" % @alpha_standarized) : "--" ]
186
+ t.row [_("Mean rpb"), "%0.4f" % mean_rpb]
187
+
188
+ t.row [_("Variances mean"), "%g" % @variances_mean]
189
+ t.row [_("Covariances mean") , "%g" % @covariances_mean]
190
+ end
191
+
192
+ if (@alpha)
193
+ s.text _("Items for obtain alpha(0.8) : %d" % Statsample::Reliability::n_for_desired_reliability(@alpha, 0.8, @ds.ncols))
194
+ s.text _("Items for obtain alpha(0.9) : %d" % Statsample::Reliability::n_for_desired_reliability(@alpha, 0.9, @ds.ncols))
195
+ end
196
+
197
+
198
+ sid=stats_if_deleted
199
+ is=item_statistics
200
+ itc=item_total_correlation
201
+
202
+ 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|
203
+ @ds.vectors.each do |f|
204
+ row=["#{@ds[f].name}(#{f})"]
205
+ if is[f]
206
+ row+=[sprintf("%0.5f",is[f][:mean]), sprintf("%0.5f", is[f][:sds])]
207
+ else
208
+ row+=["-","-"]
209
+ end
210
+ if sid[f]
211
+ row+= [sprintf("%0.5f",sid[f][:mean]), sprintf("%0.5f",sid[f][:variance_sample]), sprintf("%0.5f",sid[f][:sds])]
212
+ else
213
+ row+=%w{- - -}
214
+ end
215
+ if itc[f]
216
+ row+= [sprintf("%0.5f",itc[f])]
217
+ else
218
+ row+=['-']
219
+ end
220
+ if sid[f] and !sid[f][:alpha].nil?
221
+ row+=[sprintf("%0.5f",sid[f][:alpha])]
222
+ else
223
+ row+=["-"]
224
+ end
225
+ t.row row
226
+ end # end each
227
+ end # table
228
+ s.parse_element(Statsample::Graph::Histogram.new(@total, :name=>"Histogram (valid data) for %s" % @name)) if @summary_histogram
229
+ end # section
230
+ end # def
231
+ end # class
232
+ end # module
233
+ end # module
@@ -0,0 +1,114 @@
1
+ module Statsample
2
+ module Reliability
3
+ # Analysis of a Skill Scale
4
+ # Given a dataset with results and a correct answers hash,
5
+ # generates a ScaleAnalysis
6
+ # == Usage
7
+ # x1 = Daru::Vector.new(%{a b b c})
8
+ # x2 = Daru::Vector.new(%{b a b c})
9
+ # x3 = Daru::Vector.new(%{a c b a})
10
+ # ds = Daru::DataFrame.new({:x1 => @x1, :x2 => @x2, :x3 => @x3})
11
+ # key={ :x1 => 'a',:x2 => 'b', :x3 => 'a'}
12
+ # ssa=Statsample::Reliability::SkillScaleAnalysis.new(ds,key)
13
+ # puts ssa.summary
14
+ class SkillScaleAnalysis
15
+ include Summarizable
16
+ attr_accessor :name
17
+ attr_accessor :summary_minimal_item_correlation
18
+ attr_accessor :summary_show_problematic_items
19
+ def initialize(ds,key,opts=Hash.new)
20
+ opts_default={
21
+ :name=>_("Skill Scale Reliability Analysis (%s)") % ds.name,
22
+ :summary_minimal_item_correlation=>0.10,
23
+ :summary_show_problematic_items=>true
24
+ }
25
+ @ds=ds
26
+ @key=key
27
+ @opts=opts_default.merge(opts)
28
+ @opts.each{|k,v| self.send("#{k}=",v) if self.respond_to? k }
29
+ @cds=nil
30
+ end
31
+ # Dataset only corrected vectors
32
+ def corrected_dataset_minimal
33
+ cds = corrected_dataset
34
+ dsm = Daru::DataFrame.new(
35
+ @key.keys.inject({}) do |ac,v|
36
+ ac[v] = cds[v]
37
+ ac
38
+ end
39
+ )
40
+
41
+ dsm.rename _("Corrected dataset from %s") % @ds.name
42
+ dsm
43
+ end
44
+
45
+ def vector_sum
46
+ corrected_dataset_minimal.vector_sum
47
+ end
48
+
49
+ def vector_mean
50
+ corrected_dataset_minimal.vector_mean
51
+ end
52
+
53
+ def scale_analysis
54
+ sa = ScaleAnalysis.new(corrected_dataset_minimal)
55
+ sa.name=_("%s (Scale Analysis)") % @name
56
+ sa
57
+ end
58
+
59
+ def corrected_dataset
60
+ if @cds.nil?
61
+ @cds = Daru::DataFrame.new({}, order: @ds.vectors, name: @ds.name)
62
+ @ds.each_row do |row|
63
+ out = {}
64
+ row.each_with_index do |v, k|
65
+ if @key.has_key? k
66
+ if @ds[k].reject_values(*Daru::MISSING_VALUES).include_values? v
67
+ out[k]= @key[k] == v ? 1 : 0
68
+ else
69
+ out[k] = nil
70
+ end
71
+ else
72
+ out[k] = v
73
+ end
74
+ end
75
+
76
+ @cds.add_row(Daru::Vector.new(out))
77
+ end
78
+ @cds.update
79
+ end
80
+ @cds
81
+ end
82
+
83
+ def report_building(builder)
84
+ builder.section(:name=>@name) do |s|
85
+ sa = scale_analysis
86
+ s.parse_element(sa)
87
+ if summary_show_problematic_items
88
+ s.section(:name=>_("Problematic Items")) do |spi|
89
+ count=0
90
+ sa.item_total_correlation.each do |k,v|
91
+ if v < summary_minimal_item_correlation
92
+ count+=1
93
+ spi.section(:name=>_("Item: %s") % @ds[k].name) do |spii|
94
+ spii.text _("Correct answer: %s") % @key[k]
95
+ spii.text _("p: %0.3f") % corrected_dataset[k].mean
96
+ props=@ds[k].proportions.inject({}) {|ac,v| ac[v[0]] = v[1].to_f;ac}
97
+
98
+ spi.table(:name=>"Proportions",:header=>[_("Value"), _("%")]) do |table|
99
+ props.each do |k1,v|
100
+ table.row [ @ds[k].index_of(k1), "%0.3f" % v]
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ spi.text _("No problematic items") if count==0
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,15 @@
1
+ module Statsample
2
+ module Resample
3
+ class << self
4
+ def repeat_and_save(times,&action)
5
+ (1..times).inject([]) {|a,x| a.push(action.call); a}
6
+ end
7
+
8
+ def generate (size,low,upper)
9
+ range=upper-low+1
10
+ Daru::Vector.new((0...size).collect {|x| rand(range)+low })
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,125 @@
1
+ class Object
2
+ # Shorthand for Statsample::Analysis.store(*args,&block)
3
+ def ss_analysis(*args,&block)
4
+ Statsample::Analysis.store(*args,&block)
5
+ end
6
+ end
7
+
8
+ module Statsample
9
+ # Module which provide shorthands for many methods.
10
+ module Shorthand
11
+ ###
12
+ # :section: R like methods
13
+ ###
14
+
15
+ # Import an Excel file. Cache result by default
16
+ def read_excel(filename, opts=Hash.new)
17
+ Daru::DataFrame.from_excel filename, opts
18
+ end
19
+
20
+ # Import an CSV file. Cache result by default
21
+ def read_csv(filename, opts=Hash.new)
22
+ Daru::DataFrame.from_csv filename, opts
23
+ end
24
+
25
+ # Retrieve names (fields) from dataset
26
+ def names(ds)
27
+ ds.vectors.to_a
28
+ end
29
+ # Create a correlation matrix from a dataset
30
+ def cor(ds)
31
+ Statsample::Bivariate.correlation_matrix(ds)
32
+ end
33
+ # Create a variance/covariance matrix from a dataset
34
+ def cov(ds)
35
+ Statsample::Bivariate.covariate_matrix(ds)
36
+ end
37
+ # Create a Daru::Vector
38
+ # Analog to R's c
39
+ def vector(*args)
40
+ Daru::Vector[*args]
41
+ end
42
+ # Random generation for the normal distribution
43
+ def rnorm(n,mean=0,sd=1)
44
+ rng=Distribution::Normal.rng(mean,sd)
45
+ Daru::Vector.new_with_size(n) { rng.call}
46
+ end
47
+ # Creates a new Daru::DataFrame
48
+ # Each key is transformed into a Symbol wherever possible.
49
+ def dataset(vectors=Hash.new)
50
+ vectors = vectors.inject({}) do |ac,v|
51
+ n = v[0].respond_to?(:to_sym) ? v[0].to_sym : v[0]
52
+ ac[n] = v[1]
53
+ ac
54
+ end
55
+ Daru::DataFrame.new(vectors)
56
+ end
57
+ alias :data_frame :dataset
58
+ # Returns a Statsample::Graph::Boxplot
59
+ def boxplot(*args)
60
+ Statsample::Graph::Boxplot.new(*args)
61
+ end
62
+ # Returns a Statsample::Graph::Histogram
63
+ def histogram(*args)
64
+ Statsample::Graph::Histogram.new(*args)
65
+ end
66
+
67
+ # Returns a Statsample::Graph::Scatterplot
68
+ def scatterplot(*args)
69
+ Statsample::Graph::Scatterplot.new(*args)
70
+ end
71
+ # Returns a Statsample::Test::Levene
72
+ def levene(*args)
73
+ Statsample::Test::Levene.new(*args)
74
+ end
75
+
76
+ def principal_axis(*args)
77
+ Statsample::Factor::PrincipalAxis.new(*args)
78
+ end
79
+
80
+ def polychoric(*args)
81
+ Statsample::Bivariate::Polychoric.new(*args)
82
+ end
83
+
84
+ def tetrachoric(*args)
85
+ Statsample::Bivariate::Tetrachoric.new(*args)
86
+ end
87
+
88
+ ###
89
+ # Other Shortcuts
90
+ ###
91
+ def lr(*args)
92
+ Statsample::Regression.multiple(*args)
93
+ end
94
+
95
+ def pca(ds,opts=Hash.new)
96
+ Statsample::Factor::PCA.new(ds,opts)
97
+ end
98
+
99
+ def dominance_analysis(*args)
100
+ Statsample::DominanceAnalysis.new(*args)
101
+ end
102
+
103
+ def dominance_analysis_bootstrap(*args)
104
+ Statsample::DominanceAnalysis::Bootstrap.new(*args)
105
+ end
106
+
107
+ def scale_analysis(*args)
108
+ Statsample::Reliability::ScaleAnalysis.new(*args)
109
+ end
110
+
111
+ def skill_scale_analysis(*args)
112
+ Statsample::Reliability::SkillScaleAnalysis.new(*args)
113
+ end
114
+
115
+ def multiscale_analysis(*args,&block)
116
+ Statsample::Reliability::MultiScaleAnalysis.new(*args,&block)
117
+ end
118
+
119
+ def test_u(*args)
120
+ Statsample::Test::UMannWhitney.new(*args)
121
+ end
122
+
123
+ module_function :test_u, :rnorm
124
+ end
125
+ end