# class Statsample::Anova::TwoWayWithVectors

Two Way Anova with vectors Example:

```v1=[1,1,2,2].to_scale
v2=[1,2,1,2].to_scale
v3=[5,3,1,5].to_scale
anova=Statsample::Anova::TwoWayWithVectors.new(:a=>v1,:b=>v2, :dependent=>v3)
```

Two Way Anova with vectors Example:

```v1=[1,1,2,2].to_scale
v2=[1,2,1,2].to_scale
v3=[5,3,1,5].to_scale
anova=Statsample::Anova::TwoWayWithVectors.new(:a=>v1,:b=>v2, :dependent=>v3)
```

### Attributes

a_var[R]
b_var[R]
dep_var[R]
summary_descriptives[RW]

Show summary descriptives for variables (means)

summary_levene[RW]

Show summary Levene test

### Public Class Methods

new(opts=Hash.new) click to toggle source

For now, only equal sample cells allowed

Calls superclass method Statsample::Anova::TwoWay.new
```# File lib/statsample/anova/twoway.rb, line 122
def initialize(opts=Hash.new)
raise "You should insert at least :a, :b and :dependent" unless  [:a, :b, :dependent].all? {|v| opts.has_key? v}
@a_var='a'
@b_var='b'
@dep_var='dependent'
@a_vector, @b_vector, @dep_vector=Statsample.only_valid_clone opts[:a], opts[:b], opts[:dependent]

ds={@a_var=>@a_vector, @b_var=>@b_vector, @dep_var=>@dep_vector}.to_dataset
@ds=ds.clone_only_valid
_p=@a_vector.factors.size
_q=@b_vector.factors.size
@x_general=@dep_vector.mean
@axb_means={}
@axb_sd={}
@vectors=[]
n=nil
@ds.to_multiset_by_split(a_var,b_var).each_vector(dep_var) {|k,v|
@axb_means[k]=v.mean
@axb_sd[k]=v.sd
@vectors << v
n||=v.size
raise "All cell sizes should be equal" if n!=v.size
}

@a_means={}
@ds.to_multiset_by_split(a_var).each_vector(dep_var) {|k,v|
@a_means[k]=v.mean
}
@b_means={}
@ds.to_multiset_by_split(b_var).each_vector(dep_var) {|k,v|
@b_means[k]=v.mean
}
ss_a=n*_q*@ds[a_var].factors.inject(0) {|ac,v|
ac+(@a_means[v]-@x_general)**2
}
ss_b=n*_p*@ds[b_var].factors.inject(0) {|ac,v|
ac+(@b_means[v]-@x_general)**2
}
ss_within=@ds.collect {|row|
(row[dep_var]-@axb_means[[row[a_var],row[b_var]]])**2
}.sum
ss_axb=n*@axb_means.inject(0) {|ac,v|
j,k=v[0]
xjk=v[1]
ac+(xjk-@a_means[j]-@b_means[k]+@x_general)**2
}
df_a=_p-1
df_b=_q-1
df_within=(_p*_q)*(n-1)

opts_default={:name=>_("Anova Two-Way on %s") % @ds[dep_var].name,
:name_a=>@ds[a_var].name,
:name_b=>@ds[b_var].name,
:summary_descriptives=>true,
:summary_levene=>false}

@opts=opts_default.merge(opts).merge({:ss_a=>ss_a,:ss_b=>ss_b, :ss_axb=>ss_axb, :ss_within=>ss_within, :df_a=>df_a, :df_b=>df_b, :df_within=>df_within})

super(@opts)
end```

### Public Instance Methods

levene() click to toggle source
```# File lib/statsample/anova/twoway.rb, line 183
def levene
Statsample::Test.levene(@vectors, :name=>_("Test of Homogeneity of variances (Levene)"))
end```