Como realizar regressão logística usando modelos estatísticos
O módulo statsmodels do Python oferece uma variedade de funções e classes que permitem adaptar vários modelos estatísticos.
O exemplo passo a passo a seguir mostra como realizar regressão logística usando funções statsmodels.
Etapa 1: crie os dados
Primeiro, vamos criar um DataFrame do pandas que contém três variáveis:
- Horas estudadas (valor inteiro)
- Método de estudo (método A ou B)
- Resultado do exame (aprovado ou reprovado)
Ajustaremos um modelo de regressão logística usando horas estudadas e método de estudo para prever se um aluno passa ou não em determinado exame.
O código a seguir mostra como criar o DataFrame do pandas:
import pandas as pd #createDataFrame df = pd. DataFrame ({' result ': [0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1], ' hours ': [1, 2, 2, 2, 3, 2, 5, 4, 3, 6, 5, 8, 8, 7, 6, 7, 5, 4, 8, 9], ' method ': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'A', 'B', 'A', 'B', 'B', 'A', 'A', 'B', 'A', 'B', 'A']}) #view first five rows of DataFrame df. head () result hours method 0 0 1 A 1 1 2 A 2 0 2 A 3 0 2 B 4 0 3 B
Passo 2: Ajustar o modelo de regressão logística
A seguir, ajustaremos o modelo de regressão logística usando a função logit() :
import statsmodels. formula . api as smf
#fit logistic regression model
model = smf. logit (' result~hours+method ', data=df). fit ()
#view model summary
print ( model.summary ())
Optimization completed successfully.
Current function value: 0.557786
Iterations 5
Logit Regression Results
==================================================== ============================
Dept. Variable: result No. Observations: 20
Model: Logit Df Residuals: 17
Method: MLE Df Model: 2
Date: Mon, 22 Aug 2022 Pseudo R-squ.: 0.1894
Time: 09:53:35 Log-Likelihood: -11.156
converged: True LL-Null: -13.763
Covariance Type: nonrobust LLR p-value: 0.07375
==================================================== ============================
coef std err z P>|z| [0.025 0.975]
-------------------------------------------------- -----------------------------
Intercept -2.1569 1.416 -1.523 0.128 -4.932 0.618
method[TB] 0.0875 1.051 0.083 0.934 -1.973 2.148
hours 0.4909 0.245 2.002 0.045 0.010 0.972
==================================================== ============================
Os valores na coluna coef do resultado nos indicam a variação média no log de chances de passar no exame.
Por exemplo:
- O uso do método de estudo B está associado a um aumento médio de 0,0875 no log de chances de aprovação no exame em comparação ao uso do método de estudo A.
- Cada hora adicional estudada está associada a um aumento médio de 0,4909 no log de chances de aprovação no exame.
Os valores em P>|z| A coluna representa os valores p de cada coeficiente.
Por exemplo:
- O método de estudo possui valor p de 0,934 . Como esse valor não é inferior a 0,05, significa que não existe relação estatisticamente significativa entre as horas cursadas e a aprovação ou não do aluno no exame.
- As horas estudadas possuem valor p de 0,045 . Como esse valor é inferior a 0,05, significa que existe uma relação estatisticamente significativa entre as horas estudadas e a aprovação ou reprovação do aluno no exame.
Etapa 3: avaliar o desempenho do modelo
Para avaliar a qualidade do modelo de regressão logística, podemos observar duas métricas no resultado:
1. Apelido R-quadrado
Este valor pode ser considerado um substituto do valor R-quadrado para um modelo de regressão linear.
É calculado como a razão entre a função de log-verossimilhança maximizada do modelo nulo para o modelo completo.
Este valor pode variar de 0 a 1, sendo que valores mais altos indicam melhor ajuste do modelo.
Neste exemplo, o valor do pseudo R ao quadrado é 0,1894 , o que é bastante baixo. Isso nos diz que as variáveis preditoras do modelo não estão fazendo um trabalho muito bom ao prever o valor da variável resposta.
2. Valor p do LLR
Este valor pode ser considerado um substituto do valor p do valor F geral de um modelo de regressão linear.
Se este valor estiver abaixo de um determinado limite (por exemplo α = 0,05), podemos então concluir que o modelo como um todo é “útil” e pode prever melhor os valores da variável resposta em comparação com um modelo sem variáveis preditivas.
Neste exemplo, o valor p do LLR é 0,07375 . Dependendo do nível de significância que escolhermos (por exemplo, 0,01, 0,05, 0,1), podemos ou não concluir que o modelo como um todo é útil.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em Python:
Como realizar regressão linear em Python
Como realizar regressão logarítmica em Python
Como realizar regressão quantílica em Python