33  Matplotlib - regresja

W poniższej części omówiony jest przykład działania regresji wielomianowej. Inne rodzaje regresji można zmienić wybierając inną komendę do jej generowania.

Regresja - metoda statystyczna pozwalająca na badanie związku pomiędzy wielkościami danych. Celem regresji wielowymiarowej jest ilościowe ujęcie związków pomiędzy wieloma zmiennymi niezależnymi (objaśniającymi, czynnikami, predyktorami) a zmienną zależną (kryterialną, objaśnianą, odpowiedzią).

Przykłady regresji wielowymiarowej:

W ujęcie “naukowym”, badania statystyczne mają w ogólności wyjaśniać zależności pomiędzy różnymi cechami badanej populacji.

Cele badań w analizie regresji:

Uzyskiwane wyniki należy zweryfikować pod kątem następujących kryteriów:

Najczęściej stosowane funkcje w analizie regresji:

Wybór metody współzależności wielu zmiennych:

Metoda analizy Zmienna objaśniana Zmienne objaśniające
Regresja wieloraka ciągła ciągłe (dopuszcza się także dyskretne)
Analiza wariancji ciągła jakościowe
Analiza kowariancji ciągła jakościowe (symboliczne) i ciągłe
Regresja Poissona dyskretna różne typy
Regresja logistyczna dwuwartościowa różne typy

Zastosowania:

Rozważamy wpływ zbioru \(k\) zmiennych \(X_1, \ldots, X_k\) na zmienną \(Y\). Należy wprowadzić do modelu jak największą liczbę zmiennych niezależnych oraz powinny się w nim znaleźć zmienne silnie skorelowane ze zmienną zależną i jednocześnie jak najsłabiej skorelowane między sobą.

Liniowy model regresji wielowymiarowej:

\[Y=\beta_0 +\beta_1\cdot X_1+\beta_2\cdot X_2+\ldots+\beta_k\cdot X_k+\varepsilon.\] \(\beta_i\) - współczynniki regresji (parametry modelu) opisujące wpływ \(i\)-tej zmiennej. \(\varepsilon\) - składnik losowy.

import numpy as np

# Przykładowe dane
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([2.1, 2.9, 4.2, 6.1, 8.1, 9.9])

# Dopasowanie linii prostoliniowej (stopień 1) z pełnymi wynikami
coefs, stats = np.polynomial.polynomial.polyfit(x, y, deg=1, full=True)

# Wyświetlenie wyników
print("Współczynniki dopasowania:", coefs)
print("\nInformacje diagnostyczne:")
print("Reszty:", stats[0])  # Suma kwadratów reszt
print("Ranga macierzy układu:", stats[1])
print("Wartości osobliwe macierzy układu:", stats[2])
print("Przewidywany błąd dopasowania:", stats[3])
Współczynniki dopasowania: [1.51428571 1.61428571]

Informacje diagnostyczne:
Reszty: [0.87142857]
Ranga macierzy układu: 2
Wartości osobliwe macierzy układu: [1.35119311 0.41746518]
Przewidywany błąd dopasowania: 1.3322676295501878e-15
import numpy as np
import matplotlib.pyplot as plt

# Przykładowe dane
np.random.seed(42)  # Ustawienie ziarna losowego dla powtarzalności wyników
x = np.linspace(0, 10, 20)  # 20 równomiernie rozłożonych punktów między 0 a 10
y = 3 * x + 7 + np.random.normal(0, 3, len(x))  # Dane y z losowym szumem

# Dopasowanie linii prostoliniowej (regresja liniowa)
coefs = np.polynomial.polynomial.polyfit(x, y, deg=1)  # Współczynniki regresji (y = a + b*x)

# Wyznaczenie linii regresji
x_fit = np.linspace(min(x), max(x), 100)  # Dodatkowe punkty dla gładkiej linii regresji
y_fit = coefs[0] + coefs[1] * x_fit

# Tworzenie wykresu
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='Punkty danych', alpha=0.7)  # Wykres punktowy
plt.plot(x_fit, y_fit, color='red', label=f'Prosta regresji')  # Prosta regresji

# Dostosowanie wyglądu wykresu
plt.title('Regresja liniowa przy użyciu numpy.polyfit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()

# Wyświetlenie wykresu
plt.show()

import numpy as np
import matplotlib.pyplot as plt

# Przykładowe dane
x = np.array([-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10])  # Punkty x
y = np.array([100, 88, 36, 16, 7, -3, 4, 16, 36, 52, 100])   # Punkty y z losowym szumem (większe rozproszenie)

# Dopasowanie krzywej stopnia drugiego
coefs = np.polynomial.polynomial.polyfit(x, y, deg=2)  # Współczynniki regresji (y = a + b*x + c*x^2)

# Wyznaczenie krzywej regresji
x_fit = np.linspace(min(x), max(x), 100)  # Dodatkowe punkty dla gładkiej krzywej regresji
y_fit = coefs[0] + coefs[1] * x_fit + coefs[2] * x_fit**2

# Tworzenie wykresu
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='Punkty danych', alpha=0.7)  # Wykres punktowy
plt.plot(x_fit, y_fit, color='red', label=f'Krzywa regresji')  # Krzywa regresji

# Dostosowanie wyglądu wykresu
plt.title('Regresja kwadratowa przy użyciu numpy.polyfit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()

# Wyświetlenie wykresu
plt.show()