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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user