DISTRIBUCIÓN DE POISSON

1

figura 2 del artículo: la tercera columna de la figura corresponde a la probabilidad de detectar un número n de fotones. Suponiendo que la distribución es de Poisson para cada gráfica, extraiga los puntos coordenados, determine el valor promedio, y grafique en una misma figura los puntos coordenados y la correspondiente curva de Poisson. Reporte el valor promedio de fotones que encontró.

2

Convierta la imagen en color en una imagen de intensidad (investigar como hacerlo), luego defina un recuadro y construya un histograma con la frecuencia en que aparece un cierto número de estrellas. Calcule el promedio y superponga al histograma una función de Poisson.


In [92]:
import matplotlib
from scipy import misc
from scipy import stats
from scipy import special
import pylab as plt
import numpy as np
import math

%matplotlib inline

font = {'weight' : 'bold',
        'size'   : 16}

matplotlib.rc('font', **font)

from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di

In [93]:
##############PUNTO 1###############

#Probabilidades (eje y de las graficas)
ha=[0.95,0.05,0.0,0.0,0.0,0.0]
hb=[0.7,0.25,0.05,0.0,0.0,0.0]
hc=[0.4,0.35,0.15,0.08,0.05,0.0]
hd=[0.2,0.3,0.25,0.15,0.08,0.05]
#(eje x de las graficas)
n=[0,1,2,3,4,5]

prome=[0.56,0.24,0.11,0.06,0.03,0.01]
PR=sum(prome)/len(prome)
plt.figure(figsize=(12,7))
plt.plot(n,prome,'*',ms=10, label='Distribucion datos con promedio %.1f' % PR)

plt.legend()
plt.xlabel('n') and plt.xlim(0)
plt.ylabel('Probabilidad promedio')
plt.grid()
plt.show()

print 'El valor promedio de fotonoes que se encontró es de =%.2f' %PR


El valor promedio de fotonoes que se encontró es de =0.17

In [94]:
num = 1 # Numero de galaxias que se espera encontrar
prob = (PR**num*np.exp(-PR)/math.factorial(num))*100 # Probabilidad de encontrar dicho numero de galaxias

x = np.arange(0,7) # rango de datos: numero de galaxias
histP = stats.poisson.pmf(x, PR) # funcion de probabilidad de Poisson
ProbP = (np.sum(histP[0:int(num)+1]))*100 # Probabilidad acumulada

plt.figure(figsize=(12,7))
plt.plot(x, histP, 'bo', ms=8, label='Distribucion de Poisson con $\lambda=$ %.1f' % PR)
plt.plot(n,prome,'r*',ms=10,label='Conjunto de datos con promedio %.1f' % PR)
plt.xlabel('n')
plt.ylabel('Probabilidad promedio')
plt.legend()
plt.grid()


Análisis

La distribución correspondiente al número de fotones por rango de probabilidad, en efecto corresponde a una distribución de poisson, debido a la apreciable coherencia entre los valores de esta distribución con la de los promedios.


In [95]:
#############PUNTO 2#################

Ima = misc.imread('stars.jpg') # Se lee la imagen como matriz en escala de 8 bit
plt.rcParams['figure.figsize'] = 20, 6 # para modificar el tamaño de la figura
Imab = Ima[100:500,100:700,1] # La imagen original tenía tres canales (RGB); se elige un canal y se recorta

plt.figure(2)
plt.imshow(Imab, cmap='gray')


Out[95]:
<matplotlib.image.AxesImage at 0x7f9a4413e2d0>

In [96]:
plt.rcParams['figure.figsize'] = 18, 15 # para modificar el tamaño de la figura
fil, col = Imab.shape # numero de filas y columnas de la imagen
numlado = 10 # Numero de imágenes por lado
contar = 1
plt.figure(5)
for enfil in range(1,numlado+1):
    for encol in range(1,numlado+1):
        plt.subplot(numlado,numlado,contar)
        plt.imshow(Imab[(enfil-1)*np.int(fil/numlado):enfil*np.int(fil/numlado), \
                        (encol-1)*np.int(col/numlado):encol*np.int(col/numlado)],cmap='gray')
        frame1 = plt.gca()
        frame1.axes.get_yaxis().set_visible(False)
        frame1.axes.get_xaxis().set_visible(False)
        contar = contar + 1



