I updated that code but forgot to copy it over. The second function should
be defined as
function sdifsums(v::Vector)
[signedsum(v,j) for j in uint(0:(2^length(v) - 1))]
end
On Tuesday, April 1, 2014 2:51:13 PM UTC-5, Douglas Bates wrote:
>
> In
>
> http://nbviewer.ipython.org/gist/dmbates/9746197
>
> I describe randomization tests for a completely randomized design and how
> the 'combinations' iterator makes evaluating the complete randomization
> distribution so easy, up to the point where the combinatorial complexity
> makes things too slow.
>
> Another type of randomization test applied to a paired design is based on
> the sum of the observed differences between pairs. The observed difference
> is compared to the population of sums obtained by assigning arbitrary signs
> to the observed differences. If the means of the two groups were equal the
> sum of the observed differences should look similar to this population of
> sums because the labels of the two groups would be arbitrary.
>
> To enumerate the sums of k differences with all possible combinations of
> signs I need to iterate over the 2^k possible subsets of signs to flip. My
> guess is that simply iterating over unsigned ints from 0 to 2^k-1 and
> using the bit patterns in these numbers is the way to go. Is there a good
> idiom for doing this? Currently I use shifting and masking to determine
> the bit pattern
>
> function signedsum(v::Vector, j::Uint)
> s = zero(eltype(v))
> for i in 1:length(v)
> s += (j & one(Uint)) == zero(Uint) ? v[i] : -v[i]
> j >>= 1
> end
> s
> end
> function sdifsums(v::Vector)
> [signedsum(v,j) for j in uint(0:(2^k - 1))]
> end
>
> A test case is
>
> julia> srand(1234321)
>
> julia> v = randn(6)
> 6-element Array{Float64,1}:
> -0.160767
> -1.48275
> -0.384419
> -1.3541
> 1.03842
> -1.16268
>
> julia> sdifsums(v)
> 64-element Array{Float64,1}:
> -3.5063
> -3.18477
> -0.540799
> -0.219266
> -2.73746
> -2.41593
> 0.228038
> 0.549572
> -0.798091
> -0.476557
> ⋮
> 0.476557
> 0.798091
> -0.549572
> -0.228038
> 2.41593
> 2.73746
> 0.219266
> 0.540799
> 3.18477
> 3.5063
>
>
> Are there any suggestions for a faster or cleaner approach?
>
>