%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)