Example #1
0
def main(d, indlist, wsize=200):
  i1, i2 = indlist[0]
  j1, j2 = indlist[1]
  r_s1 = [d.rate_train(i, wsize) for i in [i1, i2]]
  r_s2 = [d.rate_train(j, wsize) for j in [j1, j2]]
  r_all = [mix_samples([r_s1[i], r_s2[i]]) for i in range(2)]
  
  ai_12, bi_12 = h2(r_all), (h2(r_s1) + h2(r_s2))/2.0
  ai_i, bi_i  = h1(r_all), (h1(r_s1) + h1(r_s2))/2.0
  mi_12 = ai_12 - bi_12
  mi_i = ai_i - bi_i
  
  r_s1_shuffled = shuffle(r_s1)
  r_s2_shuffled = shuffle(r_s2)
  r_all_shuffled = [mix_samples([r_s1_shuffled[i], r_s2_shuffled[i]]) for i in range(2)]
  mi_shuffle = h2(r_all_shuffled) - (h2(r_s1_shuffled) + h2(r_s2_shuffled))/2.0
  
  print i2, j2, mi_i[0], mi_i[1], mi_12, mi_shuffle, mi_12-mi_shuffle, mi_i.sum() - mi_shuffle, sum(bi_i)-bi_12, sum(ai_i)-ai_12
 def test_mix_samples(self):
   from spikecount.shannon import mix_samples, entropy2, entropy1, log2, bootstrap
   from numpy import hstack
   print "\nTest mixing samples."
   c = 0.3
   x1, y1 = generate_correlated_gaussian(sigma=5, N=100000, c = c)
   x2, y2 = generate_correlated_gaussian(sigma=10, N=100000, c = c)
   print "Well mixed samples"
   z1 = mix_samples([x1,x2])
   z2 = mix_samples([y1,y2])
   print entropy1(z1) + entropy1(z2) - entropy2(z1, z2), -log2(1-c**2)/2
   print "Datasets pasted side by side"
   z1 = hstack((x1, x2))
   z2 = hstack((y1, y2))
   print entropy1(z1) + entropy1(z2) - entropy2(z1, z2), -log2(1-c**2)/2    
   
   print "Now testing shifting and mixing samples"
   x1, y1 = generate_correlated_gaussian(sigma=4, N=100000, c = c)
   x2, y2 = generate_correlated_gaussian(sigma=4, N=100000, c = c)
   z1 = mix_samples((x1,x2+1000))
   z2 = mix_samples((y1,y2+1000))
   print bootstrap(entropy1, z1)['predict'] + bootstrap(entropy1, z2)['predict'] - bootstrap(entropy2, z1, z2)['predict'], -log2(1-c**2)/2    
   print bootstrap(entropy1, x2)['predict'] + bootstrap(entropy1, y2)['predict'] - bootstrap(entropy2, x2, y2)['predict'], -log2(1-c**2)/2