python_math_stat/practica/math/statistic/Variance/Null_hypothesis_rejection.py
2023-10-05 14:41:32 +03:00

31 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from scipy.stats import f
data = pd.DataFrame({1:[3,1,2],2:[5,3,4],3:[7,6,5]}) # Here 3 groups and we are going to compare them
def odno_disp(data):
first_group = [i for i in data[1]] # Выделяем группы для операции над данными
second_group = [i for i in data[2]]
third_group = [i for i in data[3]]
number_of_groups = len([first_group,second_group,third_group])
all_groups = first_group+second_group+third_group # Все группы тут
mean_of_all_groups = np.mean(all_groups) # среднее значение всей группы
sum_of_squared_total = sum([(i-mean_of_all_groups)**2 for i in all_groups]) # Обьщая изменчивость наших данных, здесь мы расчитали сумму всех квадратов отклонение от среднего
df_of_sst = len(all_groups) - 1 # Число степеней свободы в SST
ssw1 = sum([(i-np.mean(first_group))**2 for i in first_group]) # для расчета суммы квадратов
ssw2 = sum([(i-np.mean(second_group))**2 for i in second_group]) # расчитаем сумму кв всех групп
ssw3 = sum([(i-np.mean(third_group))**2 for i in third_group])
sum_of_squared_within = ssw1+ssw2+ssw3 # сумма квадратов внутри групповая
df_of_ssw = len(all_groups) - number_of_groups # Число степеней свободы во внутри групповой
# Теперь узнаем на сколько наши групповые отклоняются от общегрупповых средних
for_minus_from_each_group = [first_group, second_group, third_group] # для минуса из каждых групп
sum_of_squared_between = sum([number_of_groups*(np.mean(i)-mean_of_all_groups)**2 for i in for_minus_from_each_group])
df_of_ssb = number_of_groups - 1
F = (sum_of_squared_between / df_of_ssb) / (sum_of_squared_within / df_of_ssw)
P_value = f.sf(F, df_of_ssb, df_of_ssw)
if P_value >= 0.05:
return f"Мы не отклоняем нулевую гипотезу так как P_value = {P_value}"
else:
return f"Мы отклоняем нулевую гипотезу то есть P value = {P_value}, H1 верна то есть минимум 2 данные различаются между собой в Генеральной совокупонсти"
p = odno_disp(data)