You are on page 1of 7

WIELORAKA REGRESJA LINIOWA

Wielokrotna regresja liniowa jest najczęstszą formą analizy regresji liniowej. W


analizie predykcyjnej regresja wielokrotna liniowa jest używana do
wyjaśnienia zależności między jedną ciągłą zmienną zależną a dwiema lub
większą liczbą zmiennych niezależnych. Zmienne niezależne mogą być ciągłe
lub kategoryczne (w razie potrzeby kodowane 0/1).

Założenia regresji liniowej:


 Reszty resztkowe muszą być normalnie rozmieszczone.
 Przyjęto liniową zależność między zmienną zależną i zmiennymi
niezależnymi.
 Resztki są homoscedastyczne.
 Zmienne niezależne nie są zbyt silnie skorelowane.

Zadaniem wielorakiej regresji liniowej jest dopasowanie pojedynczej linii


przez wykres rozproszenia. Dokładniej, regresja ta wpasowuje się do linii przez
wielowymiarową przestrzeń punktów danych. Najprostsza forma ma jedn ą
zależną i dwie niezależne zmienne. Zmienna zależna może być również
określana jako zmienna wynikowa lub regresja. Zmienne niezależne mogą być
również określane jako zmienne lub regresory predykcyjne.
Istnieją 3 główne zastosowania analizy regresji wielorakiej. Po pierwsze, mo że
być użyty do określenia siły wpływu, jaki zmienne niezależne mają na zmienną
zależną.
Po drugie, można ją wykorzystać do prognozowania efektów lub skutków
zmian. Oznacza to, że analiza regresji liniowej pomaga nam zrozumieć, jak
bardzo zmienna zależna zmieni się, gdy zmienimy zmienne niezależne. Na
przykład – o ile metrów ma wzrosnąć (lub zmniejszyć) metraż mieszkania dla
każdego zwiększenia o 1000PLN (lub zmniejszenia).
Po trzecie, analiza regresji liniowej wielu prognozuje trendy i przyszłe
wartości. Do oszacowania punktowego można wykorzystać analizę wielorakiej
regresji liniowej.
O prostej regresji liniowej pisaliśmy tu, a teraz wykorzystując podobne dane
obliczymy model dla wielorakiej regresji. Zamiast jednego predyktora mamy 4
– wiek, doświadczenie (lata w danej branży), miejsce zamieszkania (0-wie ś, 1-
miasto) oraz informacja czy jest to pierwsza praca (0-tak, 1-nie) a nasz ą
zmienną zależną jest wartość otrzymywanej pensji.
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols

import matplotlib.pyplot as plt


import seaborn as sns
%matplotlib inline
from pandas.core import datetools
np.warnings.filterwarnings("ignore")
np.warnings.resetwarnings()
data = pd.read_csv(r'D:\machinelearning/multi.csv'); data.head()
P
D
Z i
o
a e
s
m r
w
i w P
i
W e s e
a
i s z n
d
e z a s
c
k k _ j
z
a p a
e
n r
n
i a
i
e c
e
a

2
2 7
0 2 1 0
0 0
0

2
2 0
1 2 0 0
1 0
0

2
2 9
2 2 0 0
2 0
0

2
2 2
3 2 0 0
3 0
0

2
2 2
4 2 0 1
4 0
0

Zanim zabierzemy się do modelowania warto sprawdzić, czy pewne zało żenia
zostały spełnione. Sprawdźmy czy istnieje liniowa zależność między zmienną
zależną i zmiennymi niezależnymi.
sns.pairplot(data, x_vars=['Wiek', 'Doswiadczenie', 'Zamieszkanie',
'Pierwsza_praca'], y_vars=['Pensja'], kind="reg");

Na ilustracjach widać, że istnieje korelacja między wiekiem i doświadczeniem


a pensją ale między zamieszkaniem i pierwsza-praca już niekoniecznie. Łatwo
sprawdzić czy nasze zmienne są skorelowane ze sobą:
data.corr()

P
D
Z i
o
a e
s
m r
w
i w P
i
W e s e
a
i s z n
d
e z a s
c
k k _ j
z
a p a
e
n r
n
i a
i
e c
e
a

1 0 0 0 0
. . . . .
W 0 9 0 5 8
i 0 7 8 9 4
e 0 2 2 1 9
k 0 6 2 2 5
0 5 1 7 2
0 5 7 9 1

D
o
s
0 1 0 0 0
w
. . . . .
i
9 0 0 5 7
a
7 0 7 9 5
d
2 0 2 8 6
c
6 0 0 0 3
z
5 0 2 1 1
e
5 0 4 1 1
n
i
e
P
D
Z i
o
a e
s
m r
w
i w P
i
W e s e
a
i s z n
d
e z a s
c
k k _ j
z
a p a
e
n r
n
i a
i
e c
e
a

Z
a
m 0 0 1 0 0
i . . . . .
e 0 0 0 0 0
s 8 7 0 0 7
z 2 2 0 7 6
k 2 0 0 1 6
a 1 2 0 7 5
n 7 4 0 6 3
i
e

P
i
e
r 0 0 0 1 0
w . . . . .
s 5 5 0 0 4
z 9 9 0 0 9
a 1 8 7 0 0
_ 2 0 1 0 9
p 7 1 7 0 8
r 9 1 6 0 3
a
c
a

