= Sage Interactions - Statistics and Probability = goto [[interact|interact main page]] <> == A Random Walk == by William Stein {{{#!sagecell html('

A Random Walk

') vv = [] nn = 0 @interact def foo(pts=checkbox(True, "Show points"), refresh=checkbox(False, "New random walk every time"), steps=slider([10..500],default=50)): # We cache the walk in the global variable vv, so that # checking or unchecking the points checkbox does not change # the random walk. html("

%s steps

"%steps) global vv if refresh or not vv: s = 0 v = [(0, 0)] for i in range(steps): s += random() - 0.5 v.append((i, s)) vv = v elif len(vv) != steps: # Add or subtract some points s = vv[-1][1] j = len(vv) for i in range(steps - len(vv)): s += random() - 0.5 vv.append((i + j, s)) v = vv[:steps] else: v = vv L = line(v, rgbcolor='#4a8de2') if pts: L += points(v, pointsize=10, rgbcolor='red') show(L, xmin=0, figsize=[8, 3]) }}} {{attachment:randomwalk.png}} == 3D Random Walk == {{{#!sagecell @interact def rwalk3d(n=slider([50..1000]), frame=True): pnt = [0, 0, 0] v = [copy(pnt)] for i in range(n): pnt[0] += random() - 0.5 pnt[1] += random() - 0.5 pnt[2] += random() - 0.5 v.append(copy(pnt)) show(line3d(v, color='black'), aspect_ratio=[1, 1, 1], frame=frame) }}} {{attachment:randomwalk3d.png}} == Hidden Markov Model: The Occasionally Dishonest Casino == by Marshall Hampton Based on the classic example in "Biological Sequence Analysis" by Durbin et al. {{{#!sagecell m = hmm.DiscreteHiddenMarkovModel([[0.8,0.2],[0.1,0.9]], [[1/10,1/10,1/10,1/10,1/10,1/2],[1/6,1/6,1/6,1/6,1/6,1/6]], [.2,.8],emission_symbols=[1,2,3,4,5,6]) @interact def dishonest_casino(auto_update=False): test = list(m.generate_sequence(80)) vit_test = list(m.viterbi(test[0])[0]) pretty_print(html('

The Occasionally Dishonest Casino

')) pretty_print(html('Emissions:'+str(test[0]).replace(',','').replace(' ','')[1:-1])) vit_str = str(vit_test).replace(',','').replace(' ','') vit_str = vit_str.replace('1','F').replace('0','L')[1:-1] pretty_print(html('Viterbi: '+vit_str)) actual_str = str(list(test[1])).replace(',','').replace(' ','') actual_str = actual_str.replace('1','F').replace('0','L')[1:-1] pretty_print(html('Actual: '+ actual_str)) }}} {{attachment:hmm_casino.png}}