1
resposta

[Dúvida] Fiz manualmente, mas onde estive errando o valor de U?

sem_exercicios = [7,  6,  7,  8,  6,  8,  6,  9,  5]
com_exercicios = [8,  7,  6,  6,  8,  6,  10, 6,  7,  8]
significancia = 0.1
confianca = 1 - significancia
n_1 = len(sem_exercicios)  # nº de elementos do MENOR grupo
n_2 = len(com_exercicios)  # nº de elementos do MAIOR grupo
sem_exercicios = pd.DataFrame(sem_exercicios)
com_exercicios = pd.DataFrame(com_exercicios)

Então, comecei a fazer os postos:

S2 = pd.DataFrame(sem_exercicios)
S2['Exercicio'] = 'Sem'
S2

. 0 Exercicio 0 7 Sem 1 6 Sem 2 7 Sem 3 8 Sem 4 6 Sem 5 8 Sem 6 6 Sem 7 9 Sem 8 5 Sem

C1 = pd.DataFrame(com_exercicios)
C1['Exercicio'] = 'Com'
C1

. 0 Exercicio 0 8 Com 1 7 Com 2 6 Com 3 6 Com 4 8 Com 5 6 Com 6 10 Com 7 6 Com 8 7 Com 9 8 Com

exercitados = S2.append(C1)
exercitados.reset_index(inplace = True, drop = True)
exercitados.sort_values(by = 0, inplace = True)
exercitados

. 0 Exercicio 8 5 Sem 1 6 Sem 16 6 Com 4 6 Sem 14 6 Com 6 6 Sem 11 6 Com 12 6 Com 0 7 Sem 2 7 Sem 17 7 Com 10 7 Com 13 8 Com 9 8 Com 5 8 Sem 3 8 Sem 18 8 Com 7 9 Sem 15 10 Com

exercitados['Posto'] = range(1, len(exercitados) + 1)
exercitados.head()

. 0 Exercicio Posto 8 5 Sem 1 1 6 Sem 2 16 6 Com 3 4 6 Sem 4 14 6 Com 5

posto = exercitados[[0, 'Posto']].groupby([0]).mean()
posto

. Posto 05 1.0 6 5.0 7 10.5 8 15.0 9 18.0 10 19.0

exercitados.drop(['Posto'], axis = 1, inplace = True)
exercitados.head()

. 0 Exercicio 8 5 Sem 1 6 Sem 16 6 Com 4 6 Sem 14 6 Com

exercitados = exercitados.merge(posto, left_on=0, right_on=0, how = 'left')
exercitados

. 0 Exercicio Posto 0 5 Sem 1.0 1 6 Sem 5.0 2 6 Com 5.0 3 6 Sem 5.0 4 6 Com 5.0 5 6 Sem 5.0 6 6 Com 5.0 7 6 Com 5.0 8 7 Sem 10.5 9 7 Sem 10.5 10 7 Com 10.5 11 7 Com 10.5 12 8 Com 15.0 13 8 Com 15.0 14 8 Sem 15.0 15 8 Sem 15.0 16 8 Com 15.0 17 9 Sem 18.0 18 10 Com 19.0

Temp = exercitados[['Exercicio', 'Posto']].groupby('Exercicio').sum()
Temp

| | Posto| | Exercicio | | | -------- | -------- | | Com | 105.0 | | Sem | 85.0 |

R_2 = Temp.loc['Com'][0]
R_2

105.0
R_1 = Temp.loc['Sem'][0]
R_1

85.0
u_1 = n_1 * n_2 + ((n_1 * (n_1 + 1)) / (2)) - R_1
u_1

50.0
u_2 = n_1 * n_2 + ((n_2 * (n_2 + 1)) / (2)) - R_2
u_2

40.0
u = min(u_1, u_2)
u

40.0
1 resposta

Oi, Akhenaton! Como você está?

Desculpe pela demora em te responder.

Ao fazer cálculos estatísticos passo a passo, os erros são muito prováveis. Entendo que a prática de todos os momentos do cálculo é muito importante para realmente internalizar os conceitos e entender como os valores se transformam, porém, utilizar ferramentas algorítmicas confiáveis, como as funções de bibliotecas específicas de análise estatística traz um nível de confiança muito maior no resultado dos testes. Não se frustre por encontrar divergências ou dificuldades, isso é super normal.

O seu teste de Mann-Whitney, assim como o feito pela biblioteca spicy-stats, aceita a hipótese nula de que os exercícios físicos não interferem no rendimento escolar dos alunos.

Como você assumiu manualmente o rankeamento dos valores para o conjunto de valores de cada grupo analisado, ao criar os DataFrames e manipulá-los, a diferença no valor obtido de U precisa ser analisada profundamente, inclusive compreendendo o que acontece "por baixo dos panos" em ambos os códigos.

Mesmo assim, seu código segue a lógica do teste de Mann-Whitney e traz um resultado coerente. Continue praticando para compreender cada vez mais a fundo o funcionamento dos testes estatísticos e o papel que as variáveis assumem.

Grande abraço.