P 0 0 0 0 1
e . . . . .
P
D
Z i
o
a e
s
m r
w
i w P
i
W e s e
a
i s z n
d
e z a s
c
k k _ j
z
a p a
e
n r
n
i a
i
e c
e
a

8 7 0 4 0
n 4 5 7 9 0
s 9 6 6 0 0
j 5 3 6 9 0
a 2 1 5 8 0
1 1 3 3 0

Wiek i doświadczenie są silnie skorelowane ze sobą, czyli jeśli zależy nam na


redukcji wymiarów na tym etapie – jedną z tych zmiennych możemy usunąć.
My zachowamy wszystkie.
Wykorzystamy 2 metody: sklearn i statsmodels:
sklearn
from sklearn import linear_model
X = data[['Wiek','Doswiadczenie', 'Zamieszkanie', 'Pierwsza_praca']]
y = data['Pensja']

regr = linear_model.LinearRegression()
regr.fit(X, y)

print('Intercept:', regr.intercept_)
print('Coefficients:', regr.coef_)
Intercept: -1503.00460366
Coefficients: [ 187.21803777 -110.63636227 -5.08467927 68.58952348]
Mamy punkt przecięcia i współczynniki. Możemy użyć tych informacji do
zbudowania równania regresji liniowej w następujący sposób:
y = -1503 + 187.2(wiek) -110.6(doświadczenie) – 5.1(zamieszkanie) +
68.6(pierwsza_praca)

Mając nasze równanie/model możemy go użyć do predykcji pensji z nowymi


danymi, np:
wiek_a = 37
doswiadczenie_a = 8
zamieszkanie_a = 1
pierwsza_praca_a = 1
print ('Pensja 37 latka z 8 letnim doświadczeniem:',
regr.predict([[wiek_a ,doswiadczenie_a, zamieszkanie_a,
pierwsza_praca_a]]))
Pensja 37 latka z 8 letnim doświadczeniem: [ 4602.47673983]
statsmodels
Punkt przecięcia nie jest domyślnie włączony i powinien być dodany przez
użytkownika – czyli >> constant.
X = sm.add_constant(X)

model = sm.OLS(y, X).fit()


predictions = model.predict(X)

print_model = model.summary()
print(print_model)
OLS Regression Results
===========================================================================
===
Dep. Variable: Pensja R-squared:
0.813
Model: OLS Adj. R-squared:
0.806
Method: Least Squares F-statistic:
114.1
Date: Mon, 10 Sep 2018 Prob (F-statistic):
2.58e-37
Time: 21:05:57 Log-Likelihood: -
825.94
No. Observations: 110 AIC:
1662.
Df Residuals: 105 BIC:
1675.
Df Model: 4
Covariance Type: nonrobust
===========================================================================
=======
coef std err t P>|t| [0.025
0.975]
---------------------------------------------------------------------------
-------
const -1503.0046 471.145 -3.190 0.002 -2437.199 -
568.811
Wiek 187.2180 16.193 11.562 0.000 155.111
219.325
Doswiadczenie -110.6364 15.470 -7.152 0.000 -141.311
-79.962
Zamieszkanie -5.0847 88.700 -0.057 0.954 -180.960
170.791
Pierwsza_praca 68.5895 126.772 0.541 0.590 -182.776
319.955
===========================================================================
===
Omnibus: 0.654 Durbin-Watson:
2.030
Prob(Omnibus): 0.721 Jarque-Bera (JB):
0.780
Skew: 0.159 Prob(JB):
0.677
Kurtosis: 2.737 Cond. No.
562.
===========================================================================
===

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is
correctly specified.
Interpretacja modelu:
 Adj.R-squared – Skorygowane R-kwadrat odzwierciedla dopasowanie
modelu. Wartości kwadratów R wahają się od 0 do 1, gdzie wyższa
wartość oznacza ogólnie lepsze dopasowanie, przy założeniu
spełnienia określonych warunków. Tu wartość .86 czyli bardzo dobre
dopasowanie.

 Intercept – coef const – to twój punkt przecięcia z osią Y.

 Wskaźnik wieku, doswiadczenia, zamieszkania, pierwszej_pracy


reprezentuje zmianę w wyniku Y z powodu zmiany jednej jednostki w
stopie procentowej (wszystko inne utrzymywane na stałym poziomie)

 std err odzwierciedla poziom dokładności współczynników. Im jest


niższy, tym wyższy jest poziom dokładności

 P> | t | jest twoją wartością p. Wartość p mniejsza niż 0,05 jest


statystycznie istotna, czyli zamieszkanie i pierwsza_praca to zmienne
statystycznie nieistotne. Możemy usunąć zmienną z najwyższą
wartością i spróbować jeszcze raz z 3 zmiennymi. Jeśli jeszcze jakaś
zmienna ma wysokość wartość p, to ponownie usunąć ją – i tak aż do
momentu kiedy wartośći p naszych zmiennych będą mniejsze niż 0.05.

 Przedział ufności reprezentuje zakres, w którym nasze współczynniki


mogą spaść (z prawdopodobieństwem 95%)

You might also like