codexiid-sample-assumption-models.py
iid-sample-assumption-models.py
"""Original dependency diagrams for iid, common-coin, and heterogeneous samples."""
from pathlib import Path
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
def node(ax,x,y,text,color):
ax.text(x,y,text,ha='center',va='center',fontsize=11,bbox={'boxstyle':'round,pad=.42','fc':color,'ec':'#31546b','lw':1.2})
def arrow(ax,a,b):
ax.add_patch(FancyArrowPatch(a,b,arrowstyle='-|>',mutation_scale=13,lw=1.25,color='#546776'))
def main():
fig,axes=plt.subplots(1,3,figsize=(12.3,5.2),dpi=100,facecolor='white')
fig.suptitle('Identical distributions and independent draws are separate requirements',fontsize=16,y=.97)
positions=[.12,.37,.63,.88]
for ax in axes:ax.set_xlim(-.02,1.02);ax.set_ylim(0,1);ax.axis('off')
axes[0].set_title('IID: independent, one common law',fontsize=12,pad=14)
for i,x in enumerate(positions,1):
node(axes[0],x,.7,f'Z{i}\np = ½','#d8eaf4');node(axes[0],x,.26,f'X{i}', '#eef4f7');arrow(axes[0],(x,.57),(x,.36))
axes[0].text(.5,.94,'Four separate fair Bernoulli draws',ha='center',fontsize=11)
axes[0].text(.5,.06,'Each pattern has probability 1/16',ha='center',fontsize=11)
axes[1].set_title('Identical laws, shared randomness',fontsize=12,pad=14)
node(axes[1],.5,.7,'Z\np = ½','#f4d9bf')
for i,x in enumerate(positions,1):
node(axes[1],x,.26,f'X{i}', '#eef4f7');arrow(axes[1],(.5,.59),(x,.36))
axes[1].text(.5,.94,'One draw, copied four times',ha='center',fontsize=11)
axes[1].text(.5,.06,'Only 0000 or 1111; probability ½ each',ha='center',fontsize=10.5)
axes[2].set_title('Independent, different laws',fontsize=12,pad=14)
ps=['¼','¾','¼','¾']
for i,(x,p) in enumerate(zip(positions,ps),1):
node(axes[2],x,.7,f'Z{i}\np = {p}', '#d8eaf4' if p=='¼' else '#f4d9bf');node(axes[2],x,.26,f'X{i}','#eef4f7');arrow(axes[2],(x,.57),(x,.36))
axes[2].text(.5,.94,'Separate draws; unequal success probabilities',ha='center',fontsize=10.3)
axes[2].text(.5,.06,'Joint probabilities factor, marginals differ',ha='center',fontsize=10.3)
fig.subplots_adjust(left=.025,right=.98,bottom=.13,top=.77,wspace=.17)
fig.text(.5,.035,'Arrows show the specified random-variable construction. All probabilities follow from the chosen models.',ha='center',fontsize=10.5)
fig.savefig(Path.cwd()/(Path(__file__).stem+'.png'),facecolor='white');plt.close(fig)
if __name__=='__main__':main()