Como realizar regressão de mínimos quadrados ponderados em python
Uma das principais suposições da regressão linear é que os resíduos são distribuídos com variância igual em cada nível da variável preditora. Essa suposição é conhecida como homocedasticidade .
Quando esta suposição não é respeitada, diz-se que a heterocedasticidade está presente nos resíduos. Quando isso acontece, os resultados da regressão tornam-se não confiáveis.
Uma maneira de resolver esse problema é usar a regressão de mínimos quadrados ponderados , que atribui pesos às observações de forma que aquelas com baixa variância de erro recebam mais peso porque contêm mais informações em comparação com observações com maior variância de erro.
Este tutorial fornece um exemplo passo a passo de como realizar regressão de mínimos quadrados ponderados em Python.
Etapa 1: crie os dados
Primeiro, vamos criar o seguinte DataFrame do pandas que contém informações sobre o número de horas estudadas e a nota do exame final para 16 alunos de uma turma:
import pandas as pd #createDataFrame df = pd. DataFrame ({' hours ': [1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8], ' score ': [48, 78, 72, 70, 66, 92, 93, 75, 75, 80, 95, 97, 90, 96, 99, 99]}) #view first five rows of DataFrame print ( df.head ()) hours score 0 1 48 1 1 78 2 2 72 3 2 70 4 2 66
Etapa 2: Ajustar o modelo de regressão linear simples
A seguir, usaremos as funções do módulo statsmodels para ajustar um modelo de regressão linear simples usando horas como variável preditora e pontuação como variável de resposta:
import statsmodels.api as sm #define predictor and response variables y = df[' score '] X = df[' hours '] #add constant to predictor variables X = sm. add_constant (x) #fit linear regression model fit = sm. OLS (y,x). fit () #view model summary print ( fit.summary ()) OLS Regression Results ==================================================== ============================ Dept. Variable: R-squared score: 0.630 Model: OLS Adj. R-squared: 0.603 Method: Least Squares F-statistic: 23.80 Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.000244 Time: 11:19:54 Log-Likelihood: -57.184 No. Observations: 16 AIC: 118.4 Df Residuals: 14 BIC: 119.9 Model: 1 Covariance Type: non-robust ==================================================== ============================ coef std err t P>|t| [0.025 0.975] -------------------------------------------------- ---------------------------- const 60.4669 5.128 11.791 0.000 49.468 71.465 hours 5.5005 1.127 4.879 0.000 3.082 7.919 ==================================================== ============================ Omnibus: 0.041 Durbin-Watson: 1.910 Prob(Omnibus): 0.980 Jarque-Bera (JB): 0.268 Skew: -0.010 Prob(JB): 0.875 Kurtosis: 2.366 Cond. No. 10.5
No resumo do modelo, podemos ver que o valor R ao quadrado do modelo é 0,630 .
Relacionado: O que é um bom valor de R ao quadrado?
Etapa 3: Ajustar o modelo de mínimos quadrados ponderados
A seguir, podemos usar a função WLS() do statsmodels para realizar mínimos quadrados ponderados, definindo os pesos de forma que as observações com menor variância recebam mais peso:
#define weights to use
wt = 1/smf. ols (' fit.resid.abs() ~ fit.fittedvalues ', data=df). fit (). fitted values **2
#fit weighted least squares regression model
fit_wls = sm. WLS (y, X, weights=wt). fit ()
#view summary of weighted least squares regression model
print ( fit_wls.summary ())
WLS Regression Results
==================================================== ============================
Dept. Variable: R-squared score: 0.676
Model: WLS Adj. R-squared: 0.653
Method: Least Squares F-statistic: 29.24
Date: Mon, 31 Oct 2022 Prob (F-statistic): 9.24e-05
Time: 11:20:10 Log-Likelihood: -55.074
No. Comments: 16 AIC: 114.1
Df Residuals: 14 BIC: 115.7
Model: 1
Covariance Type: non-robust
==================================================== ============================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 63.9689 5.159 12.400 0.000 52.905 75.033
hours 4.7091 0.871 5.407 0.000 2.841 6.577
==================================================== ============================
Omnibus: 2,482 Durbin-Watson: 1,786
Prob(Omnibus): 0.289 Jarque-Bera (JB): 1.058
Skew: 0.029 Prob(JB): 0.589
Kurtosis: 1.742 Cond. No. 17.6
==================================================== ============================
A partir do resultado, podemos ver que o valor de R ao quadrado para este modelo de mínimos quadrados ponderados aumentou para 0,676 .
Isso indica que o modelo de mínimos quadrados ponderados é capaz de explicar mais a variância nas notas dos exames do que o modelo de regressão linear simples.
Isto nos diz que o modelo de mínimos quadrados ponderados fornece um melhor ajuste aos dados em comparação com o modelo de regressão linear simples.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em Python:
Como criar um gráfico residual em Python
Como criar um gráfico QQ em Python
Como testar a multicolinearidade em Python