Regressão Múltipla em Python
-
Use o módulo
statsmodel.api
para realizar regressão linear múltipla em Python -
Use o
numpy.linalg.lstsq
para realizar a regressão linear múltipla em Python -
Use o método
scipy.curve_fit()
para realizar regressão linear múltipla em Python
Este tutorial discutirá a regressão linear múltipla e como implementá-la em Python.
A regressão linear múltipla é um modelo que calcula a relação entre duas ou mais de duas variáveis e uma única variável de resposta ajustando uma equação de regressão linear entre elas. Ajuda a estimar a dependência ou a mudança entre as variáveis dependentes para a mudança nas variáveis independentes. Na regressão linear múltipla padrão, todas as variáveis independentes são consideradas simultaneamente.
Use o módulo statsmodel.api
para realizar regressão linear múltipla em Python
O módulo statsmodel.api
em Python está equipado com funções para implementar regressão linear. Usaremos a função OLS()
, que realiza a regressão de mínimos quadrados ordinária.
Podemos importar um conjunto de dados usando o módulo pandas
ou criar nossos próprios dados fictícios para realizar a regressão múltipla. Nós bifurcamos as variáveis dependentes e independentes para aplicar o modelo de regressão linear entre essas variáveis.
Criamos um modelo de regressão usando a função OLS()
. Em seguida, passamos as variáveis independentes e dependentes nesta função e ajustamos este modelo usando a função fit()
. Em nosso exemplo, criamos alguns arrays para demonstrar a regressão múltipla.
Veja o código abaixo.
import statsmodels.api as sm
import numpy as np
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
def reg_m(y, x):
ones = np.ones(len(x[0]))
X = sm.add_constant(np.column_stack((x[0], ones)))
for ele in x[1:]:
X = sm.add_constant(np.column_stack((ele, X)))
results = sm.OLS(y, X).fit()
return results
print(reg_m(y, x).summary())
Resultado:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.241
Model: OLS Adj. R-squared: 0.121
Method: Least Squares F-statistic: 2.007
Date: Wed, 16 Jun 2021 Prob (F-statistic): 0.147
Time: 23:57:15 Log-Likelihood: -40.810
No. Observations: 23 AIC: 89.62
Df Residuals: 19 BIC: 94.16
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 -0.0287 0.135 -0.213 0.834 -0.311 0.254
x2 0.2684 0.160 1.678 0.110 -0.066 0.603
x3 0.1339 0.160 0.839 0.412 -0.200 0.468
const 1.5123 0.986 1.534 0.142 -0.551 3.576
==============================================================================
Omnibus: 9.472 Durbin-Watson: 2.447
Prob(Omnibus): 0.009 Jarque-Bera (JB): 7.246
Skew: -1.153 Prob(JB): 0.0267
Kurtosis: 4.497 Cond. No. 29.7
==============================================================================
A função summary()
permite-nos imprimir os resultados e coeficientes da regressão. O R-Squared
e o Adjusted R-Squared
falam-nos sobre a eficiência da regressão.
Use o numpy.linalg.lstsq
para realizar a regressão linear múltipla em Python
O método numpy.linalg.lstsq
retorna a solução de mínimos quadrados para uma equação fornecida resolvendo a equação como Ax=B
calculando o vetor x para minimizar o ||B-Ax||
normal.
Podemos usá-lo para realizar a regressão múltipla, conforme mostrado abaixo.
import numpy as np
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
X = np.transpose(X) # transpose so input vectors
X = np.c_[X, np.ones(X.shape[0])] # add bias term
linreg = np.linalg.lstsq(X, y, rcond=None)[0]
print(linreg)
Resultado:
[ 0.1338682 0.26840334 -0.02874936 1.5122571 ]
Podemos comparar os coeficientes de cada variável com o método anterior e notar que o resultado é o mesmo. Aqui, o resultado final está em um array NumPy
.
Use o método scipy.curve_fit()
para realizar regressão linear múltipla em Python
Este modelo usa uma função que é usada posteriormente para calcular um modelo para alguns valores, e o resultado é usado com mínimos quadrados não lineares para ajustar essa função aos dados fornecidos.
Veja o código abaixo.
from scipy.optimize import curve_fit
import scipy
import numpy as np
def function_calc(x, a, b, c):
return a + b * x[0] + c * x[1]
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
popt, pcov = curve_fit(function_calc, x, y)
print(popt)
print(pcov)
Resultado:
[1.44920591 0.12720273 0.26001833]
[[ 0.84226681 -0.06637804 -0.06977243]
[-0.06637804 0.02333829 -0.01058201]
[-0.06977243 -0.01058201 0.02288467]]