Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР / Лаб. 3 ТВиМС

.docx
Скачиваний:
8
Добавлен:
07.09.2024
Размер:
5.13 Mб
Скачать

Лабораторная работа № 3. Анализ данных в линейной регрессионной модели

Преподаватель: Епихин Валерий Николаевич. Оценка: 5 из 5.

Ошибки: нет.

import openpyxl import numpy as np import sympy as sp import matplotlib.pyplot as plt import statistics as stat from scipy.stats import t, chi2, norm def round2(x): return round(x, 4) #var1 = [[11.16, 9.86], [14.93, 4.78], [18.09, 1.07], [13.17, 6.27], [16.75, 2.25], [15.9, 3.25], [17.35, 0.4], # [13.94, 5.31], [11.07, 7.62], [17.08, 2.2], [10.13, 9.1], [10.29, 9.27], [13.05, 8.84], [11.11, 10.06], [13.33, 6.94], # [12.75, 2.21], [17.6, 2.9], [13.06, 3.21], [13.52, 6.82], [16.44, 1.78], [12.22, 9.27], [19.41, 1.32], [12.92, 5.45], # [10.25, 12.83], [14.2, 5.33], [6.86, 12.08], [8.38, 10.44], [14.72, 5.74], [14.74, 8.05], [11.19, 8.36], [14.05, 5.55], # [14.55, 7.96], [14.59, 1.25], [12.7, 5.83], [8.72, 6.43], [10.6, 9.25], [12.77, 5.31], [16.42, 2.26], [10.37, 8.72], # [17.56, 3.74], [8.18, 11.53], [12.96, 6.91], [12.67, 7.1], [8.88, 8.1], [9.8, 10.48], [5.97, 14.24], [18.84, 1.27], # [13.27, 5.32], [7.71, 10.28], [12.35, 7.76]] workbook = openpyxl.load_workbook('BDZ3.xlsx') sheet = workbook['3'] var1 = [] for i in range(3, 53): value_b = sheet.cell(row=i, column=2).value value_c = sheet.cell(row=i, column=3).value var1.append([value_b, value_c]) #выборка selection = var1.copy() size_selection = len(selection) print(f'Выборка:\n{selection}\n') x_selection = [point[0] for point in selection] y_selection = [point[1] for point in selection] zi_x = [6, 8, 10, 12, 14, 16, 18, 20] zi_y = [1, 3, 5, 7, 9, 11, 13, 15] n_table = np.zeros((8, 8)) for i in range(len(x_selection)): xi = 0 yi = 0 for j in range(len(zi_x) - 1): if zi_x[j] - 1 <= x_selection[i] < zi_x[j] + 1: xi = j if zi_y[j] - 1 <= y_selection[i] < zi_y[j] + 1: yi = j if zi_x[-1] - 1 <= x_selection[i] <= zi_x[-1] + 1: xi = len(zi_x) - 1 if zi_y[-1] - 1 <= y_selection[i] <= zi_y[-1] + 1: yi = len(zi_y) - 1 n_table[xi][yi] += 1 str__ = "-" * 4 + "+" str_ = str__ * 10 str_y = " X\Y|" for i in range(len(zi_y)): str_yi = str(zi_y[i]) if len(str_yi) == 1: str_y = str_y + " " + str_yi + " |" if len(str_yi) == 2: str_y = str_y + " " + str_yi + " |" print("Таблица частот группированной двумерной выборки") print(str_y + " nj |") print(str_) ni_list = [] for i in range(len(zi_x)): c = 0 str_x = "" str_xi = str(zi_x[i]) if len(str_xi) == 1: str_x = " " + str_xi + " |" if len(str_xi) == 2: str_x = " " + str_xi + " |" for j in range(len(n_table[i])): c += n_table[i][j] str_xj = str(int(n_table[i][j])) str_x = str_x + " " + str_xj + " |" ni_list.append(int(c)) str_c = str(int(c)) if len(str_c) == 1: str_c = " " + str_c + " |" if len(str_c) == 2: str_c = " " + str_c + " |" str_x = str_x + str_c print(str_x) print(str_) nj_list = [] str_ni = " ni |" for i in range(len(n_table[0])): c = 0 for j in range(len(n_table[0])): c += n_table[j][i] nj_list.append(int(c)) str_c = str(int(c)) if len(str_c) == 1: str_ni = str_ni + " " + str_c + " |" if len(str_c) == 2: str_ni = str_ni + " " + str_c + " |" str_ni = str_ni + " " + str(sum(nj_list)) + " |" print(str_ni) print("") #print(n_table) #числовые характеристики #негруппированная mx1 = round2(sum(x_selection) / size_selection) print(f'Выборочное среднее x исходной выборки:\n{mx1}') my1 = round2(sum(y_selection) / size_selection) print(f'Выборочное среднее y исходной выборки:\n{my1}') x_selection2 = [i**2 for i in x_selection] #x_selection_ = [(i-mx1)**2 for i in x_selection] s2x1 = round2((1 / (size_selection - 1)) * (sum(x_selection2) - (size_selection * mx1 ** 2))) #s1 = round2((1/(len_selection-1))*sum(x_selection_)) print(f'Дисперсия x исходной выборки:\n{s2x1}') #print(f'Дисперсия x исходной выборки:\n{s1}') y_selection2 = [i**2 for i in y_selection] #y_selection_ = [(i-my1)**2 for i in y_selection] s2y1 = round2((1 / (size_selection - 1)) * (sum(y_selection2) - (size_selection * my1 ** 2))) #s2 = round2((1/(len_selection-1))*sum(y_selection_)) print(f'Дисперсия y исходной выборки:\n{s2y1}') #print(f'Дисперсия y исходной выборки:\n{s2}') xy_selection = [x_selection[i] * y_selection[i] for i in range(size_selection)] Kxy1 = round2((1 / (size_selection - 1)) * (sum(xy_selection) - size_selection * mx1 * my1)) print(f'Ковариация исходной выборки:\n{Kxy1}') K = np.cov(x_selection, y_selection) print(f'Ковариация исходной выборки (cov):\n{round2(K[0][1])}') pxy1 = round2(Kxy1/(np.sqrt(s2x1)*np.sqrt(s2y1))) print(f'Коэффициент корреляции исходной выборки:\n{pxy1}') p = np.corrcoef(x_selection, y_selection) print(f'Ковариация исходной выборки (corrcoef):\n{round2(p[0][1])}\n') #группированная xni_list = [zi_x[i]*ni_list[i] for i in range(len(zi_x))] mx2 = round2(sum(xni_list) / size_selection) print(f'Выборочное среднее x группированной выборки:\n{mx2}') ynj_list = [zi_y[i]*nj_list[i] for i in range(len(zi_y))] my2 = round2(sum(ynj_list) / size_selection) print(f'Выборочное среднее y группированной выборки:\n{my2}') x2ni_list = [zi_x[i]**2*ni_list[i] for i in range(len(zi_x))] s2x2 = round2((1 / (size_selection - 1)) * (sum(x2ni_list) - size_selection * mx2 ** 2)) print(f'Дисперсия x группированной выборки:\n{s2x2}') y2nj_list = [zi_y[i]**2*nj_list[i] for i in range(len(zi_y))] s2y2 = round2((1 / (size_selection - 1)) * (sum(y2nj_list) - size_selection * my2 ** 2)) print(f'Дисперсия y группированной выборки:\n{s2y2}') double_sum = 0 for i in range(len(zi_x)): for j in range(len(zi_y)): double_sum += n_table[i][j]*zi_x[i]*zi_y[j] Kxy2 = round2((1 / (size_selection - 1)) * ((double_sum - size_selection * mx2 * my2))) print(f'Ковариация группированной выборки:\n{Kxy2}') pxy2 = round2(Kxy2/(np.sqrt(s2x2)*np.sqrt(s2y2))) print(f'Коэффициент корреляции исходной выборки:\n{pxy2}\n') alfa = 0.05 u = round2(norm.ppf(1 - alfa/2)) p_left = np.tanh(0.5 * np.log((1+pxy1)/(1-pxy1)) - u / np.sqrt(size_selection - 3) - pxy1 / (2 * (size_selection - 1))) p_right = np.tanh(0.5 * np.log((1+pxy1)/(1-pxy1)) + u / np.sqrt(size_selection - 3) - pxy1 / (2 * (size_selection - 1))) p_interval = [round2(p_left), round2(p_right)] print(f'Доверительный интервал для коэффициента корреляции:\n{p_interval}') #x_selection_sort = sorted(x_selection) x_selection_sort = np.linspace(5, 20, 1000) yx = [my1 + pxy1*(i - mx1)*(np.sqrt(s2y1)/np.sqrt(s2x1)) for i in x_selection_sort] #y_selection_sort = sorted(y_selection) y_selection_sort = np.linspace(0, 16, 1000) xy = [mx1 + pxy1*(i - my1)*(np.sqrt(s2x1)/np.sqrt(s2y1)) for i in y_selection_sort] plt.plot(x_selection_sort, yx, "-", color = 'black') plt.plot(xy, y_selection_sort, "-", color = 'black') plt.plot(mx1, my1, "o", color = 'red', markersize = 6) plt.text(6, 15.5, '1', fontsize = 16, weight = 'bold') plt.text(5, 12.5, '2', fontsize = 16, weight = 'bold') Qr = round2(((size_selection - 1) * Kxy1 ** 2) / s2x1) print(f'\nСумма квадратов, обусловленная регрессией:\n{Qr}') Qy = round2(sum([i**2 for i in y_selection]) - size_selection * my1 ** 2) print(f'Qy:\n{Qy}') yx_e = [my1 + pxy1*(i - mx1)*(np.sqrt(s2y1)/np.sqrt(s2x1)) for i in x_selection] Qe = round2(sum([(y_selection[i] - yx_e[i])**2 for i in range(len(y_selection))])) print(f'Остаточная сумма квадратов:\n{Qe}') s2 = round2(Qe / (size_selection - 2)) print(f'Оценка дисперсии ошибок наблюдений:\n{s2}') R2 = round2(Qr/Qy) print(f'Коэффициент детерминации:\n{R2}\n') x = sp.symbols('x') y_x = my1 + pxy1*np.sqrt(s2y1)*(x-mx1)/np.sqrt(s2x1) b = round2(y_x.subs(x, 0)) a = round2(y_x.diff(x)) t_ = t.ppf(1 - alfa / 2, size_selection - 2) a_left = a - t_*np.sqrt(s2/((size_selection-1)*s2x1)) a_right = a + t_*np.sqrt(s2/((size_selection-1)*s2x1)) a_interval = [round2(a_left), round2(a_right)] print(f'Доверительный интервал для параметра a:\n{a_interval}') b_left = b - t_*np.sqrt((s2*sum([i**2 for i in x_selection]))/(size_selection*(size_selection-1)*s2x1)) b_right = b + t_*np.sqrt((s2*sum([i**2 for i in x_selection]))/(size_selection*(size_selection-1)*s2x1)) b_interval = [round2(b_left), round2(b_right)] print(f'Доверительный интервал для параметра b:\n{b_interval}') chi2_1 = chi2.ppf(1 - alfa / 2, size_selection - 2) chi2_2 = chi2.ppf(alfa / 2, size_selection - 2) dx_left = ((size_selection - 2)*s2)/chi2_1 dx_right = ((size_selection - 2)*s2)/chi2_2 dx_interval = [round2(dx_left), round2(dx_right)] print(f'Доверительный интервал для дисперсии ошибок наблюдений:\n{dx_interval}') plt.plot(x_selection, y_selection, "o", color = 'black', markersize = 4) plt.xticks(np.arange(min(x_selection) - 0.97, max(x_selection) + 2, 2)) plt.yticks(np.arange(min(y_selection) - 0.4, max(y_selection) + 2, 2)) plt.title("Диаграмма рассеивания с нанесённой на неё сеткой для группировки данных " "и графики уравнений выборочных линейных регрессий: 1 – Y на x; 2 – X на y") plt.xlabel('x') plt.ylabel('y') plt.grid() #plt.show()

