Estudo de Modelos de Distribuição Estatística

Objetivo: Estudar e descobrir qual é a melhor forma de se utilizar números aleatórios ao longo de uma distribuição estatística para a gerar de ruído.



In [38]:
#Preâmbulo (carregando pacotes)
import scipy.special as sps
import numpy as np
import matplotlib.pyplot as plt
import random
from random import shuffle
import scipy as sp
from scipy import misc
from IPython.display import Latex
import math 
from math import log
% matplotlib inline

I- A Distribuição Gama

A função gama pode ser descrita como:

$$ \Gamma(\alpha)=\int_{0}^{\infty} x^{\alpha -1} e^{-x}\, dx , $$

Que por derivação implícita pode ser reescrita da forma:

$$ \Gamma(\alpha)= (\alpha -1)\Gamma(\alpha -1) $$

A função de distribuição de densidade gama pode ser descrita como:

$$ p(x)=x^{k-1} \frac{e^{-x/\theta}}{\theta^{k}\Gamma(k)}, $$

Onde $k$ é a forma, $\theta$ é a escala e $\Gamma$ é a função gama.


In [39]:
#tentando outras distribuições de ruído aleatório
shape, scale = 2., 1. # mean and width
s = np.random.standard_gamma(shape, 1000000)



count, bins, ignored = plt.hist(s, 50, normed=True)
y = bins**(shape-1) * ((np.exp(-bins/scale))/ 
(sps.gamma(shape) * scale**shape))
plt.plot(bins, y, linewidth=2, color='r')
plt.show()



II- A Distribuição Logarítimica Normal

A variável $x$ tem uma distribuição log-normal se $f(x)$ está normalmente distribuída. Neste caso, a função densidade de probabilidade para a distribuição log-normal é:

$$ p(x)= \frac{1}{\sigma x \sqrt{2 \pi}} e^{(-\frac{(ln(x)-\mu)^{2}}{2\sigma^{2}})} $$

Onde $\sigma$ é a média, $\sigma$ é o desvio padrão de uma distribuição normal logarítimica.


In [40]:
mu, sigma = 3., 1. # mean and standard deviation
s = np.random.lognormal(mu, sigma, 1000)

count, bins, ignored = plt.hist(s, 100, normed=True, align='mid')




x = np.linspace(min(bins), max(bins), 10000)
pdf = (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2))
       / (x * sigma * np.sqrt(2 * np.pi)))


plt.plot(x, pdf, linewidth=2, color='r')
plt.axis('tight')
plt.show()



III- A Distribuição de Série Logarítimica

A densidade de probabilidade de uma distribuição em série logarítimica é dada por:

$$ p(k)=\frac{-p^{k}}{k\ln(1-p)}, $$

Onde $p$ é a probabilidade.


In [58]:
#Gerando números aleatórios
a = .6
s = np.random.logseries(a, 10000)
count, bins, ignored = plt.hist(s)

#Calculando a probabilidade
def logseries(k, p):
    return -p**k/(k*log(1-p))

plt.plot(bins, logseries(bins, a)*count.max()/
         logseries(bins, a).max(), 'r')
plt.show()



IV- A Distribuição de Pareto

A probabilidade de densidade para a distribuição de pareto é dada por:

$$ p(x)=\frac{am^{a}}{x^{a+1}}, $$

Onde $a$ é forma da função e $m$ é a escala.

Umas das aplicações da distribuição estatística de Pareto foi a utilização para o cálculo do tamanho de campos de óleo.


In [56]:
a, m = 3., 2.  # shape and mode
s = (np.random.pareto(a, 10000) + 1) * m


count, bins, _ = plt.hist(s, 100, normed=True)
fit = a*m**a / bins**(a+1)
plt.plot(bins, max(count)*fit/max(fit), linewidth=2, color='r')
plt.show()



V- Integradores Radômicos

Geram números aleatórios de uma distribuição discreta e uniforme no intervalo definido entre [valorbaixo, valoralto]. Caso o [valoralto=vazio] então o resultado vai variar de [valorbaixo,1].

$$ a + (b - a) * (np.random.random__integers(N) - 1) / (N - 1.) $$

In [63]:
np.random.random_integers(5)

type(np.random.random_integers(5))

np.random.random_integers(5, size=(3.,2.))


/home/vimana/anaconda2/lib/python2.7/site-packages/ipykernel/__main__.py:5: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
Out[63]:
array([[5, 5],
       [3, 4],
       [5, 3]])

In [64]:
2.5 * (np.random.random_integers(5, size=(5,)) - 1) / 4.


Out[64]:
array([ 1.25 ,  1.25 ,  1.25 ,  1.875,  1.875])

In [67]:
d1 = np.random.random_integers(1, 6, 1000)
d2 = np.random.random_integers(1, 6, 1000)
dsums = d1 + d2

count, bins, ignored = plt.hist(dsums, 11, normed=True)
plt.show()