Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
import numpy as np import pandas as pd def main(): 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]) 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]) 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]) n = len(Y) print("--- Вхідні дані ---") print(pd.DataFrame({"Y": Y, "X1": X1, "X2": X2}, index=range(1, n+1))) print("-" * 40) sum_x1 = np.sum(X1) sum_x2 = np.sum(X2) sum_y = np.sum(Y) sum_x1_sq = np.sum(X1**2) sum_x2_sq = np.sum(X2**2) sum_x1_x2 = np.sum(X1 * X2) sum_y_x1 = np.sum(Y * X1) sum_y_x2 = np.sum(Y * X2) A = np.array([ [n, sum_x1, sum_x2], [sum_x1, sum_x1_sq, sum_x1_x2], [sum_x2, sum_x1_x2, sum_x2_sq] ]) B = np.array([sum_y, sum_y_x1, sum_y_x2]) coeffs = np.linalg.solve(A, B) a0, a1, a2 = coeffs print(f"\n--- 1. Оцінки параметрів моделі (МНК) ---") print(f"Рівняння регресії: Y = {a0:.4f} + {a1:.4f}*X1 + {a2:.4f}*X2") print(f"a0 = {a0:.4f}") print(f"a1 = {a1:.4f}") print(f"a2 = {a2:.4f}") def manual_pearson(x, y): mean_x = np.mean(x) mean_y = np.mean(y) numerator = np.sum((x - mean_x) * (y - mean_y)) denominator = np.sqrt(np.sum((x - mean_x)**2) * np.sum((y - mean_y)**2)) return numerator / denominator r_y_x1 = manual_pearson(Y, X1) r_y_x2 = manual_pearson(Y, X2) r_x1_x2 = manual_pearson(X1, X2) print(f"\n--- 2. Кореляційний аналіз ---") print(f"Парні коефіцієнти кореляції:") print(f"r(Y, X1) = {r_y_x1:.4f}") print(f"r(Y, X2) = {r_y_x2:.4f}") print(f"r(X1, X2) = {r_x1_x2:.4f}") numerator_1 = r_y_x1 - r_y_x2 * r_x1_x2 denominator_1 = np.sqrt((1 - r_y_x2**2) * (1 - r_x1_x2**2)) r_y_x1_part = numerator_1 / denominator_1 numerator_2 = r_y_x2 - r_y_x1 * r_x1_x2 denominator_2 = np.sqrt((1 - r_y_x1**2) * (1 - r_x1_x2**2)) r_y_x2_part = numerator_2 / denominator_2 print(f"\nЧасткові коефіцієнти кореляції:") print(f"r(Y, X1 | X2) = {r_y_x1_part:.4f}") print(f"r(Y, X2 | X1) = {r_y_x2_part:.4f}") R2_numerator = r_y_x1**2 + r_y_x2**2 - 2 * r_y_x1 * r_y_x2 * r_x1_x2 R2_denominator = 1 - r_x1_x2**2 R2 = R2_numerator / R2_denominator R = np.sqrt(R2) print(f"\n--- 3. Показники якості моделі ---") print(f"Коефіцієнт множинної детермінації (R^2): {R2:.4f}") print(f"Коефіцієнт множинної кореляції (R): {R:.4f}") print(f"\n--- 4. Аналіз результатів ---") def analyze(simple_r, partial_r, var_name, control_var): print(f"\nАналіз зв'язку Y <-> {var_name} (при фіксованому {control_var}):") print(f" Парний r: {simple_r:.4f}") print(f" Частковий r: {partial_r:.4f}") diff = abs(partial_r) - abs(simple_r) if diff > 0.01: print(f" > Часткова кореляція ЗРОСЛА (по модулю).") print(f" > Висновок: Фактор '{control_var}' приховував (маскував) істинну взаємозалежність.") elif diff < -0.01: print(f" > Часткова кореляція ЗМЕНШИЛАСЯ (по модулю).") print(f" > Висновок: Взаємозалежність значною мірою мала місце завдяки фактору '{control_var}'.") else: print(f" > Кореляція майже не змінилася.") analyze(r_y_x1, r_y_x1_part, "X1 (Площа)", "X2 (Потік)") analyze(r_y_x2, r_y_x2_part, "X2 (Потік)", "X1 (Площа)") if __name__ == "__main__": main()
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)