import pandas as pd
import numpy as np
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
from decimal import Decimal
import warnings
warnings.filterwarnings('ignore')
df_salarios = pd.read_csv('dados/dados_tratados.csv').drop('Unnamed: 0', axis=1)
df_b3 = pd.read_csv('dados/b3_stocks_1994_2020.csv')
df_b3['datetime'] = pd.to_datetime(df_b3['datetime'])
Uma variável aleatória é dita continua se seus valores forem definidos sobre um espaço amostral $\Omega$ e assumindo qualquer valor em um intervalo de números reais, isto é, para cada $a < b$, qualquer valor $x$ entre os valores $a$ e $b$ for possível.
Vamos a um exemplo para ficar fácil a compreensão. Vamos ver o menor e maior salário em dólares da nossa base de salários na área de dados.
print(df_salarios['salario_em_dolares'].min(), df_salarios['salario_em_dolares'].max())
5132 450000
Logo, sabemos que qualquer profissional de dados, baseado nessa pesquisa, pode ganhar qualquer salário entre 5.132,00 dólares e 450.000,00 dólares, logo, podemos dizer que: $$\{x \in \mathbb{R} : US\$5.132,00 \leq x \leq US\$450.000,00\}$$
Voltando ao nosso exemplo, vemos que podemos ter diversos valores de salários possíveis e se formos ver a probabilidade de cada um, essa probabilidade tenderá a 0, o que não faz muito sentido falar em probabilidade para um determinado valor. Entretanto, podemos determinar a probabilidade de que $X$ esteja compreendido entre dois valores quaisquer. Se dividirmos nosso intervalo por 4, vamos ter a seguinte probabilidade:
$$P(US\$5.132,00 \leq x \leq US\$116.349,00) = \frac{1}{4}$$Do mesmo modo, podemos criar intervalos maiores ou menores, e sempre conseguimos calcular a probabilidade de um trabalhador da área de dados ganhar um salário dentro desse intervalo. Então, podemos pegar dois salários quaisquer ($a$ e $b$), tais que $(US\$5.132,00 \leq a \leq b \leq US\$116.349,00)$, a probabilidade de $X \in [a, b)$ é:
$$P(a \leq X \leq b) = \frac{b-a}{450000 - 5132} = \frac{b-a}{444868}$$,
Logo se considerarmos $a = US\$5.132,00$ e $b = US\$116.349,00$, temos:
$$P(US\$5.132,00 \leq x \leq US\$116.349,00) = \frac{116349 - 5132}{444868} = \frac{111217}{444868} = \frac{1}{4}$$Vamos criar um histograma para este caso:
x = list(range(5132, 450000, 1))
probabilidade = list(np.linspace(1/444868, 1/444868, 444868))
probabilidade2 = list(np.linspace(0, 1/444868, 100))
final = list(np.linspace(450000, 450000, 100))
a = list(np.linspace(5132, 5132, 100))
b = list(np.linspace(116349, 116349, 100))
with sns.axes_style("whitegrid"):
plt.plot(x, probabilidade, 'b')
plt.plot(final, probabilidade2, 'b--')
plt.plot(a, probabilidade2, 'r--')
plt.plot(b, probabilidade2, 'r--')
for i in list(np.linspace(5132, 116349, 100)):
valor = list(np.linspace(i, i, 100))
plt.plot(valor, probabilidade2, 'r--')
plt.show()
De modo generalizado, podemos dizer que:
$$\text{f(x)} = \begin{cases} 0, \text{se x < 0}\\ \frac{1}{444868}, \text{se } US\$5.132,00 \leq x \leq US\$450.000,00\\ 0, \text{se x} > US\$450.000,00 \end{cases}$$Nós temos no histograma criado a parte hachurada em vermelho, que representa a probabilidade que calculamos. Logo a probabilidade pode ser dada pela área correspondente ao intervalo $a$ e $b$ (intervalo vermelho). Então, matematicamente, podemos expressar nossa função como:
$$P(a \leq X \leq b) = \int_a^b f(x)dx = \int_a^b \frac{1}{444868}dx = \frac{b-a}{444868}$$A integral definida de uma função entre dois pontos determina a área sob a curva representativa da função, compreendida sobre esses dois pontos.
A função $f(x)$ é chamada de função de densidade de probabilidade (f.d.p) da variável aleatória $X$.
Por enquanto temos que a probabilidade da variável pertencer a um intervalo de dois valores é:
$$P(a \leq X \leq b) = \int_a^b f(x)dx$$Vamos criar um novo gráfico.
valor_medio_y = list(np.linspace(0, 0.07, 14))
valor_medio_x = list(np.linspace(7, 7, 14))
a_x = list(np.linspace(5, 5, 14))
a_y = list(np.linspace(0, 0.07, 14))
b_x = list(np.linspace(9, 9, 14))
b_y = list(np.linspace(0, 0.07, 14))
platicurtica = [1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13]
df_assimetrico_direita = pd.DataFrame({'valores': platicurtica})
with sns.axes_style("whitegrid"):
df_assimetrico_direita.plot(kind='kde', figsize=(5, 3))
plt.plot(valor_medio_x, valor_medio_y, 'r--', label='$x_0$')
plt.plot(a_x, a_y, 'g--', label='$a$')
plt.plot(b_x, b_y, 'k--', label='$b$')
valor_rachurado = list(np.linspace(0.07, 0.07, 14))
for index, i in enumerate(list(np.linspace(5, 9, 14))):
y = valor_rachurado[index]
valor_y = list(np.linspace(0, y, 14))
valor = list(np.linspace(i, i, 14))
plt.plot(valor, valor_y, 'y-', linewidth=4, alpha=0.3)
plt.legend()
plt.show()
Vamos considerar $a = 5$ e $b = 9$, teremos então que $h = b - a$, e consideremos $x_0$ o ponto médio do intervalo $[a, b]$, logo será 7. Sabendo que a a área do retângulo pode ser dada por $\text{área da base} \times \text{altura}$, teremos que:
Então, considerando que uma variável aleatória $Y_n$, assumindo os valores $x_1,...,x_n$, temos as probabilidades:
$$p_i = P(Y_n = x_i) \approx f(x_i)h$$Lembrando que a definição de esperança matemática, temos:
$$E(Y_n) = \sum_{i=1}^n x_ip_i \approx \sum_{i=1}^{n}x_i f(x_i) h$$Temos a aproximação da esperança $E(X)$ para variáveis aleatórios continuas.
Para determinar $E(X)$ com maior precisão, podemos diminuir a amplitude $h$ (diminuindo a área da base. Isso fará com que tenhamos mais retângulos, logo aumentando nosso $n$). Então fazendo o $h$ tender a 0, logo teremos:
$$E(X) = \lim_{n \to \infty}E(Y_n) = \lim_{n \to \infty}\sum_{i=1}^{n}x_i f(x_i) h$$OBS.: Segue um gif demonstrando o que seria o $h$ tendendo a 0 ($h \to 0$)
Se o limite existe, definimos a integral $x f(x)$ entre A e B:
$$E(X) = \int_A^B xf(x)dx$$Para nosso exemplo nós temos:
$$E(X) = \int_A^B xf(x)dx $$$$E(X) = \int_{5132}^{450000} x \frac{1}{444868}dx$$$$E(X) = \frac{x²}{2} f(b) - \frac{x²}{2} f(a)$$$$E(X)= \frac{450000²}{2} \frac{1}{444868} - \frac{5132²}{2} \frac{1}{444868}$$$$E(X) = 227595,6 - 29,6 = 227566$$Como a função $f(x)$ é sempre não negativa, podemos escrever a esperança como:
$$E(X) = \int_{-\infty}^{\infty}xf(x)dx$$A variância segue o mesmo princípio da esperança, logo temos:
$$\text{Var(X)} = E[(X - E(X))²] = \int_{-\infty}^{\infty}(x - E(X))^2xf(x)dx $$Para o exemplo acima temos:
$$\text{Var(X)} = \int_{5132}^{450000}(x - 227566)²\frac{1}{444868}dx$$$$\text{Var(X)} = \int_{5132}^{450000}(x² - 455132x + 51786284360)\frac{1}{444868}dx$$$$ = \Big[\frac{x^3}{3} - \frac{455132x^2}{2} + 51786284360x\Big]_{5132}^{450000}$$$$ = (\frac{450000^3}{3} - \frac{455132\cdot450000^2}{2} + 51786284360\cdot450000) - (\frac{5132^3}{3} - \frac{455132\cdot5132^2}{2} + 51786284360\cdot5132)$$$$ = 7,6 \cdot 10^{15} - 2,6 \cdot 10^{14} = 7,34 \cdot 10^{15}$$Dada uma variável aleatória $X$ com função densidade de probabilidade $f(x)$, podemos definir a sua função de distribuição acumulada, $F(x)$:
$$F(X) = p(X \leq x), -\infty < x < +\infty$$usando o conceito de integral, temos:
$$F(x) = \int_{-\infty}^{X}f(t)dt$$para todo x real.
Vamos ver um exemplo.
Se $f(x) = 2x$, para $0 \leq x \leq 1$ e $0$ fora desse intervalo, então temos:
$$F(x) = \begin{cases} 0, & \text{se x} < 0 \\ \int_{0}^{x}2tdt = x², & \text{se 0} \leq x < 1 \\ \int_{0}^{1}2tdt + \int_{1}^{x}0dt = 1, & \text{se x} \geq 1\\ \end{cases}$$Com esse exemplo, conseguimos perceber que:
O gráfico da função de distribuição acumulada é:
def grafico_distribuicao_acumulada(array):
lista = []
for x in array:
if x <= 0.0:
resultado = 0
lista.append(resultado)
elif x > 1.0:
resultado = 1
lista.append(resultado)
else:
resultado = x ** 2
lista.append(resultado)
return lista
with sns.axes_style("whitegrid"):
x = list(np.linspace(-1, 2, 1000))
y = grafico_distribuicao_acumulada(x)
plt.plot(x, y)
A distribuição uniforme é o modelo mais simples para variáveis aleatórias contínuas. É definida como:
Definição: A variável aleatória X tem distribuição uniforme no intervalo $[\alpha, \beta]$ se sua função de densidade de probabilidade é dada por:
$$f(x, \alpha, \beta) = \begin{cases} \frac{1}{\beta - \alpha}, & \text{se }\alpha \leq x \leq \beta \\ 0, & \text{caso contrário}\\ \end{cases}$$O gráfico de sua distribuição é:
def distribuicao_uniforme(array, alpha, beta):
y = []
for i in array:
resultado = 1/(beta-alpha)
y.append(resultado)
return y
x = list(np.linspace(0, 90, 1000))
y = distribuicao_uniforme(x, 10, 80)
beta_x = np.linspace(80, 80, 1000)
beta_y = np.linspace(0, y[0], 1000)
alpha_x = np.linspace(10, 10, 1000)
alpha_y = np.linspace(0, y[0], 1000)
with sns.axes_style("whitegrid"):
plt.plot(x, y)
plt.plot(10, 0, 'bo', label='$𝛼$')
plt.plot(80, 0, 'go', label='$𝛽$')
plt.plot(beta_x, beta_y, 'r--')
plt.plot(alpha_x, alpha_y, 'r--')
plt.legend()
plt.show()
Sua esperança matemática é:
$$E(X) = \frac{\alpha + \beta}{2}$$Sua variância é:
$$\text{Var(X)} = \frac{(\beta - \alpha)²}{12}$$E sua função de distribuição acumulada é:
$$F(X) = P(X \leq x) = \int_{-\infty}^{x}f(x)dx = \begin{cases} 0, & \text{se }x < \alpha\\ \frac{x - \alpha}{\beta - \alpha}, & \text{se } \alpha \leq x \leq \beta\\ 1, & \text{se } x \geq \beta \\ \end{cases}$$O gráfico da distribuição acumulada é:
def grafico_distribuicao_acumulada_uniforme(array, alpha, beta):
lista = []
for x in array:
if x < alpha:
resultado = 0
lista.append(resultado)
elif x >= beta:
resultado = 1
lista.append(resultado)
else:
resultado = (x-alpha)/(beta-alpha)
lista.append(resultado)
return lista
x = list(np.linspace(0, 90, 1000))
y = grafico_distribuicao_acumulada_uniforme(x, 10, 80)
beta_x = np.linspace(80, 80, 1000)
beta_y = np.linspace(0, 1, 1000)
beta_x2 = np.linspace(0, 80, 1000)
beta_y2 = np.linspace(1, 1, 1000)
with sns.axes_style("whitegrid"):
plt.plot(x, y)
plt.plot(10, 0, 'ro', label='$𝛼$')
plt.plot(80, 0, 'go', label='$𝛽$')
plt.plot(beta_x, beta_y, 'g--')
plt.plot(beta_x2, beta_y2, 'g--')
plt.legend()
plt.show()
Quando a variável aleatória tiver uma distribuição uniforme no intervalo $[\alpha, \beta]$, usaremos a seguinte notação:
$$X \sim u(\alpha, \beta)$$Exemplo:
Vamos supor que um jogador, em uma partida de futebol faça um gol. Qual a probabilidade desse gol sair nos primeiros 15 minutos?
Sabendo que o tempo é medido em uma escala contínua, a probabilidade do gol é igual a razão do intervalo escolhido sobre a duração da partida, logo:
$$P(0 \leq X \leq 15) = \frac{15 - 0}{90 - 0} = \frac{15}{90} = \frac{1}{6} = 0,166$$Então temos uma probabilidade de 16,6% de o jogador fazer um gol nesse intervalo.
Está é a distribuição mais famosa, sendo um modelo fundamental em probabilidades e inferência estatística. Sua definição é:
Definição: Dizemos que uma variável aleatória $X$ tem distribuição normal com parâmetros $\mu$ e $\sigma²$, onde $\mu$ é a média, que varia entre: $-\infty < \mu <+\infty$, e $\sigma^2$ é a variância, que varia entre $0 <\sigma^2 < +\infty$, se sua densidade é dada por:
$$f(x, \mu, \sigma²) = \frac{1}{\sigma\sqrt{2\pi}}\cdot e^{\frac{-(x-\mu)²}{2\sigma²}}$$Onde:
O gráfico de sua distribuição é:
def distribuicao_normal(valores):
y = []
media = sum(valores) / len(valores)
variancia = sum((valores - media)**2)/ (len(valores) - 1)
for valor in valores:
multiplicador = np.exp(-((valor - media)**2) / 2 * variancia)
resultado = (1/(np.sqrt(variancia * 2 * np.pi))) * multiplicador
y.append(resultado)
return y
x = list(np.linspace(0, 5, 1000))
media = sum(x) / len(x)
desvio_padrao = np.sqrt(sum((x - media)**2)/ (len(x) - 1))
y = distribuicao_normal(x)
media_x = np.linspace(media, media, 1000)
media_y = np.linspace(0, max(y), 1000)
media_mais_desvio_padrao_x = np.linspace(media + desvio_padrao, media + desvio_padrao, 1000)
media_menos_desvio_padrao_x = np.linspace(media - desvio_padrao, media - desvio_padrao, 1000)
desvio_padrao_y = np.linspace(0, 0.03, 1000)
with sns.axes_style("whitegrid"):
plt.plot(x, y)
plt.plot(media_x, media_y, 'b--', label='$𝜇$')
plt.plot(media_mais_desvio_padrao_x, desvio_padrao_y, 'r--', label='$𝜇+𝜎$')
plt.plot(media_menos_desvio_padrao_x, desvio_padrao_y, 'g--', label='$𝜇-𝜎$')
plt.legend()
plt.title('Exemplo de distribuição Normal')
plt.show()
Sua esperança matemática é:
$$E(X) = \mu$$Sua variância é:
$$\text{Var(X)} = \sigma² $$Conseguimos ver com o gráfico que $f(x, \mu, \sigma²) \to 0$, quando $x \to \pm \infty$
Quando a variável aleatória tiver uma distribuição normal, usaremos a seguinte notação:
$$X \sim N(\mu, \sigma²)$$Quando $\mu = 0$ e $\sigma^2 = 1$, temos uma distribuição padrão. Para essa distribuição, a função de densidade é:
$$\phi(Z) = \frac{1}{\sigma\sqrt{2\pi}}\cdot e^{\frac{z²}{2}}$$Onde:
def distribuicao_normal_padronizada(valores):
y = []
media = 0
variancia = 1
for valor in valores:
multiplicador = np.exp(-((valor - media)**2) / 2 * variancia)
resultado = (1/(np.sqrt(variancia * 2 * np.pi))) * multiplicador
y.append(resultado)
return y
x = list(np.linspace(-5, 5, 1000))
media = 0
desvio_padrao = 1
y = distribuicao_normal_padronizada(x)
media_x = np.linspace(media, media, 1000)
media_y = np.linspace(0, max(y), 1000)
media_mais_desvio_padrao_x = np.linspace(media + desvio_padrao, media + desvio_padrao, 1000)
media_menos_desvio_padrao_x = np.linspace(media - desvio_padrao, media - desvio_padrao, 1000)
desvio_padrao_y = np.linspace(0, 0.237, 1000)
with sns.axes_style("whitegrid"):
plt.plot(x, y)
plt.plot(media_x, media_y, 'b--', label='$𝜇$')
plt.plot(media_mais_desvio_padrao_x, desvio_padrao_y, 'r--', label='$𝜇+𝜎$')
plt.plot(media_menos_desvio_padrao_x, desvio_padrao_y, 'g--', label='$𝜇-𝜎$')
plt.legend()
plt.title('Exemplo de distribuição Normal Padronizada')
plt.show()
Se $X \sim N(\mu, \sigma²)$, então a variável aleatória definida por $Z = \frac{X - \mu}{\sigma}$ terá média $0$ e variância $1$.
Essa transformação é fundamental para calcularmos as probabilidades relativas a uma distribuição normal qualquer.
A função de distribuição acumulada é dada por:
$$\int_{-\infty}^{y} f(x, \mu, \sigma²)dx, y \in \mathbb{R}$$Para o casos da normal padrão, temos:
$$\Phi(y) = \int_{-\infty}^{y} \phi(z)dz = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{y}e^{\frac{-z²}{2}}dz$$Fazer esses cálculos pode ser um pouco complexo, por isso usamos uma tabela de distribuição normal padrão para nos auxiliar.
A tabela abaixo foi retirada do livro de Bussab e Morettin (2010).
Vamos a um exemplo.
Exemplo: Qual a probabilidade de um salário em dólares da área de dados seja um valor entre 200.000,00 e 300.000,00 dólares?
Nós temos que:
Então temos que a probabilidade de um salário em dólares da área de dados ser um valor compreendido entre 200 e 300 mil dólares é de 15,6%.
A distribuição exponencial envolve probabilidades ao longo do tempo ou da distância entre eventos num intervalo contínuo. Por exemplo, a exponencial é usada como modelo para aplicações em confiabilidade de sistemas.
Sua definição é:
Definição: A variável aleatória X tem distribuição exponencial com parâmetro $\beta > 0$ se sua função de densidade de probabilidade tem a forma de:
$$f(x, \beta) = \begin{cases} \frac{1}{\beta}e^{-\frac{x}{\beta}}, & \text{se }x \geq 0\\ 0, & \text{se } x < 0\\ \end{cases}$$Quando a variável aleatória tiver uma distribuição exponencial, usaremos a seguinte notação:
$$X \sim \text{Exp}(\beta)$$O gráfico da sua distribuição é:
def distribuicao_exponencial(valores, beta):
y = []
for valor in valores:
resultado = (1/beta) * (np.exp(-(valor/beta)))
y.append(resultado)
return y
x = list(np.linspace(0, 150, 1000))
y = distribuicao_exponencial(x, 30)
with sns.axes_style("whitegrid"):
plt.plot(x, y)
plt.legend()
plt.title('Exemplo de distribuição Exponencial')
plt.show()
No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
Sua esperança matemática é:
$$E(X) = \beta$$$$Var(X) = \beta²$$Sua função de densidade acumulada é:
$$f(x) = \begin{cases} 0, & \text{se } x < 0\\ 1 - e^{-\frac{x}{\beta}}, & \text{se }x \geq 0\\ \end{cases}$$Vamos a um exemplo:
Exemplo: A média de um ciclo de vida de um videogame é de 10 anos. Qual a probabilidade que um videogame durar mais que a média?
$$P(X > 10) = \int_{10}^{+\infty}f(x)dx = \int_{10}^{+\infty}\frac{1}{\beta}e^{-\frac{x}{\beta}}$$$$P(X > 10) = \int_{10}^{+\infty}\frac{1}{10}e^{-\frac{x}{10}} = \frac{1}{10}\int_{10}^{+\infty}e^{-\frac{x}{10}}$$$$P(X > 10) = \frac{1}{10}\Big[\frac{1}{\frac{1}{10}}e^{-\frac{x}{10}}\Big]_{10}^{+\infty}$$$$P(X > 10) = \frac{1}{10}\Big[-10e^{-\frac{x}{10}}\Big]_{10}^{+\infty}$$$$P(X > 10) = \frac{1}{10}\cdot-10\cdot(e^{-\frac{+\infty}{10}} - e^{-\frac{10}{10}})$$$$P(X > 10) = -1\cdot(0 - e^{-1}) = 0,3678$$Então a probabilidade de o valor do videogame durar mais do que o tempo de vida médio é de 36,78%.
Definição: A variável aleatória contínua X, assumindo valores positivos, tem uma distribuição gama com parâmetros $\alpha > 0$ e $\beta > 0$, se sua função densidade de probabilidade for da por:
$$f(x, \alpha, \beta) = \begin{cases} \frac{1}{\Gamma(\alpha)\beta^{\alpha}}x^{\alpha - 1}e^{-\frac{x}{\beta}}, & \text{se } x > 0\\ 0, & \text{se }x < 0\\ \end{cases}$$$\Gamma(\alpha)$ é a função gama, sua fórmula é dada por:
$$\Gamma(\alpha) = \int_{0}^{+\infty} e^{-x}x^{\alpha-1}dx, \alpha > 0$$Sabendo que para todo $\alpha$ inteiro e positivo, temos:
$$\Gamma(\alpha) = (\alpha - 1)!$$Quando a variável aleatória tiver uma distribuição gama, usaremos a seguinte notação:
$$X \sim \text{Gama}(\alpha, \beta)$$Sua esperança matemática é dada por:
$$E(X) = \alpha\beta$$A variância é:
$$\text{Var(X)} = \alpha\beta² $$Seu gráfico é:
def fatorial(x):
valor = 1
for i in range(1, x+1):
valor *= i
return valor
def distribuicao_gama(valores, alfa, beta):
y = []
for valor in valores:
if valor > 0:
resultado = (1/(fatorial(alfa-1) * (beta**alfa))) * (valor**(alfa - 1) * np.exp(-(valor/beta)))
y.append(resultado)
else:
resultado = 0
y.append(resultado)
return y
x1 = list(np.linspace(0, 30, 1000))
y1 = distribuicao_gama(x, 3, 1)
x2 = list(np.linspace(0, 30, 1000))
y2 = distribuicao_gama(x, 2, 1)
x3 = list(np.linspace(0, 30, 1000))
y3 = distribuicao_gama(x, 1, 1)
x4 = list(np.linspace(0, 30, 1000))
y4 = distribuicao_gama(x, 4, 1)
x5 = list(np.linspace(0, 30, 1000))
y5 = distribuicao_gama(x, 5, 1)
with sns.axes_style("whitegrid"):
plt.plot(x1, y1, label='$𝛼=1, 𝛽=1$')
plt.plot(x2, y2, label='$𝛼=2, 𝛽=1$')
plt.plot(x3, y3, label='$𝛼=3, 𝛽=1$')
plt.plot(x4, y4, label='$𝛼=4, 𝛽=1$')
plt.plot(x5, y5, label='$𝛼=5, 𝛽=2$')
plt.legend()
plt.title('Exemplo de distribuição Gama')
plt.show()
É um caso especial do modelo gama. Essa distribuição é obtida fazendo com que $\alpha = \frac{v}{2}$ e $\beta = 2$, com $v > 0$ e inteiro.
Definição: Uma variável aleatória contínua X, com valores positivos, tem uma distribuição qui-quadrado com $v$ graus de liberdade, se sua função densidade de probabilidade for dada por:
$$f(x, v) = \begin{cases} \frac{1}{\Gamma(\frac{v}{2})2^{\frac{v}{2}}}x^{\frac{v}{2} - 1}e^{-\frac{x}{2}}, & \text{se } x > 0\\ 0, & \text{se }x < 0\\ \end{cases}$$Quando a variável aleatória tiver uma distribuição qui-quadrado, usaremos a seguinte notação:
$$X \sim \chi²(v)$$Sua esperança matemática é dada por:
$$E(X) = v$$A variância é:
$$\text{Var(X)} = 2v $$A distribuição qui-quadrado possui diversas aplicações e como a distribuição normal, já possui uma tabela com as probabilidades calculadas.
Seu gráfico é:
def distribuicao_qui_quadrado(valores, graus_liberdade):
y = []
for valor in valores:
if valor > 0:
resultado = (1/(fatorial((int(graus_liberdade/2)) -1 ) * (2**graus_liberdade/2))) * (valor**(graus_liberdade/2 - 1) * np.exp(-(valor/2)))
y.append(resultado)
else:
resultado = 0
y.append(resultado)
return y
x = list(np.linspace(0, 10, 1000))
y1 = distribuicao_qui_quadrado(x, 1)
y2 = distribuicao_qui_quadrado(x, 2)
y3 = distribuicao_qui_quadrado(x, 3)
with sns.axes_style("whitegrid"):
plt.figure(figsize=(14, 5))
plt.suptitle('Exemplo de distribuição qui-quadrado')
ax1 = plt.subplot(1, 3, 1)
ax2 = plt.subplot(1, 3, 2)
ax3 = plt.subplot(1, 3, 3)
ax1.plot(x, y1, label='graus de liberdade = 1')
ax2.plot(x, y2, label='graus de liberdade = 2')
ax3.plot(x, y3, label='graus de liberdade = 3')
ax1.legend()
ax2.legend()
ax3.legend()
plt.show()
Essa distribuição é importante para a parte de inferências sobre médias populacionais.
Sua definição é:
Definição:
Seja X uma variável aleatória de distribuição normal padrão ($N(0, 1)$) e Y uma variável aleatória de distribuição qui-quadrado ($\chi²(v)$).
$$t = \frac{X}{\sqrt{\frac{Y}{v}}}$$sua densidade é dada por:
$$f(t, v) = \frac{\Gamma(\frac{v+1}{2})}{\Gamma(\frac{v}{2})\sqrt{\pi v}} \cdot (1 + \frac{t²}{v})^{-\frac{v+1}{2}}, -\infty < t < +\infty$$Diremos que tal variável tem uma distribuição $t$ de Student com $v$ graus de liberdade e indicaremos por $t(v)$.
A esperança matemática é:
$$E(t) = 0$$E a variância é:
$$\text{Var(t)} = \frac{v}{v-2}, v > 2$$Seu gráfico é:
def distribuicao_t_student(valores, graus_liberdade):
y = []
for valor in valores:
parte1 = (fatorial(int(((graus_liberdade + 1)/2)-1))) / (fatorial((int(graus_liberdade /2)-1)) * (np.sqrt((np.pi*graus_liberdade))))
parte2 = (1 + ((valor**2)/graus_liberdade))**(-((graus_liberdade + 1)/2))
resultado = parte1 * parte2
y.append(resultado)
return y
x1 = list(np.linspace(-10, 10, 1000))
y1 = distribuicao_t_student(x1, 4)
y2 = distribuicao_normal_padronizada(x1)
with sns.axes_style("whitegrid"):
plt.plot(x1, y1, label='t de Student')
plt.plot(x1, y2, label='Normal padrão')
plt.legend()
plt.show()
Essa distribuição é utilizada na análise de variâncias (ANOVA). Sua definição é:
Definição: Sejam X e Y duas variáveis aleatórias independentes, cada uma com distribuição qui-quadrado, com $v_1$ e $v_2$ graus de liberdade, respectivamente. Então a variável aleatória é:
$$W = \frac{\frac{X}{v_1}}{\frac{Y}{v_2}}$$Tem densidade dada por:
$$f(w, v_1, v_2) = \frac{\Gamma(\frac{v_1 + v_2}{2})}{\Gamma(\frac{v_1}{2})\Gamma(\frac{v_2}{2})}\Big(\frac{v_1}{v_2}\Big)^{\frac{v_1}{2}} \frac{w^{\frac{v_1 - 2}{2}}}{(1 + \frac{v_1w}{v_2})^{\frac{v_1 + v_2}{2}}}, w > 0$$Quando a variável aleatória tiver uma distribuição F de Snedecor, usaremos a seguinte notação:
$$X \sim F(v_1, v_2)$$Sua esperança matemática é:
$$E(X) = \frac{v_2}{v_2-2}$$E a variância é:
$$\text{Var(X)} = \frac{2v_2^{2}\cdot(v_1 + v_2 - 2)}{v_1(v_2 - 2)² \cdot(v_2 - 4)}$$Seu gráfico é:
def distribuicao_f_snedecor(valores, graus_liberdade_1, graus_liberdade_2):
y = []
for valor in valores:
parte1 = (fatorial(int(((graus_liberdade_1 + graus_liberdade_2)/2)-1))) / (fatorial((int(graus_liberdade_1 /2)-1)) * fatorial((int(graus_liberdade_2 /2)-1)))
parte2 = (graus_liberdade_1/graus_liberdade_2)**(graus_liberdade_1/2)
parte3 = (valor**((graus_liberdade_1-2)/2)) / ((1 + (graus_liberdade_1*valor/graus_liberdade_2))**((graus_liberdade_1 + graus_liberdade_2)/2))
resultado = parte1 * parte2 * parte3
y.append(resultado)
return y
x1 = list(np.linspace(0, 3, 1000))
y1 = distribuicao_f_snedecor(x1, 3, 5)
with sns.axes_style("whitegrid"):
plt.plot(x1, y1, label='F de Snedecor')
plt.legend()
plt.show()