31 lines
2.5 KiB
Python
31 lines
2.5 KiB
Python
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) |