Advertisement
mirosh111000

Мат_Стат_Мірошниченко_СР№3

Nov 29th, 2024
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.66 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from scipy.stats import t
  5. from IPython.display import Latex
  6.  
  7.  
  8.  
  9. def f(x):
  10.     return round(k*x + b, 4)
  11.  
  12. def f_1(x):
  13.     return k*x + b
  14.  
  15. def delta(x, t_gamma):
  16.     return ( (t_gamma*S_y)/np.sqrt(valid_n) ) * np.sqrt(1 + (x - x_mean)**2 / dispersion_y)
  17.  
  18. def grafik(df, x_min, x_max):
  19.  
  20.     df_x = df[df.columns[0]]
  21.     df_y = df[df.columns[1]]
  22.     x = np.linspace(x_min, x_max, 20)
  23.     y = f_1(x)
  24.     delta_y = delta(x, t_gamma)
  25.     delta_y_top = y + delta_y
  26.     delta_y_bottom = y - delta_y
  27.     plt.title(f"Надійність = {gamma*100}%")
  28.     plt.xlabel("x")
  29.     plt.ylabel("y")
  30.     plt.grid()
  31.     plt.plot(df_x, df_y, 'ro', label='Точки')
  32.     plt.plot(x, y, label='Лінійна регресія')
  33.     plt.plot(x, delta_y_top, '--', color='green', label='Інтервал довіри')
  34.     plt.plot(x, delta_y_bottom, '--', color='green')
  35.     plt.fill_between(x, delta_y_top, delta_y_bottom, color='green', alpha=0.1)
  36.     plt.legend()
  37.     plt.show()
  38.  
  39.  
  40. data = {
  41.     "Номер району": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
  42.     "Збір овочів з 1га (ц)": [52.8, 72.6, 50.4, 33.4, 31.5, 54.6, 54.3, 36.6, 15.6, 73.2, 65.9, 44.6, 23.7, 64.6, 25.6],
  43.     "Рівень збитковості (%)": [31.4, 30.9, 37.1, 45.7, 57.7, 46.7, 33.3, 63.8, 68.8, 29.8, 39.4, 46.2, 68.8, 34.0, 47.6]}
  44.  
  45. df = pd.DataFrame(data)
  46. df.set_index('Номер району', inplace=True)
  47. print(df, '\n')
  48.  
  49.  
  50. valid_n = len(df)
  51. sum_x = round(df[df.columns[0]].sum(), 1)
  52. sum_y = round(df[df.columns[1]].sum(), 1)
  53. sum_xx = (df[df.columns[0]] ** 2).sum()
  54. sum_yy = (df[df.columns[1]] ** 2).sum()
  55. sum_xy = round((df[df.columns[0]] * df[df.columns[1]]).sum(), 3)
  56. x_mean = round(df[df.columns[0]].mean(), 3)
  57. y_mean = round(df[df.columns[1]].mean(), 3)
  58. min_x = df[df.columns[0]].min()
  59. max_x = df[df.columns[0]].max()
  60. dispersion_x = round(sum_xx / valid_n - x_mean**2, 3)
  61. dispersion_y = round(sum_yy / valid_n - y_mean**2, 3)
  62.  
  63.  
  64.  
  65. table_1 = pd.DataFrame(data=[valid_n, min_x, max_x, sum_x, sum_y, sum_xx, sum_yy, sum_xy, x_mean, y_mean, dispersion_x, dispersion_y],
  66.                        index=['Valid N','min X', 'max X', 'sum X', 'sum Y', 'sum X^2', 'sum Y^2', 'sum X*Y', 'X mean', 'Y mean', 'D_x', 'D_y'], columns=['Значення'])
  67. print(table_1, '\n')
  68.  
  69. k = round((sum_xy/valid_n - x_mean*y_mean) / dispersion_x, 4)
  70. b = round(y_mean - k * x_mean, 4)
  71. display(Latex(f'Знайдемо коефіцієнти рівняння лінійной регресії:\n'))
  72. display(Latex(fr'$k = \frac{{ (\frac{{ sum_{{xy}} }}{{ valid_n }} - x_{{mean}} \cdot y_{{mean}} ) }}{{ dispersion_x }} = '
  73.               fr'\frac{{ (\frac{{{sum_xy}}}{{{ valid_n }}} - {x_mean} \cdot {y_mean} ) }}{{{dispersion_x }}} = {k}$'))
  74. display(Latex(f'$b = y_{{mean}} - k \cdot x_{{mean}} = {y_mean} - {k} \cdot {x_mean} = {b}$'))
  75.  
  76.  
  77. r = round(k * np.sqrt(dispersion_x / dispersion_y), 4)
  78. display(Latex(f'\nЗнайдемо коефіцієнт кореляції:\n'))
  79. display(Latex(fr'$r = k \cdot \sqrt{{ \frac{{ dispersion_x }}{{ dispersion_y }} }} = {k} \cdot \sqrt{{ \frac{{{dispersion_x}}}{{{dispersion_y}}} }}= {r}$'))
  80. if abs(r) < 0.6:
  81.     riven = 'низьким'
  82.     display(Latex("Тіснота лінійного зв'язку слабка $(|r| < 0.6)$"))
  83. if abs(r) >= 0.6 and abs(r) <= 0.9:
  84.     riven = 'середнім'
  85.     display(Latex(fr"Тіснота лінійного зв'язку середня $(0.6 \leqslant |r| \leqslant 0.9)$"))
  86. if abs(r) > 0.9:
  87.     riven = 'високим'
  88.     display(Latex("Тіснота лінійного зв'язку сильна $(|r| > 0.9)$"))
  89. display(Latex(f"Тоді, застосовуючи отриманий результат, можна зробити висновок: між факторами $x$ і $y$ спострігається лінійний"))
  90. display(Latex(f"звя'зок з {riven} рівнем тісноти.\n"))
  91.  
  92. y_x_min = f(min_x)
  93. y_x_mean = f(x_mean)
  94. y_x_max = f(max_x)
  95. display(Latex(f'Зробимо передбачення в заданих точках, вважаючи цими точками найменьше, середнє і найбільше значення $x$.\n'))
  96. display(Latex(f'$y(x) = k \cdot x + b$'))
  97. display(Latex(f'$y(x_{{min}}) = y({min_x}) = {k} \cdot {min_x} + {b} = {y_x_min}$'))
  98. display(Latex(f'$y(x_{{mean}}) = y({x_mean}) = {k} \cdot {x_mean} + {b} = {y_x_mean}$'))
  99. display(Latex(f'$y(x_{{max}}) = y({max_x}) = {k} \cdot {max_x} + {b} = {y_x_max}$'))
  100.  
  101. hope = [0.80, 0.95, 0.99, 0.999]
  102. for i in hope:
  103.  
  104.     display(Latex(f'Знайдемо інтревали довіри в заданих точках з надійністю ${i}$:\n'))
  105.     gamma = i
  106.     S_y = round(np.sqrt(valid_n/(valid_n-1) * dispersion_y), 4)
  107.     t_gamma = round(t.ppf((1+gamma)/2, valid_n-1), 4)
  108.     delta_x_min = delta(min_x, t_gamma)
  109.     delta_x_mean = delta(x_mean, t_gamma)
  110.     delta_x_max = delta(max_x, t_gamma)
  111.     display(Latex(fr'$S_y = \sqrt{{ \frac{{valid N}}{{(valid N - 1)}} \cdot dispersion_y}} = \sqrt{{ \frac{{{valid_n}}}{{({valid_n} - 1)}} \cdot {dispersion_y}}} = {S_y}$'))
  112.     display(Latex(f'Ширина інтервалу довіри:'))
  113.     display(Latex(fr'$delta(x) = \frac{{t_{{gamma}} \cdot S_y}}{{\sqrt{{valid N}}}} \cdot \sqrt{{1 + \frac{{ (x - x_{{mean}})^2}}{{ dispersion_y }} }}$'))
  114.  
  115.     display(Latex(fr'$delta(x_{{min}}) = delta({min_x}) = \frac{{ {t_gamma} \cdot {S_y} }}{{ \sqrt{{{valid_n}}} }} \cdot \sqrt{{1 + \frac{{({min_x} - {x_mean})^2}}{{{dispersion_y}}} }} = {round(delta_x_min, 4)}$'))
  116.     display(Latex(fr'$delta(x_{{mean}}) = delta({x_mean}) = \frac{{ {t_gamma} \cdot {S_y} }}{{ \sqrt{{{valid_n}}} }} \cdot \sqrt{{1 + \frac{{({x_mean} - {x_mean})^2}}{{{dispersion_y}}} }} = {round(delta_x_mean, 4)}$'))
  117.     display(Latex(fr'$delta(x_{{max}}) = delta({max_x}) = \frac{{ {t_gamma} \cdot {S_y} }}{{ \sqrt{{{valid_n}}} }} \cdot \sqrt{{1 + \frac{{({max_x} - {x_mean})^2}}{{{dispersion_y}}} }} = {round(delta_x_max, 4)}$'))
  118.  
  119.     display(Latex(f'Отже, отримаємо інтревали довіри для передбачень $y$ в заданих точках:\n'))
  120.  
  121.     display(Latex(fr'$y(x) - delta(x) \leqslant y \leqslant y(x) + delta(x)$'))
  122.  
  123.     display(Latex(fr'$x = {min_x}: \quad   {round(f(min_x) - delta_x_min, 4)} \leqslant y \leqslant {round(f(min_x) + delta_x_min, 4)}$'))
  124.     display(Latex(fr'$x = {x_mean}: \quad  {round(f(x_mean) - delta_x_mean, 4)} \leqslant y \leqslant {round(f(x_mean) + delta_x_mean, 4)}$'))
  125.     display(Latex(fr'$x = {max_x}: \quad  {round(f(max_x) - delta_x_max, 4)} \leqslant y \leqslant {round(f(max_x) + delta_x_max, 4)}$'))
  126.  
  127.     grafik(df, min_x, max_x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement