Section outline
-
Primeiramente você precisa ter o Python instalado no seu computador ou então usar online. Confira aqui no curso de Python como fazer isso: Curso Python: onde rodar os programas
Estes primeiros programas usarão pacotes estatísticos do Python como numpy, scipy e pandas. Estes já possuem todas as formulas pre programadas e então podemos já pedir o que queremos diretamente. Por exemplo o comando mean manda o numpy calcular a média. O programa apenas tem que calcular e mandar mostrar o resultado na tela (print).
💻Copie e cole este programa no seu jupyter notebook e rode:
============================================================
import numpy as np
from scipy import stats
import pandas as pd# Generate a random array of integers
numeros_aleatorios = [23,56,78,22,1,3,6,1,3,6,8,8,8,9,90]
numeros_ordenados = np.sort(numeros_aleatorios)
# Calculate mean
mean = np.mean(numeros_aleatorios)# Calculate median
median = np.median(numeros_aleatorios)# Calculate mode (using pandas to get all modes if tied)
mode = pd.Series(numeros_aleatorios).mode().tolist()
# Print results
print("Numeros aleatórios:", numeros_aleatorios)
print("Números ordenados:", numeros_ordenados)
print(f"Média: {mean}")
print(f"Mediana: {median}")
print(f"Moda(s): {mode}")===========================================================
💻O output será:
Numeros aleatórios: [23, 56, 78, 22, 1, 3, 6, 1, 3, 6, 8, 8, 8, 9, 90] Números ordenados: [ 1 1 3 3 6 6 8 8 8 9 22 23 56 78 90] Média: 21.466666666666665 Mediana: 8.0 Moda(s): [8]
=========
👩💻 Perceba que os numeros que foram digitados estavam fora de ordem mas aqui aparecem ordenados para facilitar o calculo da mediana.
Para nos economizar o trabalho de digitar numeros podemos usar o comando random.randint(1, 111, size=20) que porduz 20 númwros entre 1 e 110. Depois voce pode mudar estes valores.
💻Feita esta modificação, temos o seguinte programa:
===================================================================================import numpy as np
from scipy import stats
import pandas as pd# Generate a random array of integers
numeros_aleatorios = np.random.randint(1, 111, size=20)
numeros_ordenados = np.sort(numeros_aleatorios)
# Calculate mean
mean = np.mean(numeros_aleatorios)# Calculate median
median = np.median(numeros_aleatorios)# Calculate mode (using pandas to get all modes if tied)
mode = pd.Series(numeros_aleatorios).mode().tolist()
# Print results
print("Numeros aleatórios:", numeros_aleatorios)
print("Números ordenados:", numeros_ordenados)
print(f"Média: {mean}")
print(f"Mediana: {median}")
print(f"Moda(s): {mode}")===================================================================================
💻O output será:
Numeros aleatórios: [ 93 103 89 67 27 21 105 37 99 13 77 32 72 84 34 57 1 89 22 20] Números ordenados: [ 1 13 20 21 22 27 32 34 37 57 67 72 77 84 89 89 93 99 103 105] Média: 57.1 Mediana: 62.0 Moda(s): [89]
============================================================
Programa para estudo de p-hackinglink para Google Colab notebook
💻============================================================
import numpy as npfrom scipy import statsimport matplotlib.pyplot as pltimport pandas as pd
# Configurações iniciais
n_amostras = 25n_testes = 100 # número de testes "exploratórios"
# Armazenar p-valoresp_values = []
# Simular muitos testes sem efeito realfor i in range(n_testes):grupo1 = np.random.normal(loc=0, scale=1, size=n_amostras)grupo2 = np.random.normal(loc=0, scale=1, size=n_amostras)_, p = stats.ttest_ind(grupo1, grupo2)p_values.append(p)#print(grupo1)#print(grupo2)# Calculate meanmean1 = np.mean(grupo1)mean2 = np.mean(grupo2)median1 = np.median(grupo1)median2 = np.median(grupo2)mode1 = pd.Series(grupo1).mode().tolist()mode2 = pd.Series(grupo2).mode().tolist()print(f"Média1: {mean1,i}")print(f"Média2: {mean2,i}")print(f"Mediana1: {median1}")print(f"Mediana2: {median2}")print(f"p: {i,p_values[i]}")#print(f"Moda1(s): {mode1}")#print(f"Moda2(s): {mode2}")
# Contar quantos p < 0.05falsos_positivos = sum(p < 0.05 for p in p_values)a=[p for p in p_values if p < 0.05]
# Mostrar os p-valores < 0.05 com sua posição originalprint("\033[92mÍndices e p-valores considerados 'significativos':")for i, p in enumerate(p_values):if p < 0.05:print(f"Teste #{i:4d} → p-valor = {p:.4f}")
# Exibir resultados
print(f"Total de testes: {n_testes}")print(f"\033[1;34mP-valores < 0.05 (falsos positivos): {falsos_positivos}")print(f"Proporção: {falsos_positivos / n_testes:.2%}")
# Gráfico de histograma dos p-valoresplt.figure(figsize=(10,5))plt.hist(p_values, bins=50, color='skyblue', edgecolor='black')plt.axvline(0.05, color='red', linestyle='--', label='p = 0.05')plt.title('Distribuição de p-valores em 1000 testes sem efeito real')plt.xlabel('p-valor')plt.ylabel('Frequência')plt.legend()plt.grid(True)plt.show()💻============================================================Este programa gera dois conjuntos de números aleatórios e os compara entre si. O objetivo é testar se ambos pertencem a distribuições puramente aleatórias — nesse caso, espera-se que o valor de p seja maior que 0,05.
Se um dos conjuntos contiver números sistematicamente mais altos — por exemplo, devido ao efeito de uma droga ou tratamento — então o valor de p deverá ser menor que 0,05, indicando uma diferença estatisticamente significativa.
No entanto, neste experimento, ambos os conjuntos são aleatórios. Assim, os casos em que p < 0,05 representam falsos positivos: resultados aparentemente significativos que surgem apenas por acaso. Esse fenômeno pode ser explorado indevidamente para publicar pesquisas como se fossem conclusivas, quando na verdade refletem apenas variações aleatórias sem efeito real.