Update README.md, menu_load.py, and 2 more files...
This commit is contained in:
parent
64f0c7e6af
commit
9cef66de67
|
@ -2,12 +2,6 @@ chezahuynya1
|
|||
=============
|
||||
|
||||
bts metodi 1
|
||||
1 +
|
||||
2 +
|
||||
3 +
|
||||
4 +
|
||||
5 -
|
||||
6 -
|
||||
|
||||
--------
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ from app.zadachi.zadacha1 import zadacha1
|
|||
from app.zadachi.zadacha2 import zadacha2
|
||||
from app.zadachi.zadacha3 import zadacha3
|
||||
from app.zadachi.zadacha4 import zadacha4
|
||||
from app.zadachi.zadacha5 import zadacha5
|
||||
|
||||
class menu:
|
||||
|
||||
|
@ -17,8 +18,7 @@ class menu:
|
|||
print('2. Задача 2')
|
||||
print('3. Задача 3')
|
||||
print('4. Задача 4')
|
||||
print('5. Задача 5 (недоступно)')
|
||||
print('6. Задача 6 (недоступно)')
|
||||
print('5. Задача 5')
|
||||
print('0. Exit')
|
||||
|
||||
choice = input('Select an option: ')
|
||||
|
@ -33,9 +33,7 @@ class menu:
|
|||
elif choice == '4':
|
||||
self.zadacha4_menu() # Добавлен вызов меню задачи 4
|
||||
elif choice == '5':
|
||||
print('Временно недоступно')
|
||||
elif choice == '6':
|
||||
print('Временно недоступно')
|
||||
self.zadacha5_menu() # Добавлен вызов меню задачи 5
|
||||
elif choice == '0':
|
||||
print('Exiting program...')
|
||||
break
|
||||
|
@ -134,10 +132,11 @@ class menu:
|
|||
break # Вернуться в основное меню
|
||||
else:
|
||||
print('Неверный выбор, попробуйте снова.')
|
||||
|
||||
def zadacha4_menu(self):
|
||||
"""Меню для задачи 4 (работа с полиномиальными данными)."""
|
||||
"""Меню для задачи 4"""
|
||||
clear_console()
|
||||
z4 = zadacha4() # Создаем объект задачи 4
|
||||
#z4 = zadacha4() # Создаем объект задачи 4
|
||||
|
||||
while True:
|
||||
print('\nЗадача 4:')
|
||||
|
@ -155,3 +154,25 @@ class menu:
|
|||
break
|
||||
else:
|
||||
print('Неверный выбор, попробуйте снова.')
|
||||
|
||||
def zadacha5_menu(self):
|
||||
"""Меню для задачи 5"""
|
||||
clear_console()
|
||||
|
||||
while True:
|
||||
print('\nЗадача 5:')
|
||||
print('1. Рассчитать статистики для определения выполнения условий применения линейной регрессии')
|
||||
print('0. Назад')
|
||||
|
||||
choice = input('Выберите подкатегорию: ')
|
||||
|
||||
clear_console()
|
||||
|
||||
if choice == '1':
|
||||
z5 = zadacha5()
|
||||
z5.calculate_spearman_rank_test()
|
||||
z5.calculate_gq_test()
|
||||
elif choice == '0':
|
||||
break
|
||||
else:
|
||||
print('Неверный выбор, попробуйте снова.')
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
import numpy as np
|
||||
from app.zadachi.zadacha2 import zadacha2
|
||||
from app.zadachi.zadacha1 import zadacha1
|
||||
|
||||
class zadacha5:
|
||||
def __init__(self):
|
||||
self.z1 = zadacha1()
|
||||
self.z2 = zadacha2()
|
||||
|
||||
def calculate_spearman_rank_test(self):
|
||||
"""
|
||||
Выполняет тест ранговой корреляции Спирмена для проверки взаимосвязи между X и Y.
|
||||
:return: коэффициент корреляции Спирмена и p-value
|
||||
"""
|
||||
# Генерируем данные
|
||||
X, Y = self.z1.create_lin_array()
|
||||
|
||||
# Вычисляем ранги
|
||||
X_ranks = np.argsort(np.argsort(X))
|
||||
Y_ranks = np.argsort(np.argsort(Y))
|
||||
|
||||
# Вычисляем разницу рангов
|
||||
diff_ranks = X_ranks - Y_ranks
|
||||
|
||||
# Числитель формулы Спирмена
|
||||
numerator = 6 * np.sum(diff_ranks**2)
|
||||
|
||||
# Количество наблюдений
|
||||
n = len(X)
|
||||
|
||||
# Коэффициент корреляции Спирмена
|
||||
spearman_coef = 1 - numerator / (n * (n**2 - 1))
|
||||
|
||||
# Оценка значимости результата (p-value) не рассчитывается вручную здесь, но коэффициент корреляции интерпретируется.
|
||||
print(f'Коэффициент корреляции Спирмена: {spearman_coef:.3f}')
|
||||
|
||||
# Интерпретация результата
|
||||
if np.abs(spearman_coef) > 0.5:
|
||||
print("Существует значимая взаимосвязь между X и Y.")
|
||||
else:
|
||||
print("Взаимосвязь между X и Y слабая или отсутствует.")
|
||||
|
||||
def calculate_gq_test(self):
|
||||
"""
|
||||
Выполняет тест Голдфелда-Квандта для проверки гомоскедастичности.
|
||||
:return: значение статистики F и результат теста
|
||||
"""
|
||||
# Генерируем данные
|
||||
X, Y = self.z1.create_lin_array()
|
||||
|
||||
# Рассчитываем коэффициенты регрессии
|
||||
b0, b1 = self.z2.calculate_coefficients(X, Y)
|
||||
|
||||
# Вычисляем остатки
|
||||
residuals = Y - self.z2.predict(X, b0, b1)
|
||||
|
||||
# Сортируем данные по X для выполнения теста
|
||||
sorted_indices = np.argsort(X)
|
||||
residuals_sorted = residuals[sorted_indices]
|
||||
|
||||
# Разбиваем данные на две части
|
||||
split_index = len(residuals_sorted) // 2
|
||||
residuals_low = residuals_sorted[:split_index]
|
||||
residuals_high = residuals_sorted[split_index:]
|
||||
|
||||
# Вычисляем средние квадраты остатков
|
||||
var_low = np.var(residuals_low, ddof=1)
|
||||
var_high = np.var(residuals_high, ddof=1)
|
||||
|
||||
# Тестовая статистика F
|
||||
f_stat = var_high / var_low
|
||||
|
||||
print(f'Статистика F: {f_stat:.3f}')
|
||||
|
||||
# Интерпретация результата
|
||||
if f_stat > 2 or f_stat < 0.5:
|
||||
print("Остатки не гомоскедастичны. Условие линейной регрессии нарушено.")
|
||||
else:
|
||||
print("Остатки гомоскедастичны. Условие линейной регрессии выполнено.")
|
Loading…
Reference in New Issue