Tentei deixar o cálculo do valor P e a impressão do resultado mais automatizada, de uma maneira que fosse possível uma impressão do resultado dos testes de uma maneira mais completa, sem ser necessário mais trabalho do usuário/analista.
# Grupo_A e Grupo_B serão os grupos sobre os quais será realizado o teste
# Hipotese_Nula e Hipotese_Alternativa serão as hipóteses definidas para cada teste
def teste_da_hipotese(grupo_A, grupo_B, Hipotese_Nula, Hipotese_Alternativa):
r = ranksums(grupo_A, grupo_B)
def valorP_significativo():
print('É rejeitada a hipótese nula')
print(Hipotese_Alternativa)
# Caso o valor de P < 0.05 E seja muito pequeno imprime o valor completo
if((r.pvalue < 0.05) & (r.pvalue < 0.0001)):
print('O valor do p-value {}'.format(r.pvalue))
valorP_significativo()
# Caso o valor de P < 0.05 E seja maior que 4 casas decimais imprime o valor arrendodado
elif((r.pvalue < 0.05) & (r.pvalue >= 0.0001)):
print('O valor do p-value {}'.format(r.pvalue.round(4)))
valorP_significativo()
else:
print('É aceita a hipótese nula')
print(Hipotese_Nula)
Para que o código rode corretamente é necessário apenas definir as hipóteses, como por exemplo:
hipotese_nula1 = 'A distribuição é a mesma nos dois grupos'
hipotese_alternativa1 = 'A distribuição não é a mesma nos dois grupos'
Definir os grupos que serão testados:
sobremesa = gorjetas.query("sobremesa == 'Sim'").porcentagem
sem_sobremesa = gorjetas.query("sobremesa == 'Não'").porcentagem
E adicionar os parâmetros corretamente na função:
teste_da_hipotese(sobremesa, sem_sobremesa, hipotese_nula1, hipotese_alternativa1)
Minha duvida em relação a esse código é somente se ele segue as convenções dos usuários de Python, pois achei meio estranho e não sei se está correto utilizar funções dentro de funções como utilizei ali.