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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *