Por que esperamos que o valor de $\chi^2$ seja próximo ao NGL ($\nu$)?
Dedução
Aqui vou apresentar a dedução formal de que o valor esperado $\langle\chi^2\rangle$ de uma variável aleatória com distribuição qui-quadrado é igual ao seu número de graus de liberdade, $\nu$.
1. Definição da Variável Aleatória Qui-Quadrado
Para começar, vamos definir o que é uma variável aleatória qui-quadrado. Vamos chamá-la de $X$. Assumimos que $X$ segue uma distribuição qui-quadrado com $\nu$ graus de liberdade, o que denotamos por $X \sim \chi^2(\nu)$. Por definição, constrói-se $X$ a partir da soma dos quadrados de $\nu$ variáveis aleatórias independentes, $Z_1, Z_2, \ldots, Z_\nu$, onde cada uma delas segue a distribuição normal padrão, $Z_i \sim N(0, 1)$.
A expressão matemática para $X$ é:
$$ X = \sum_{i=1}^{\nu} Z_i^2 $$
2. Cálculo do Valor Esperado
Agora, o objetivo é encontrar o valor esperado de $X$. Para isso, aplico o operador de valor esperado, que denoto por $\langle \cdot \rangle$. Uma propriedade fundamental é a \textbf{linearidade da esperança}, que me permite dizer que a esperança de uma soma é a soma das esperanças.
$$ \langle X \rangle = \left\langle\sum_{i=1}^{\nu} Z_i^2\right\rangle = \sum_{i=1}^{\nu} \langle Z_i^2 \rangle $$
Como podemos ver, o problema se resume a determinar o valor de $\langle Z_i^2 \rangle$.
3. Relação com a Variância
Para nos ajudar, vamos recorrer à definição de variância. Para qualquer variável aleatória $Y$, sabemos que a variância é:
$$ \text{Var}(Y) = \langle Y^2 \rangle - \langle Y \rangle^2 $$
Rearranjando esta equação, é possível isolar o termo que interessa, $\langle Y^2 \rangle$:
$$ \langle Y^2 \rangle = \text{Var}(Y) + \langle Y \rangle^2 $$
4. Propriedades da Distribuição Normal Padrão
Um ponto crucial da dedução são as propriedades das variáveis $Z_i$. Como definimos que elas seguem uma distribuição normal padrão ($Z_i \sim N(0, 1)$), conhecemos sua média e variância:
$$ \langle Z_i \rangle = 0 $$
$$ \text{Var}(Z_i) = 1 $$
5. Determinação de $\langle Z_i^2 \rangle$
Com isso em mãos, agora pode-se substituir os valores da média e da variância da $N(0,1)$ na equação que relacionamos com a variância:
$$ \langle Z_i^2 \rangle = \text{Var}(Z_i) + \langle Z_i \rangle^2 = 1 + (0)^2 = 1 $$
Este passo mostra que o valor esperado do quadrado de uma variável normal padrão é exatamente 1.
6. Conclusão da Dedução
Agora na etapa final. Substitui-se o resultado $\langle Z_i^2 \rangle=1$ de volta na expressão para $\langle X \rangle$:
$$ \langle X \rangle = \sum_{i=1}^{\nu} (1) = \underbrace{1 + 1 + \dots + 1}_{\nu \text{ vezes}} = \nu $$
E assim, chega-se no resultado esperado:
$$ \boxed{\langle\chi^2(\nu)\rangle = \nu} $$
Simulação para demonstração
O código que geramos é um exemplo clássico de uma simulação de Toy Monte Carlo, uma ferramenta indispensável na física e em muitas outras ciências. O objetivo principal deste script é verificar empiricamente as propriedades teóricas da distribuição qui-quadrado ($\chi^2$) que deduzimos matematicamente, especificamente que seu valor esperado (média) é ⟨χ2⟩=ν e sua variância é Var(χ2)=2ν.
Desta vez, além de confiarmos apenas na dedução abstrata, estamos simulando um grande número de "experimentos numéricos" para ver se os resultados convergem para o que a teoria prevê.
Resultados
Iniciando simulação para ν = 10 com 100000 experimentos... Simulação concluída. --- Comparação de Resultados --- Média (Teórica): 10.0000 Média (Simulada): 9.9973 Variância (Teórica): 20.0000 Variância (Simulada): 20.0966 ---------------------------------
Vamos detalhar o funcionamento do código passo a passo.
1. Configuração dos Parâmetros
nu = 5 n_simulacoes = 100000
nu: Esta variável representa o número de graus de liberdade. É o parâmetro fundamental que define a forma e as propriedades da distribuição χ2. No nosso caso, estamos simulando uma distribuição χ2 com 5 graus de liberdade.n_simulacoes: Este é o número de "experimentos" que vamos realizar. A base das simulações de Monte Carlo é a Lei dos Grandes Números: quanto mais experimentos realizarmos, mais próximos nossos resultados médios estarão dos valores teóricos verdadeiros. Um valor de 100.000 garante uma excelente precisão estatística.
2. O Processo de Simulação (O "Loop")
O coração do código é o laço for, que executa o mesmo procedimento n_simulacoes vezes. Cada iteração do laço simula a criação de uma única amostra de uma variável aleatória $\chi^2(\nu)$:
# 1. Gerar 'nu' amostras de uma distribuição normal padrão N(0, 1) z = np.random.randn(nu) # 2. Elevar ao quadrado cada amostra z_quadrado = z**2 # 3. Somar os quadrados para obter uma amostra da distribuição chi-quadrado chi2_amostra = np.sum(z_quadrado)
Este bloco de três linhas é a implementação direta da definição matemática da distribuição χ2:
Primeiro, geramos ν (neste caso, 5) números aleatórios a partir de uma distribuição normal padrão (média 0, variância 1). Cada um desses números representa uma variável $Z_i$.
Em seguida, cada um desses números é elevado ao quadrado ($Z_i^2$).
Finalmente, eles são somados $\sum_{i=1}^\nu Z_i^2.$
O resultado, chi2_amostra, é um único número que pertence à distribuição $\chi^2$ com $\nu=5$. Este valor é então armazenado na lista chi2_valores.
3. Análise e Comparação
Após o término do laço, a lista chi2_valores contém 100.000 amostras que, coletivamente, representam a distribuição $\chi^2(10)$. O código então calcula:
media_simulada = np.mean(chi2_valores) var_simulada = np.var(chi2_valores)
media_simulada: A média de todos os valores gerados. Esperamos que este número seja muito próximo de $\nu=10$.var_simulada: A variância de todos os valores gerados. Esperamos que este número seja muito próximo de $2\nu=20$.
O script imprime esses valores ao lado dos valores teóricos para uma comparação direta e quantitativa.
4. Visualização dos Dados
A parte final do código usa a biblioteca matplotlib para criar uma representação visual dos nossos resultados:
Histograma: O comando
ax.hist(...)plota um histograma dos 100.000 valores de $\chi^2$ que geramos. Ao normalizar a área do histograma (density=True), ele se torna uma aproximação visual da Função Densidade de Probabilidade (PDF) da distribuição $\chi^2(10)$. A forma do histograma (assimétrica, com uma cauda longa à direita) é característica desta distribuição para poucos graus de liberdade.Linhas Verticais: As duas linhas verticais (
ax.axvline(...)) são uma ajuda visual crucial. Elas marcam a posição da média teórica ($\nu$) e da média obtida na simulação. A sobreposição quase perfeita dessas duas linhas demonstra visualmente o sucesso da simulação em reproduzir o resultado teórico.
Em resumo, o código é uma ponte entre a teoria estatística e a prática computacional. Ele não "prova" a matemática, mas fornece uma evidência numérica esmagadora de que as deduções para a média e a variância da distribuição qui-quadrado estão corretas, visualizando a forma da distribuição no processo.
Código
#@title Simulação Chi-Quadrado com plot 10x
import numpy as np
import matplotlib.pyplot as plt
# --- Parâmetros da Simulação ---
nu = 10 # Número de graus de liberdade (ν)
n_simulacoes = 100000 # Número de experimentos a serem simulados
# Lista para armazenar os valores de chi-quadrado calculados
chi2_valores = []
print(f"Iniciando simulação para ν = {nu} com {n_simulacoes} experimentos...")
# --- Loop Principal da Simulação ---
for _ in range(n_simulacoes):
# 1. Gerar 'nu' amostras de uma distribuição normal padrão N(0, 1)
z = np.random.randn(nu)
# 2. Elevar ao quadrado cada amostra
z_quadrado = z**2
# 3. Somar os quadrados para obter uma amostra da distribuição chi-quadrado
chi2_amostra = np.sum(z_quadrado)
# 4. Armazenar o resultado
chi2_valores.append(chi2_amostra)
print("Simulação concluída.")
# Converter a lista para um array numpy para cálculos eficientes
chi2_valores = np.array(chi2_valores)
# --- Cálculo dos Resultados ---
# Média e variância a partir dos dados simulados
media_simulada = np.mean(chi2_valores)
var_simulada = np.var(chi2_valores)
# Valores teóricos esperados
media_teorica = nu
var_teorica = 2 * nu
# --- Apresentação dos Resultados ---
print("\n--- Comparação de Resultados ---")
print(f"Média (Teórica): {media_teorica:.4f}")
print(f"Média (Simulada): {media_simulada:.4f}\n")
print(f"Variância (Teórica): {var_teorica:.4f}")
print(f"Variância (Simulada): {var_simulada:.4f}")
print("---------------------------------")
# --- Visualização dos Dados ---
plt.style.use('seaborn-v0_8-whitegrid')
fig, ax = plt.subplots(figsize=(100, 60)) # Aumenta o tamanho do plot em 10x
# Histograma dos valores de chi-quadrado
ax.hist(chi2_valores, bins=50, density=True, alpha=0.7, label=r'Distribuição Simulada $\chi^2$')
# Linhas verticais para as médias
ax.axvline(media_teorica, color='red', linestyle='--', linewidth=20, label=rf'Média Teórica ($\nu={nu}$)') # Adiciona label
ax.axvline(media_simulada, color='black', linestyle=':', linewidth=20, label=rf'Média Simulada ({media_simulada:.2f})') # Adiciona label
# Configurações do gráfico
ax.set_title(rf'Distribuição $\chi^2$ Simulada com $\nu={nu}$ Graus de Liberdade', fontsize=16*10) # Aumenta o tamanho da fonte do título em 10x
ax.set_xlabel(r'Valor de $\chi^2$', fontsize=12*10) # Aumenta o tamanho da fonte do eixo x em 10x
ax.set_ylabel('Densidade de Probabilidade', fontsize=12*10) # Aumenta o tamanho da fonte do eixo y em 10x
ax.legend(fontsize=10*10, loc='upper right') # Aumenta o tamanho da fonte da legenda em 10x e coloca no canto superior direito
ax.grid(True, linewidth=10) # Aumenta a largura das linhas de grid em 10x
plt.tight_layout()
plt.show()