Выборка:

[[11.16, 9.86], [14.93, 4.78], [18.09, 1.07], [13.17, 6.27], [16.75, 2.25], [15.9, 3.25], [17.35, 0.4], [13.94, 5.31], [11.07, 7.62], [17.08, 2.2], [10.13, 9.1], [10.29, 9.27], [13.05, 8.84], [11.11, 10.06], [13.33, 6.94], [12.75, 2.21], [17.6, 2.9], [13.06, 3.21], [13.52, 6.82], [16.44, 1.78], [12.22, 9.27], [19.41, 1.32], [12.92, 5.45], [10.25, 12.83], [14.2, 5.33], [6.86, 12.08], [8.38, 10.44], [14.72, 5.74], [14.74, 8.05], [11.19, 8.36], [14.05, 5.55], [14.55, 7.96], [14.59, 1.25], [12.7, 5.83], [8.72, 6.43], [10.6, 9.25], [12.77, 5.31], [16.42, 2.26], [10.37, 8.72], [17.56, 3.74], [8.18, 11.53], [12.96, 6.91], [12.67, 7.1], [8.88, 8.1], [9.8, 10.48], [5.97, 14.24], [18.84, 1.27], [13.27, 5.32], [7.71, 10.28], [12.35, 7.76]]

Таблица частот группированной двумерной выборки

