mirosh111000

Прикладна_економетрика_ЛР№8_Мірошниченко

Nov 23rd, 2025
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.04 KB | None | 0 0
  1. import numpy as np
  2. import pandas as pd
  3.  
  4. def main():
  5.     Y = np.array([7.60, 3.50, 1.40, 3.90, 6.40, 7.30, 7.60, 8.30, 4.40, 5.60, 7.50, 3.20])
  6.     X1 = np.array([1.40, 0.70, 0.40, 0.80, 1.10, 1.40, 1.50, 0.90, 0.80, 0.70, 1.40, 0.60])
  7.     X2 = np.array([3.80, 1.70, 0.70, 1.80, 3.20, 3.60, 3.90, 4.10, 2.20, 2.90, 3.20, 1.70])
  8.    
  9.     n = len(Y)
  10.  
  11.     print("--- Вхідні дані ---")
  12.     print(pd.DataFrame({"Y": Y, "X1": X1, "X2": X2}, index=range(1, n+1)))
  13.     print("-" * 40)
  14.  
  15.     sum_x1 = np.sum(X1)
  16.     sum_x2 = np.sum(X2)
  17.     sum_y  = np.sum(Y)
  18.    
  19.     sum_x1_sq = np.sum(X1**2)
  20.     sum_x2_sq = np.sum(X2**2)
  21.     sum_x1_x2 = np.sum(X1 * X2)
  22.    
  23.     sum_y_x1 = np.sum(Y * X1)
  24.     sum_y_x2 = np.sum(Y * X2)
  25.  
  26.     A = np.array([
  27.         [n,       sum_x1,    sum_x2],
  28.         [sum_x1,  sum_x1_sq, sum_x1_x2],
  29.         [sum_x2,  sum_x1_x2, sum_x2_sq]
  30.     ])
  31.  
  32.     B = np.array([sum_y, sum_y_x1, sum_y_x2])
  33.  
  34.     coeffs = np.linalg.solve(A, B)
  35.     a0, a1, a2 = coeffs
  36.  
  37.     print(f"\n--- 1. Оцінки параметрів моделі (МНК) ---")
  38.     print(f"Рівняння регресії: Y = {a0:.4f} + {a1:.4f}*X1 + {a2:.4f}*X2")
  39.     print(f"a0 = {a0:.4f}")
  40.     print(f"a1 = {a1:.4f}")
  41.     print(f"a2 = {a2:.4f}")
  42.  
  43.     def manual_pearson(x, y):
  44.         mean_x = np.mean(x)
  45.         mean_y = np.mean(y)
  46.         numerator = np.sum((x - mean_x) * (y - mean_y))
  47.         denominator = np.sqrt(np.sum((x - mean_x)**2) * np.sum((y - mean_y)**2))
  48.         return numerator / denominator
  49.  
  50.     r_y_x1 = manual_pearson(Y, X1)
  51.     r_y_x2 = manual_pearson(Y, X2)
  52.     r_x1_x2 = manual_pearson(X1, X2)
  53.  
  54.     print(f"\n--- 2. Кореляційний аналіз ---")
  55.     print(f"Парні коефіцієнти кореляції:")
  56.     print(f"r(Y, X1)  = {r_y_x1:.4f}")
  57.     print(f"r(Y, X2)  = {r_y_x2:.4f}")
  58.     print(f"r(X1, X2) = {r_x1_x2:.4f}")
  59.  
  60.     numerator_1 = r_y_x1 - r_y_x2 * r_x1_x2
  61.     denominator_1 = np.sqrt((1 - r_y_x2**2) * (1 - r_x1_x2**2))
  62.     r_y_x1_part = numerator_1 / denominator_1
  63.  
  64.     numerator_2 = r_y_x2 - r_y_x1 * r_x1_x2
  65.     denominator_2 = np.sqrt((1 - r_y_x1**2) * (1 - r_x1_x2**2))
  66.     r_y_x2_part = numerator_2 / denominator_2
  67.  
  68.     print(f"\nЧасткові коефіцієнти кореляції:")
  69.     print(f"r(Y, X1 | X2) = {r_y_x1_part:.4f}")
  70.     print(f"r(Y, X2 | X1) = {r_y_x2_part:.4f}")
  71.  
  72.     R2_numerator = r_y_x1**2 + r_y_x2**2 - 2 * r_y_x1 * r_y_x2 * r_x1_x2
  73.     R2_denominator = 1 - r_x1_x2**2
  74.     R2 = R2_numerator / R2_denominator
  75.    
  76.     R = np.sqrt(R2)
  77.  
  78.     print(f"\n--- 3. Показники якості моделі ---")
  79.     print(f"Коефіцієнт множинної детермінації (R^2): {R2:.4f}")
  80.     print(f"Коефіцієнт множинної кореляції (R): {R:.4f}")
  81.  
  82.     print(f"\n--- 4. Аналіз результатів ---")
  83.  
  84.     def analyze(simple_r, partial_r, var_name, control_var):
  85.         print(f"\nАналіз зв'язку Y <-> {var_name} (при фіксованому {control_var}):")
  86.         print(f"  Парний r: {simple_r:.4f}")
  87.         print(f"  Частковий r: {partial_r:.4f}")
  88.        
  89.         diff = abs(partial_r) - abs(simple_r)
  90.        
  91.         if diff > 0.01:
  92.             print(f"  > Часткова кореляція ЗРОСЛА (по модулю).")
  93.             print(f"  > Висновок: Фактор '{control_var}' приховував (маскував) істинну взаємозалежність.")
  94.         elif diff < -0.01:
  95.             print(f"  > Часткова кореляція ЗМЕНШИЛАСЯ (по модулю).")
  96.             print(f"  > Висновок: Взаємозалежність значною мірою мала місце завдяки фактору '{control_var}'.")
  97.         else:
  98.             print(f"  > Кореляція майже не змінилася.")
  99.  
  100.     analyze(r_y_x1, r_y_x1_part, "X1 (Площа)", "X2 (Потік)")
  101.     analyze(r_y_x2, r_y_x2_part, "X2 (Потік)", "X1 (Площа)")
  102.  
  103. if __name__ == "__main__":
  104.     main()
  105.  
Advertisement
Add Comment
Please, Sign In to add comment