#{@name}
"
t=ReportBuilder::Table.new(:name=>_("Dominance Analysis result"))
t.header=["","r2",_("sign")]+@predictors.collect {|c| DominanceAnalysis.predictor_name(c) }
row=[_("Model 0"),"",""]+@predictors.collect{|f|
sprintf("%0.3f", md([f]).r2)
}
t.add_row(row)
t.add_horizontal_line
for i in 1..@predictors.size
mk=md_k(i)
mk.each{|m|
t.add_row(m.add_table_row)
}
# Report averages
a=average_k(i)
if !a.nil?
t.add_horizontal_line
row=[_("k=%d Average") % i,"",""] + @predictors.collect{|f|
sprintf("%0.3f",a[f])
}
t.add_row(row)
t.add_horizontal_line
end
end
g=general_averages
t.add_horizontal_line
row=[_("Overall averages"),"",""]+@predictors.collect{|f|
sprintf("%0.3f",g[f])
}
t.add_row(row)
generator.parse_element(t)
td=total_dominance
cd=conditional_dominance
gd=general_dominance
t=ReportBuilder::Table.new(:name=>_("Pairwise dominance"), :header=>[_("Pairs"),_("Total"),_("Conditional"),_("General")])
pairs.each{|p|
name=p.join(" - ")
row=[name, sprintf("%0.1f",td[p]), sprintf("%0.1f",cd[p]), sprintf("%0.1f",gd[p])]
t.add_row(row)
}
generator.parse_element(t)
generator.add_html("
")
end
class ModelData # :nodoc:
attr_reader :contributions
def initialize(independent, data, da)
@independent=independent
@data=data
@predictors=da.predictors
@dependent=da.dependent
@cases=da.cases
@method=da.method_association
@contributions=@independent.inject({}){|a,v| a[v]=nil;a}
r_class=da.regression_class
if @dependent.size==1
@lr=r_class.new(data, @dependent[0], :cases=>@cases)
else
@lr=r_class.new(data, @dependent, :cases=>@cases)
end
end
def add_contribution(f, v)
@contributions[f]=v-r2
end
def r2
@lr.send(@method)
end
def name
@independent.collect {|variable|
DominanceAnalysis.predictor_name(variable)
}.join("*")
end
def add_table_row
begin
sign=sprintf("%0.3f", @lr.significance)
rescue RuntimeError
sign="???"
end
[name, sprintf("%0.3f",r2), sign] + @predictors.collect{|k|
v=@contributions[k]
if v.nil?
"--"
else
sprintf("%0.3f",v)
end
}
end
def summary
out=sprintf("%s: r2=%0.3f(p=%0.2f)\n",name, r2, @lr.significance, @lr.sst)
out << @predictors.collect{|k|
v=@contributions[k]
if v.nil?
"--"
else
sprintf("%s=%0.3f",k,v)
end
}.join(" | ")
out << "\n"
return out
end
end # end ModelData
end # end Dominance Analysis
end