statsample 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +2 -1
- data/History.txt +11 -0
- data/Manifest.txt +2 -3
- data/README.txt +0 -17
- data/Rakefile +10 -9
- data/data/locale/es/LC_MESSAGES/statsample.mo +0 -0
- data/examples/principal_axis.rb +2 -0
- data/examples/u_test.rb +8 -0
- data/lib/distribution.rb +1 -1
- data/lib/statsample.rb +12 -12
- data/lib/statsample/anova/oneway.rb +4 -4
- data/lib/statsample/bivariate.rb +10 -3
- data/lib/statsample/bivariate/pearson.rb +55 -0
- data/lib/statsample/dataset.rb +57 -49
- data/lib/statsample/dominanceanalysis.rb +1 -2
- data/lib/statsample/dominanceanalysis/bootstrap.rb +46 -54
- data/lib/statsample/factor.rb +0 -1
- data/lib/statsample/factor/parallelanalysis.rb +9 -13
- data/lib/statsample/factor/pca.rb +5 -10
- data/lib/statsample/factor/principalaxis.rb +27 -33
- data/lib/statsample/matrix.rb +11 -11
- data/lib/statsample/mle.rb +0 -1
- data/lib/statsample/regression.rb +0 -1
- data/lib/statsample/reliability.rb +2 -2
- data/lib/statsample/reliability/multiscaleanalysis.rb +62 -15
- data/lib/statsample/reliability/scaleanalysis.rb +5 -6
- data/lib/statsample/test/f.rb +2 -5
- data/lib/statsample/test/levene.rb +2 -5
- data/lib/statsample/test/t.rb +4 -13
- data/lib/statsample/test/umannwhitney.rb +19 -19
- data/po/es/statsample.mo +0 -0
- data/po/es/statsample.po +304 -111
- data/po/statsample.pot +224 -90
- data/test/test_bivariate.rb +8 -69
- data/test/test_reliability.rb +3 -4
- metadata +30 -18
- metadata.gz.sig +0 -0
- data/lib/statsample/bivariate/polychoric.rb +0 -893
- data/lib/statsample/bivariate/tetrachoric.rb +0 -457
- data/test/test_bivariate_polychoric.rb +0 -70
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
module Statsample
|
3
2
|
# Dominance Analysis is a procedure based on an examination of the R<sup>2</sup> values
|
4
3
|
# for all possible subset models, to identify the relevance of one or more
|
@@ -57,7 +56,7 @@ module Statsample
|
|
57
56
|
# * 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.
|
58
57
|
#
|
59
58
|
class DominanceAnalysis
|
60
|
-
|
59
|
+
include Summarizable
|
61
60
|
# Class to generate the regressions. Default to Statsample::Regression::Multiple::MatrixEngine
|
62
61
|
attr_accessor :regression_class
|
63
62
|
# Name of analysis
|
@@ -66,9 +66,8 @@ module Statsample
|
|
66
66
|
#
|
67
67
|
# * Azen, R. & Budescu, D.V. (2003). The dominance analysis approach for comparing predictors in multiple regression. <em>Psychological Methods, 8</em>(2), 129-148.
|
68
68
|
class Bootstrap
|
69
|
-
include GetText
|
70
69
|
include Writable
|
71
|
-
|
70
|
+
include Summarizable
|
72
71
|
# Total Dominance results
|
73
72
|
attr_reader :samples_td
|
74
73
|
# Conditional Dominance results
|
@@ -169,68 +168,61 @@ module Statsample
|
|
169
168
|
}
|
170
169
|
end
|
171
170
|
end
|
172
|
-
# Summary of analysis
|
173
|
-
def summary
|
174
|
-
rp=ReportBuilder.new().add(self).to_text
|
175
|
-
end
|
176
|
-
|
177
171
|
def t
|
178
172
|
Distribution::T.p_value(1-((1-@alpha) / 2), @n_samples - 1)
|
179
173
|
end
|
180
|
-
def report_building(
|
174
|
+
def report_building(builder) # :nodoc:
|
181
175
|
raise "You should bootstrap first" if @n_samples==0
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
table.
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
generator.parse_element(table)
|
226
|
-
generator.html("</div>")
|
176
|
+
builder.section(:name=>@name) do |generator|
|
177
|
+
generator.text _("Sample size: %d\n") % @n_samples
|
178
|
+
generator.text "t: #{t}\n"
|
179
|
+
generator.text _("Linear Regression Engine: %s") % @regression_class.name
|
180
|
+
|
181
|
+
table=ReportBuilder::Table.new(:name=>"Bootstrap report", :header => [_("pairs"), "sD","Dij", _("SE(Dij)"), "Pij", "Pji", "Pno", _("Reproducibility")])
|
182
|
+
table.row([_("Complete dominance"),"","","","","","",""])
|
183
|
+
table.hr
|
184
|
+
@pairs.each{|pair|
|
185
|
+
std=@samples_td[pair].to_vector(:scale)
|
186
|
+
ttd=da.total_dominance_pairwise(pair[0],pair[1])
|
187
|
+
table.row(summary_pairs(pair,std,ttd))
|
188
|
+
}
|
189
|
+
table.hr
|
190
|
+
table.row([_("Conditional dominance"),"","","","","","",""])
|
191
|
+
table.hr
|
192
|
+
@pairs.each{|pair|
|
193
|
+
std=@samples_cd[pair].to_vector(:scale)
|
194
|
+
ttd=da.conditional_dominance_pairwise(pair[0],pair[1])
|
195
|
+
table.row(summary_pairs(pair,std,ttd))
|
196
|
+
|
197
|
+
}
|
198
|
+
table.hr
|
199
|
+
table.row([_("General Dominance"),"","","","","","",""])
|
200
|
+
table.hr
|
201
|
+
@pairs.each{|pair|
|
202
|
+
std=@samples_gd[pair].to_vector(:scale)
|
203
|
+
ttd=da.general_dominance_pairwise(pair[0],pair[1])
|
204
|
+
table.row(summary_pairs(pair,std,ttd))
|
205
|
+
}
|
206
|
+
generator.parse_element(table)
|
207
|
+
|
208
|
+
table=ReportBuilder::Table.new(:name=>_("General averages"), :header=>[_("var"), _("mean"), _("se"), _("p.5"), _("p.95")])
|
209
|
+
|
210
|
+
@fields.each{|f|
|
211
|
+
v=@samples_ga[f].to_vector(:scale)
|
212
|
+
row=[@ds[f].name, sprintf("%0.3f",v.mean), sprintf("%0.3f",v.sd), sprintf("%0.3f",v.percentil(5)),sprintf("%0.3f",v.percentil(95))]
|
213
|
+
table.row(row)
|
214
|
+
|
215
|
+
}
|
216
|
+
|
217
|
+
generator.parse_element(table)
|
218
|
+
end
|
227
219
|
end
|
228
220
|
def summary_pairs(pair,std,ttd)
|
229
221
|
freqs=std.proportions
|
230
222
|
[0, 0.5, 1].each{|n|
|
231
223
|
freqs[n]=0 if freqs[n].nil?
|
232
224
|
}
|
233
|
-
name
|
225
|
+
name="%s - %s" % [@ds[pair[0]].name, @ds[pair[1]].name]
|
234
226
|
[name,f(ttd,1),f(std.mean,4),f(std.sd),f(freqs[1]), f(freqs[0]), f(freqs[0.5]), f(freqs[ttd])]
|
235
227
|
end
|
236
228
|
def f(v,n=3)
|
data/lib/statsample/factor.rb
CHANGED
@@ -15,7 +15,7 @@ module Factor
|
|
15
15
|
class ParallelAnalysis
|
16
16
|
|
17
17
|
include DirtyMemoize
|
18
|
-
|
18
|
+
include Summarizable
|
19
19
|
# Number of random sets to produce. 50 by default
|
20
20
|
attr_accessor :iterations
|
21
21
|
# Name of analysis
|
@@ -47,7 +47,7 @@ class ParallelAnalysis
|
|
47
47
|
@n_variables=@fields.size
|
48
48
|
@n_cases=ds.cases
|
49
49
|
opts_default={
|
50
|
-
:name=>"Parallel Analysis",
|
50
|
+
:name=>_("Parallel Analysis"),
|
51
51
|
:iterations=>50,
|
52
52
|
:bootstrap_method => :raw_data,
|
53
53
|
:factor_class => Statsample::Factor::PCA,
|
@@ -59,10 +59,6 @@ class ParallelAnalysis
|
|
59
59
|
@opts[:matrix_method]==:correlation_matrix if @opts[:bootstrap_method]==:parameters
|
60
60
|
opts_default.keys.each {|k| send("#{k}=", @opts[k]) }
|
61
61
|
end
|
62
|
-
# Summary of results
|
63
|
-
def summary
|
64
|
-
ReportBuilder.new(:no_title=>true).add(self).to_text
|
65
|
-
end
|
66
62
|
# Number of factor to retent
|
67
63
|
def number_of_factors
|
68
64
|
total=0
|
@@ -73,13 +69,13 @@ class ParallelAnalysis
|
|
73
69
|
end
|
74
70
|
def report_building(g) #:nodoc:
|
75
71
|
g.section(:name=>@name) do |s|
|
76
|
-
s.text "Bootstrap Method:
|
77
|
-
s.text "Correlation Matrix type :
|
78
|
-
s.text "Number of variables:
|
79
|
-
s.text "Number of cases:
|
80
|
-
s.text "Number of iterations:
|
81
|
-
s.text "Number or factors to preserve:
|
82
|
-
s.table(:name=>"Eigenvalues", :header=>["Eigenvalue", "actual", "mean","p.#{percentil}","preserve?"]) do |t|
|
72
|
+
s.text _("Bootstrap Method: %s") % bootstrap_method
|
73
|
+
s.text _("Correlation Matrix type : %s") % matrix_method
|
74
|
+
s.text _("Number of variables: %d") % @n_variables
|
75
|
+
s.text _("Number of cases: %d") % @n_cases
|
76
|
+
s.text _("Number of iterations: %d") % @iterations
|
77
|
+
s.text _("Number or factors to preserve: %d") % number_of_factors
|
78
|
+
s.table(:name=>_("Eigenvalues"), :header=>[_("Eigenvalue"), _("actual"), _("mean"),"p.#{percentil}",_("preserve?")]) do |t|
|
83
79
|
ds_eigenvalues.fields.each_with_index do |f,i|
|
84
80
|
v=ds_eigenvalues[f]
|
85
81
|
t.row [i+1, "%0.4f" % @original[i], "%0.4f" % v.mean, "%0.4f" % v.percentil(percentil), (v.percentil(percentil)>0 and @original[i] > v.percentil(percentil)) ? "Yes":""]
|
@@ -36,8 +36,7 @@ module Factor
|
|
36
36
|
attr_accessor :m
|
37
37
|
# Use GSL if available
|
38
38
|
attr_accessor :use_gsl
|
39
|
-
include
|
40
|
-
bindtextdomain("statsample")
|
39
|
+
include Summarizable
|
41
40
|
|
42
41
|
def initialize(matrix, opts=Hash.new)
|
43
42
|
@use_gsl=nil
|
@@ -139,25 +138,21 @@ module Factor
|
|
139
138
|
@eigenpairs=@eigenpairs.sort.reverse
|
140
139
|
end
|
141
140
|
|
142
|
-
def summary
|
143
|
-
ReportBuilder.new(:no_title=>true).add(self).to_text
|
144
|
-
end
|
145
141
|
def report_building(builder) # :nodoc:
|
146
142
|
builder.section(:name=>@name) do |generator|
|
147
|
-
generator.text "Number of factors:
|
148
|
-
generator.table(:name=>_("Communalities"), :header=>["Variable","Initial","Extraction"]) do |t|
|
143
|
+
generator.text _("Number of factors: %d") % m
|
144
|
+
generator.table(:name=>_("Communalities"), :header=>[_("Variable"),_("Initial"),_("Extraction")]) do |t|
|
149
145
|
communalities(m).each_with_index {|com,i|
|
150
146
|
t.row([i, 1.0, sprintf("%0.3f", com)])
|
151
147
|
}
|
152
148
|
end
|
153
|
-
generator.table(:name=>_("Eigenvalues"), :header=>["Variable","Value"]) do |t|
|
149
|
+
generator.table(:name=>_("Eigenvalues"), :header=>[_("Variable"),_("Value")]) do |t|
|
154
150
|
eigenvalues.each_with_index {|eigenvalue,i|
|
155
151
|
t.row([i, sprintf("%0.3f",eigenvalue)])
|
156
152
|
}
|
157
153
|
end
|
158
154
|
|
159
|
-
generator.table(:name=>_("Component Matrix"), :header=>["Variable"]+m.times.collect {|c| c+1}) do |t|
|
160
|
-
|
155
|
+
generator.table(:name=>_("Component Matrix"), :header=>[_("Variable")]+m.times.collect {|c| c+1}) do |t|
|
161
156
|
i=0
|
162
157
|
component_matrix(m).to_a.each do |row|
|
163
158
|
t.row([i]+row.collect {|c| sprintf("%0.3f",c)})
|
@@ -28,12 +28,11 @@ module Factor
|
|
28
28
|
#
|
29
29
|
class PrincipalAxis
|
30
30
|
include DirtyMemoize
|
31
|
+
include Summarizable
|
31
32
|
# Minimum difference between succesive iterations on sum of communalities
|
32
33
|
DELTA=1e-3
|
33
34
|
# Maximum number of iterations
|
34
35
|
MAX_ITERATIONS=50
|
35
|
-
include GetText
|
36
|
-
bindtextdomain("statsample")
|
37
36
|
# Number of factors. Set by default to the number of factors
|
38
37
|
# with eigen values > 1 on PCA over data
|
39
38
|
attr_accessor :m
|
@@ -58,6 +57,12 @@ module Factor
|
|
58
57
|
|
59
58
|
def initialize(matrix, opts=Hash.new)
|
60
59
|
@matrix=matrix
|
60
|
+
if @matrix.respond_to? :fields
|
61
|
+
@fields=@matrix.fields
|
62
|
+
else
|
63
|
+
@fields=@matrix.row_size.times.map {|i| _("Variable %d") % (i+1)}
|
64
|
+
end
|
65
|
+
|
61
66
|
@name=""
|
62
67
|
@m=nil
|
63
68
|
@initial_eigenvalues=nil
|
@@ -167,40 +172,29 @@ module Factor
|
|
167
172
|
rxx=Matrix.rows(rows)
|
168
173
|
[rxx,rxy]
|
169
174
|
end
|
170
|
-
def summary
|
171
|
-
rp=ReportBuilder.new()
|
172
|
-
rp.add(self)
|
173
|
-
rp.to_text
|
174
|
-
end
|
175
175
|
def report_building(generator)
|
176
176
|
iterate if @clean
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
i=0
|
198
|
-
component_matrix(m).to_a.each do |row|
|
199
|
-
t.row([i]+row.collect {|c| sprintf("%0.3f",c)})
|
200
|
-
i+=1
|
177
|
+
generator.section(:name=>@name) do |s|
|
178
|
+
s.text _("Number of factors: %d") % m
|
179
|
+
s.text _("Iterations: %d") % @iterations
|
180
|
+
s.table(:name=>_("Communalities"), :header=>[_("Variable"),_("Initial"),_("Extraction")]) do |t|
|
181
|
+
communalities(m).each_with_index {|com,i|
|
182
|
+
t.row([@fields[i], sprintf("%0.4f", initial_communalities[i]), sprintf("%0.3f", com)])
|
183
|
+
}
|
184
|
+
end
|
185
|
+
s.table(:name=>_("Eigenvalues"), :header=>[_("Variable"),_("Value")]) do |t|
|
186
|
+
@initial_eigenvalues.each_with_index {|eigenvalue,i|
|
187
|
+
t.row([@fields[i], sprintf("%0.3f",eigenvalue)])
|
188
|
+
}
|
189
|
+
end
|
190
|
+
s.table(:name=>_("Component Matrix"), :header=>["Variable"]+m.times.collect {|c| c+1}) do |t|
|
191
|
+
i=0
|
192
|
+
component_matrix(m).to_a.each do |row|
|
193
|
+
t.row([@fields[i]]+row.collect {|c| sprintf("%0.3f",c)})
|
194
|
+
i+=1
|
195
|
+
end
|
196
|
+
end
|
201
197
|
end
|
202
|
-
generator.parse_element(t)
|
203
|
-
generator.html("</div>")
|
204
198
|
end
|
205
199
|
|
206
200
|
dirty_writer :max_iterations, :epsilon, :smc
|
data/lib/statsample/matrix.rb
CHANGED
@@ -37,12 +37,8 @@ module Statsample
|
|
37
37
|
#
|
38
38
|
module CovariateMatrix
|
39
39
|
include Summarizable
|
40
|
-
|
41
|
-
|
42
|
-
rp=ReportBuilder.new()
|
43
|
-
rp.add(self)
|
44
|
-
rp.to_text
|
45
|
-
end
|
40
|
+
@@covariatematrix=0
|
41
|
+
|
46
42
|
# Get type of covariate matrix. Could be :covariance or :correlation
|
47
43
|
def type
|
48
44
|
if row_size==column_size
|
@@ -81,7 +77,7 @@ module Statsample
|
|
81
77
|
end
|
82
78
|
def fields
|
83
79
|
raise "Should be square" if !square?
|
84
|
-
|
80
|
+
fields_x
|
85
81
|
end
|
86
82
|
def fields=(v)
|
87
83
|
raise "Matrix should be square" if !square?
|
@@ -97,17 +93,21 @@ module Statsample
|
|
97
93
|
@fields_y=v
|
98
94
|
end
|
99
95
|
def fields_x
|
100
|
-
@fields_x||=row_size.times.collect {|i| i}
|
96
|
+
@fields_x||=row_size.times.collect {|i| _("X%d") % i}
|
101
97
|
end
|
102
98
|
def fields_y
|
103
|
-
@fields_y||=column_size.times.collect {|i| i}
|
99
|
+
@fields_y||=column_size.times.collect {|i| _("Y%d") % i}
|
104
100
|
end
|
105
101
|
|
106
102
|
def name=(v)
|
107
103
|
@name=v
|
108
104
|
end
|
109
105
|
def name
|
110
|
-
@name
|
106
|
+
@name||=get_new_name
|
107
|
+
end
|
108
|
+
def get_new_name
|
109
|
+
@@covariatematrix+=1
|
110
|
+
_("Covariate matrix %d") % @@covariatematrix
|
111
111
|
end
|
112
112
|
# Select a submatrix of factors. If you have a correlation matrix
|
113
113
|
# with a, b and c, you could obtain a submatrix of correlations of
|
@@ -149,7 +149,7 @@ module Statsample
|
|
149
149
|
matrix
|
150
150
|
end
|
151
151
|
def report_building(generator)
|
152
|
-
@name||= (type==:correlation ? "Correlation":"Covariance")+" Matrix"
|
152
|
+
@name||= (type==:correlation ? _("Correlation"):_("Covariance"))+_(" Matrix")
|
153
153
|
generator.table(:name=>@name, :header=>[""]+fields_y) do |t|
|
154
154
|
row_size.times {|i|
|
155
155
|
t.row([fields_x[i]]+@rows[i].collect {|i1| sprintf("%0.3f",i1).gsub("0.",".")})
|
data/lib/statsample/mle.rb
CHANGED
@@ -108,7 +108,7 @@ module Statsample
|
|
108
108
|
out
|
109
109
|
end # def
|
110
110
|
end # self
|
111
|
-
|
112
|
-
|
111
|
+
end # Reliability
|
112
|
+
end # Statsample
|
113
113
|
require 'statsample/reliability/scaleanalysis.rb'
|
114
114
|
require 'statsample/reliability/multiscaleanalysis.rb'
|
@@ -1,33 +1,62 @@
|
|
1
1
|
module Statsample
|
2
2
|
module Reliability
|
3
|
-
# DSL for analysis of multiple scales analysis.
|
4
|
-
#
|
3
|
+
# DSL for analysis of multiple scales analysis.
|
4
|
+
# Retrieves reliability analysis for each scale and
|
5
|
+
# provides fast accessors to correlations matrix,
|
6
|
+
# PCA and Factor Analysis.
|
7
|
+
#
|
5
8
|
# == Usage
|
6
9
|
# @x1=[1,1,1,1,2,2,2,2,3,3,3,30].to_vector(:scale)
|
7
10
|
# @x2=[1,1,1,2,2,3,3,3,3,4,4,50].to_vector(:scale)
|
8
11
|
# @x3=[2,2,1,1,1,2,2,2,3,4,5,40].to_vector(:scale)
|
9
12
|
# @x4=[1,2,3,4,4,4,4,3,4,4,5,30].to_vector(:scale)
|
10
13
|
# ds={'x1'=>@x1,'x2'=>@x2,'x3'=>@x3,'x4'=>@x4}.to_dataset
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# m.
|
14
|
+
# opts={:name=>"Scales", # Name of analysis
|
15
|
+
# :summary_correlation_matrix=>true, # Add correlation matrix
|
16
|
+
# :summary_pca } # Add PCA between scales
|
17
|
+
# msa=Statsample::Reliability::MultiScaleAnalysis.new(opts) do |m|
|
18
|
+
# m.scale :s1, ds.clone(%w{x1 x2})
|
19
|
+
# m.scale :s2, ds.clone(%w{x3 x4}), {:name=>"Scale 2"}
|
16
20
|
# end
|
17
|
-
#
|
21
|
+
# # Retrieve summary
|
22
|
+
# puts msa.summary
|
18
23
|
class MultiScaleAnalysis
|
19
24
|
include Statsample::Summarizable
|
25
|
+
# Hash with scales
|
20
26
|
attr_reader :scales
|
27
|
+
# Name of analysis
|
21
28
|
attr_accessor :name
|
29
|
+
# Add a correlation matrix on summary
|
22
30
|
attr_accessor :summary_correlation_matrix
|
31
|
+
# Add PCA to summary
|
23
32
|
attr_accessor :summary_pca
|
33
|
+
# Add Principal Axis to summary
|
34
|
+
attr_accessor :summary_principal_axis
|
35
|
+
# Options for Factor::PCA object
|
24
36
|
attr_accessor :pca_options
|
37
|
+
# Options for Factor::PrincipalAxis
|
38
|
+
attr_accessor :principal_axis_options
|
39
|
+
# Generates a new MultiScaleAnalysis
|
40
|
+
# Opts could be any accessor of the class
|
41
|
+
# * :name,
|
42
|
+
# * :summary_correlation_matrix
|
43
|
+
# * :summary_pca
|
44
|
+
# * :summary_principal_axis
|
45
|
+
# * :pca_options
|
46
|
+
# * :factor_analysis_options
|
47
|
+
#
|
48
|
+
# If block given, all methods should be called
|
49
|
+
# inside object environment.
|
50
|
+
#
|
25
51
|
def initialize(opts=Hash.new, &block)
|
26
52
|
@scales=Hash.new
|
27
53
|
opts_default={ :name=>_("Multiple Scale analysis"),
|
28
54
|
:summary_correlation_matrix=>false,
|
29
55
|
:summary_pca=>false,
|
30
|
-
:
|
56
|
+
:summary_principal_axis=>false,
|
57
|
+
:pca_options=>Hash.new,
|
58
|
+
:principal_axis_options=>Hash.new
|
59
|
+
}
|
31
60
|
@opts=opts_default.merge(opts)
|
32
61
|
@opts.each{|k,v|
|
33
62
|
self.send("#{k}=",v) if self.respond_to? k
|
@@ -37,6 +66,12 @@ module Statsample
|
|
37
66
|
block.arity<1 ? instance_eval(&block) : block.call(self)
|
38
67
|
end
|
39
68
|
end
|
69
|
+
# Add or retrieve a scale to analysis.
|
70
|
+
# If second parameters is a dataset, generates a ScaleAnalysis
|
71
|
+
# for <tt>ds</tt>, named <tt>code</tt> with options <tt>opts</tt>.
|
72
|
+
#
|
73
|
+
# If second parameters is empty, returns the ScaleAnalysis
|
74
|
+
# <tt>code</tt>.
|
40
75
|
def scale(code,ds=nil, opts=nil)
|
41
76
|
if ds.nil?
|
42
77
|
@scales[code]
|
@@ -45,17 +80,24 @@ module Statsample
|
|
45
80
|
@scales[code]=ScaleAnalysis.new(ds, opts)
|
46
81
|
end
|
47
82
|
end
|
83
|
+
# Delete ScaleAnalysis named <tt>code</tt>
|
48
84
|
def delete_scale(code)
|
49
85
|
@scales.delete code
|
50
86
|
end
|
51
|
-
|
87
|
+
# Retrieves a Principal Component Analysis (Factor::PCA)
|
88
|
+
# using all scales, using <tt>opts</tt> a options.
|
89
|
+
def pca(opts=nil)
|
90
|
+
opts||=pca_options
|
52
91
|
Statsample::Factor::PCA.new(correlation_matrix,opts)
|
53
92
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
93
|
+
# Retrieves a PrincipalAxis Analysis (Factor::PrincipalAxis)
|
94
|
+
# using all scales, using <tt>opts</tt> a options.
|
95
|
+
def principal_axis_analysis(opts=nil)
|
96
|
+
opts||=principal_axis_options
|
97
|
+
Statsample::Factor::PrincipalAxis.new(correlation_matrix,opts)
|
57
98
|
end
|
58
|
-
|
99
|
+
# Retrieves a Correlation Matrix between scales.
|
100
|
+
#
|
59
101
|
def correlation_matrix
|
60
102
|
vectors=Hash.new
|
61
103
|
@scales.each_pair do |code,scale|
|
@@ -63,7 +105,7 @@ module Statsample
|
|
63
105
|
end
|
64
106
|
Statsample::Bivariate.correlation_matrix(vectors.to_dataset)
|
65
107
|
end
|
66
|
-
def report_building(b)
|
108
|
+
def report_building(b) # :nodoc:
|
67
109
|
b.section(:name=>name) do |s|
|
68
110
|
s.section(:name=>_("Reliability analysis of scales")) do |s2|
|
69
111
|
@scales.each_pair do |k,scale|
|
@@ -80,6 +122,11 @@ module Statsample
|
|
80
122
|
s2.parse_element(pca)
|
81
123
|
end
|
82
124
|
end
|
125
|
+
if summary_principal_axis
|
126
|
+
s.section(:name=>_("Principal Axis for %s") % name) do |s2|
|
127
|
+
s2.parse_element(principal_axis_analysis)
|
128
|
+
end
|
129
|
+
end
|
83
130
|
end
|
84
131
|
end
|
85
132
|
end
|