[[0. 0. 0. 0. 0. 0. 1. 1.]

[0. 0. 0. 1. 1. 3. 0. 0.]

[0. 0. 0. 0. 4. 1. 1. 0.]

[0. 1. 3. 4. 3. 1. 0. 0.]

[1. 1. 6. 4. 2. 0. 0. 0.]

[1. 3. 0. 0. 0. 0. 0. 0.]

[3. 3. 0. 0. 0. 0. 0. 0.]

[1. 0. 0. 0. 0. 0. 0. 0.]]

Выборочное среднее x исходной выборки:

12.9714

Выборочное среднее y исходной выборки:

6.446

Дисперсия x исходной выборки:

10.1936

Дисперсия y исходной выборки:

11.7844

Ковариация исходной выборки:

-9.539

Ковариация исходной выборки (cov):

-9.539

Коэффициент корреляции исходной выборки:

-0.8703

Ковариация исходной выборки (corrcoef):

-0.8703

Выборочное среднее x группированной выборки:

12.88

Выборочное среднее y группированной выборки:

6.48

Дисперсия x группированной выборки:

10.9649

Дисперсия y группированной выборки:

12.7037

Ковариация группированной выборки:

-9.982

Коэффициент корреляции исходной выборки:

-0.8458

Доверительный интервал для коэффициента корреляции:

[-0.9234, -0.7777]

Сумма квадратов, обусловленная регрессией:

437.3954

Qy:

577.4364

Остаточная сумма квадратов:

140.0426

Оценка дисперсии ошибок наблюдений:

2.9176

Коэффициент детерминации:

0.7575

Доверительный интервал для параметра a:

[-1.0894, -0.7820]

Доверительный интервал для параметра b:

[16.5324, 20.6356]

Доверительный интервал для дисперсии ошибок наблюдений:

[2.029, 4.5536]

Соседние файлы в папке ЛР