%matplotlib inline from IPython.html.widgets import interact from scipy import stats import seaborn as sns import pandas as pd n0=stats.norm(0,1) n1=stats.norm(0,10) xi = linspace(-5,5,100) fig,ax=subplots() ax.plot(xi,n0.pdf(xi)) ax.plot(xi,n1.pdf(xi)) def bias_coin(phead = .5): while True: yield int( np.random.rand() < phead ) pct_mixed = 0.1 bias_coin_gen = bias_coin(pct_mixed) dual_set = [n0,n1] samples = [ dual_set[bias_coin_gen.next()].rvs() for i in range(500) ] hist(samples,bins=20) title('average = %3.3f, median=%3.3f pct_mixed=%3.3f'%(mean(samples),np.median(samples),pct_mixed)) import sympy.stats from sympy.abc import x eps = sympy.symbols('epsilon') mixed_cdf = sympy.stats.cdf(sympy.stats.Normal('x',0,1),'x')(x)*(1-eps) + eps*sympy.stats.cdf(sympy.stats.Normal('x',1,2),'x')(x) mixed_pdf = sympy.diff(mixed_cdf,x) def plot_mixed_dist(epsilon=.1): n1 = stats.norm(1,2) xi = linspace(-5,5,100) fig,ax = subplots() ax.plot(xi,[sympy.lambdify(x,mixed_pdf.subs(eps,epsilon))(i) for i in xi],label='mixed',lw=2) ax.plot(xi,n0.pdf(xi),label='g(x)',linestyle='--') ax.plot(xi,n1.pdf(xi),label='h(x)',linestyle='--') ax.legend(loc=0) ax.set_title('epsilon = %2.2f'%(epsilon)) ax.vlines(0,0,.4,linestyle='-',color='g') ax.vlines(epsilon,0,.4,linestyle='-',color='b') interact(plot_mixed_dist,epsilon=(0,1,.05)) fig,ax=subplots() colors=['b','r'] for k in [1,2]: ax.plot(xi,np.ma.masked_array(xi,abs(xi)>k),color=colors[k-1]) ax.plot(xi,np.ma.masked_array(np.sign(xi)*k,abs(xi)