In [97]:
# Para el caso de 10x10 imagenes en gal se presentan el numero de galaxias contadas
gal = np.array([38., 52., 52., 52., 62., 46., 55., 53., 50., 34.,\
                46., 48., 49., 54., 49., 46., 47., 53., 44., 24.,\
                52., 49., 54., 43., 45., 38., 47., 60., 52., 45.,\
                60., 53., 52., 50., 50., 48., 56., 56., 52., 48.,\
                61., 52., 48., 50., 46., 50., 54., 42., 46., 50.,\
                60., 65., 62., 49., 58., 43., 54., 45., 47., 42.,\
                52., 45., 49., 52., 44., 58., 51., 53., 41., 53.,\
                60., 52., 49., 53., 48., 50., 55., 58., 57., 45.,\
                58., 43., 42., 47., 42., 49., 48., 54., 41., 52.,\
                48., 43., 48., 33., 44., 56., 50., 49., 45., 43.])
la = np.mean(gal) # Valor promedio del conjunto de datos

# Distribucion del conjunto de datos. La primera fila es el numero de estrellas, la segunda es el numero de veces que
# se repite dicho numero de estrellas
distriGal = np.array([[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.,25.,26.,27.,28.,29.,30.,31.,32.,33.,34.,35.,36.,37.,38.,39.,40.,41.,42.,43.,44.,45.,46.,47.,48.,49.,50.,51.,52.,53.,54.,55.,56.,57.,58.,59.,60.,61.,62.,63.,64.]\
                      ,[0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,1.,0.,0.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.,0.,0.,2.,0.,0.,3.,4.,4.,6.,5.,4.,8.,7.,8.,1.,12.,6.,5.,2.,3.,1.,4.,0.,4.,1.,2.,0.,0.,1.]])

plt.figure(figsize=(16,9))
plt.plot(distriGal[0,:],distriGal[1,:]/gal.size,'r*',ms=10,label='Distribucion datos con promedio %.1f' % la)
plt.legend()
plt.xlabel('Numero de estrellas en el intervalo')
plt.ylabel('Rata de ocurrencia')
plt.grid()



In [98]:
num = 50. # Numero de estrellas que se espera encontrar
prob = (la**num*np.exp(-la)/math.factorial(num))*100 # Probabilidad de encontrar dicho numero de estrellas

x = np.arange(0,70) # rango de datos: numero de estrellas
histP = stats.poisson.pmf(x, la) # funcion de probabilidad de Poisson
ProbP = (np.sum(histP[0:int(num)+1]))*100 # Probabilidad acumulada

In [99]:
plt.figure(figsize=(16,9))
plt.plot(x, histP, 'bo', ms=8, label='Distribucion de Poisson con $\lambda=$ %.1f' % la)
plt.plot(distriGal[0,:],distriGal[1,:]/gal.size,'r*',ms=10,label='Conjunto de datos con promedio %.1f' % la)
plt.xlabel('Numero de estrellas')
plt.ylabel('Rata de ocurrencia')
plt.legend()
plt.grid()


Análisis

Como se sabe la distribucion de poisson en algunas situaciones carece de simetría, específicamente cuando el lambda sobre el cual se trabaja es muy pequeño, para este caso este valor es relativamente elevado por lo cual se puede observar cierta uniformidad a la hora de superponer la distribucion de poisson; aún así los datos podrían ser descritos mejor por una distribución normal, que no sea necesariamente una distribucion poissoniana, ya que al trabajar con una distribución normal se podrían obtener picos mas altos lo que implica una campana mas angosta.

Lider Samir Galeano Molina - 1041328785
Ana María Agudelo Castro - 1045112761