Aula 6 – Distribuição t e Intervalos com Variância Desconhecida

Nesta aula prática vamos utilizar a distribuição t de Student para calcular intervalos de confiança quando a variância populacional é desconhecida, incluindo casos com duas amostras e amostras dependentes.

Parte 1 – Comparação entre Intervalos com Z e com t

import numpy as np
import scipy.stats as stats

# População normal simulada
np.random.seed(42)
pop = np.random.normal(loc=50, scale=10, size=100000)

# Amostra pequena
amostra = np.random.choice(pop, size=10)
media = np.mean(amostra)
s = np.std(amostra, ddof=1)
n = len(amostra)

# IC com Z (assumindo sigma conhecido)
z = 1.96
sigma_conhecido = 10
erro_z = z * sigma_conhecido / np.sqrt(n)
ic_z = (media - erro_z, media + erro_z)

# IC com t (estimando s)
t = stats.t.ppf(0.975, df=n-1)
erro_t = t * s / np.sqrt(n)
ic_t = (media - erro_t, media + erro_t)

print(f"Intervalo com Z: {ic_z}")
print(f"Intervalo com t: {ic_t}")
Intervalo com Z: (48.476762005838495, 60.872890433698544)
Intervalo com t: (49.450674605606196, 59.89897783393084)

Parte 2 – Intervalo de Confiança com t (uma amostra)

# Simular amostra de alturas
alturas = np.random.normal(loc=170, scale=8, size=25)
media_altura = np.mean(alturas)
s_altura = np.std(alturas, ddof=1)
n = len(alturas)
t_val = stats.t.ppf(0.975, df=n-1)
erro = t_val * s_altura / np.sqrt(n)
ic = (media_altura - erro, media_altura + erro)

print(f"Intervalo de confiança 95%: {ic}")
Intervalo de confiança 95%: (168.0771730825017, 175.09386704125455)

Parte 3 – Intervalo de Confiança para Diferença de Médias (Independentes)

# Simular dados de dois grupos
grupoA = np.random.normal(loc=100, scale=15, size=30)
grupoB = np.random.normal(loc=95, scale=20, size=30)

mediaA = np.mean(grupoA)
mediaB = np.mean(grupoB)
sA = np.std(grupoA, ddof=1)
sB = np.std(grupoB, ddof=1)

# Intervalo sem assumir variâncias iguais (Welch)
se = np.sqrt((sA**2)/30 + (sB**2)/30)
df = ((sA**2/30 + sB**2/30)**2) / (((sA**2/30)**2)/29 + ((sB**2/30)**2)/29)
t_val = stats.t.ppf(0.975, df=df)
erro = t_val * se
ic_dif = ((mediaA - mediaB) - erro, (mediaA - mediaB) + erro)

print(f"Intervalo da diferença de médias (sem variância igual): {ic_dif}")
Intervalo da diferença de médias (sem variância igual): (-4.609983870001351, 11.354562241077026)

Parte 4 – Intervalo de Confiança para Diferenças em Pares (Dependentes)

# Simular pares (antes e depois)
antes = np.random.normal(loc=70, scale=5, size=20)
depois = antes + np.random.normal(loc=-2, scale=3, size=20)

diferencas = depois - antes
media_dif = np.mean(diferencas)
sd_dif = np.std(diferencas, ddof=1)
n = len(diferencas)
t_val = stats.t.ppf(0.975, df=n-1)
erro = t_val * sd_dif / np.sqrt(n)
ic_dif = (media_dif - erro, media_dif + erro)

print(f"IC 95% para diferença de médias (dependentes): {ic_dif}")
IC 95% para diferença de médias (dependentes): (-4.7362228139579265, -2.0123306422674627)

Parte 5 – Exercício Final

Simule duas amostras de grupos distintos (ex: dois produtos, dois métodos de ensino).

  • Verifique visualmente a distribuição dos dados.
  • Teste se é adequado assumir variâncias iguais.
  • Calcule o intervalo de confiança da diferença de médias com o método apropriado.