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("Остатки гомоскедастичны. Условие линейной регрессии выполнено.")