Está en la página 1de 9

14/3/24, 12:54 17.

Ejercicio-RegrecionLogistica - Jupyter Notebook

Ejercicios Clase de Regresion Logistica

Hecho por: Diego Landeta, Emily Abigail, Felipe Zuquillo, Micaela


Perez, Dominic Farfan, Esteban Cartagenova, Esteban Paredes

EJ1 ---
Se realizó un estudio intentando relacionar la propiedad de vivienda con el ingreso familiar.
Se seleccionaron veinte hogares y se estimó el ingreso familiar, junto con información sobre
la propiedad de la vivienda (y = 1 indica sí y y = 0 indica no). Los datos se muestran a
continuación.

𝐇𝐨𝐦𝐞 𝐎𝐰𝐧𝐞𝐫𝐬𝐡𝐢𝐩 𝐇𝐨𝐮𝐬𝐞𝐡𝐨𝐥𝐝 𝐈𝐧𝐜𝐨𝐦𝐞 𝐒𝐭𝐚𝐭𝐮𝐬


1 38,000 0
2 51,200 1
3 39,600 0
4 43,400 1
5 47,700 0
6 53,000 0
7 41,500 1
8 40,800 0
9 45,400 1
10 52,400 1
11 38,700 1
12 40,100 0
13 49,500 1
14 38,000 0
15 42,000 1
16 54,000 1
17 51,700 1
18 39,400 0
19 40,900 0
20 52,800 1
(a) Ajustar un modelo de regresión logística a la variable de respuesta y. Usar un modelo de
regresión lineal simple como estructura para el predictor lineal. (b) ¿Es adecuado el modelo
de regresión logística en la parte (a)? (c) Proporcionar una interpretación del parámetro𝛽1
en este modelo.

Literal a:

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 1/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

In [1]: # Importar las bibliotecas necesarias


import pandas as pd
import statsmodels.api as sm

# Crear datos de ejemplo
income = [38000, 51200, 39600, 43400, 47700, 53000, 41500, 40800, 45400, 52
status = [0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1]

# Crear un DataFrame con los datos
datos = pd.DataFrame({'income': income, 'status': status})

# Añadir una constante para el término de intersección
X = sm.add_constant(datos['income'])

# Crear y entrenar el modelo de regresión logística
modelo_logistico = sm.Logit(datos['status'], X)
resultado_modelo = modelo_logistico.fit()

# Imprimir la tabla ANOVA
print(resultado_modelo.summary())

# Imprimir la ecuación del modelo
coef_status, coef_income = resultado_modelo.params
ecuacion_modelo = f'P(Y=1) = 1 / (1 + e^(-({coef_status:.4f} + {coef_income
print(f'\nEcuación del modelo de regresión logística:\n{ecuacion_modelo}')

# Agregar una predicción para una persona de 42 años
nueva_data = sm.add_constant(pd.DataFrame({'income': [1, 42]}))
prediccion = resultado_modelo.predict(nueva_data)

print(f'\nProbabilidad: {prediccion.values[1]:.2%}')

C:\Users\SUPERTRONICA\AppData\Roaming\Python\Python39\site-packages\pandas
\core\computation\expressions.py:21: UserWarning: Pandas requires version
'2.8.4' or newer of 'numexpr' (version '2.8.3' currently installed).
from pandas.core.computation.check import NUMEXPR_INSTALLED
C:\Users\SUPERTRONICA\AppData\Roaming\Python\Python39\site-packages\pandas
\core\arrays\masked.py:60: UserWarning: Pandas requires version '1.3.6' or
newer of 'bottleneck' (version '1.3.5' currently installed).
from pandas.core import (
C:\Users\SUPERTRONICA\AppData\Local\Temp\ipykernel_10716\2110691586.py:2:
DeprecationWarning:
Pyarrow will become a required dependency of pandas in the next major rele
ase of pandas (pandas 3.0),
(to allow more performant data types, such as the Arrow string type, and b
etter interoperability with other libraries)
but was not found to be installed on your system.
If this would cause problems for you,
please provide us feedback at https://github.com/pandas-dev/pandas/issues/
54466 (https://github.com/pandas-dev/pandas/issues/54466)

import pandas as pd

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 2/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

Optimization terminated successfully.


Current function value: 0.560873
Iterations 6
Logit Regression Results
==========================================================================
====
Dep. Variable: status No. Observations:
20
Model: Logit Df Residuals:
18
Method: MLE Df Model:
1
Date: Thu, 14 Mar 2024 Pseudo R-squ.: 0.
1849
Time: 12:45:19 Log-Likelihood: -1
1.217
converged: True LL-Null: -1
3.763
Covariance Type: nonrobust LLR p-value: 0.0
2406
==========================================================================
====
coef std err z P>|z| [0.025 0.
975]
--------------------------------------------------------------------------
----
const -8.7395 4.439 -1.969 0.049 -17.441 -
0.038
income 0.0002 0.000 1.998 0.046 3.78e-06
0.000
==========================================================================
====

Ecuación del modelo de regresión logística:


P(Y=1) = 1 / (1 + e^(-(-8.7395 + 0.0002 * income)))

Probabilidad: 0.02%

Literal b:

𝛽0 = 0𝛽0 ≠ 0
𝛽1 = 0 𝛽1 ≠ 0
Nivel de confianza: 0.05

Para evaluar la adecuación del modelo se debe examinar el valor p asociado al coeficiente
de la variable "income". En este caso, el valor p es 0.046, que es menor que el umbral de
significancia comúnmente utilizado de 0.05. Por lo tanto, podemos concluir que la variable
"income" es estadísticamente significativa y que existe evidencia para sugerir que el
ingreso familiar tiene un efecto en la probabilidad de tener una propiedad de vivienda.

Literal c:

El coeficiente β1 muestra cómo el ingreso familiar influye en las probabilidades de ser


propietario de una vivienda. En este caso, un incremento de una unidad en el ingreso
familiar está asociado con un aumento del 0.02% en la probabilidad de tener una propiedad

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 3/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

de vivienda (status = 1), manteniendo todas las demás variables constantes en el modelo.
Debido a que el coeficiente es positivo, esto implica que a medida que el ingreso familiar se
incrementa, la probabilidad de tener una propiedad de vivienda también tiende a aumentar.

EJ2 --
La resistencia a la compresión de un sujetador de aleación utilizado en la construcción de
aeronaves está siendo estudiada. Se seleccionaron diez cargas en el rango de 2500 a
4300 psi y se probaron varios sujetadores en esas cargas. Se registraron los números de
sujetadores que fallaron en cada carga. Los datos completos de prueba siguen a
continuación.

𝐂𝐚𝐫𝐠𝐚, 𝐱 (𝐩𝐬𝐢) 𝐓𝐚𝐦𝐚ñ𝐨 𝐝𝐞 𝐥𝐚 𝐌𝐮𝐞𝐬𝐭𝐫𝐚, 𝐧 𝐍ú𝐦𝐞𝐫𝐨 𝐝𝐞 𝐅𝐚𝐥𝐥𝐚𝐬, 𝐫


2500 50 10
2700 70 17
2900 100 30
3100 60 21
3300 40 18
3500 85 43
3700 90 54
3900 50 33
4100 80 60
4300 65 51
(a) Ajusta un modelo de regresión logística a los datos. Usa un modelo de regresión lineal
simple como estructura para el predictor lineal.

(b) ¿Es adecuado el modelo de regresión logística en la parte (a)?

Literal a:

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 4/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

In [2]: # Importar las bibliotecas necesarias


import pandas as pd
import statsmodels.api as sm
import numpy as np

# Crear los datos de ejemplo
carga = [2500, 2700, 2900, 3100, 3300, 3500, 3700, 3900, 4100, 4300]
muestra = [50, 70, 100, 60, 40, 85, 90, 50, 80, 65]
fallas = [10, 17, 30, 21, 18, 43, 54, 33, 60, 51]

# Crear un DataFrame con los datos
datos = pd.DataFrame({'carga': carga, 'muestra': muestra, 'fallas': fallas}

# Calcular el 30% del tamaño de la muestra
porcentaje_muestra = 0.3
limite_fallas = datos['muestra'] * porcentaje_muestra

# Asignar 0 o 1 en función del número de fallas
datos['fallas_binarias'] = np.where(datos['fallas'] > limite_fallas, 0, 1)

# Añadir una constante para el término de intersección
X = sm.add_constant(datos['carga'])

# Crear y entrenar el modelo de regresión logística
modelo_logistico = sm.Logit(datos['fallas_binarias'], X)
resultado_modelo = modelo_logistico.fit()

# Imprimir el resumen del modelo
print(resultado_modelo.summary())

# Imprimir la ecuación del modelo
coef_intercepto, coef_carga = resultado_modelo.params
ecuacion_modelo = f'logit(P(Y=1)) = {coef_intercepto:.4f} + {coef_carga:.4f
print(f'\nEcuación del modelo de regresión logística:\n{ecuacion_modelo}')

# Agregar una predicción para una carga de 4200
nueva_data = sm.add_constant(pd.DataFrame({'carga': [1, 4200]}))
prediccion = resultado_modelo.predict(nueva_data)

print(f'\nProbabilidad: {prediccion.values[1]:.2%}')

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 5/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

Warning: Maximum number of iterations has been exceeded.


Current function value: 0.000000
Iterations: 35
Logit Regression Results
==========================================================================
====
Dep. Variable: fallas_binarias No. Observations:
10
Model: Logit Df Residuals:
8
Method: MLE Df Model:
1
Date: Thu, 14 Mar 2024 Pseudo R-squ.:
1.000
Time: 12:45:23 Log-Likelihood: -2.6754
e-07
converged: False LL-Null: -6.
1086
Covariance Type: nonrobust LLR p-value: 0.000
4735
==========================================================================
====
coef std err z P>|z| [0.025 0.
975]
--------------------------------------------------------------------------
----
const 474.7978 5.8e+04 0.008 0.993 -1.13e+05 1.14
e+05
carga -0.1583 19.344 -0.008 0.993 -38.072 3
7.755
==========================================================================
====

Complete Separation: The results show that there iscomplete separation.


In this case the Maximum Likelihood Estimator does not exist and the param
eters
are not identified.

Ecuación del modelo de regresión logística:


logit(P(Y=1)) = 474.7978 + -0.1583 * carga

Probabilidad: 0.00%

C:\ProgramData\Anaconda3\lib\site-packages\statsmodels\base\model.py:604:
ConvergenceWarning: Maximum Likelihood optimization failed to converge. Ch
eck mle_retvals
warnings.warn("Maximum Likelihood optimization failed to "

Literal b:

𝛽0 = 0𝛽0 ≠ 0
𝛽1 = 0 𝛽1 ≠ 0
Nivel de confianza: 0.05

Se puede notar que los coeficientes estimados para las variables "const" (constante) y
"carga" no muestran significancia estadística (0.993 > |z| > 0.05). Esto sugiere que no hay
suficiente evidencia para afirmar que estas variables tienen un impacto significativo en la

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 6/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

probabilidad de experimentar fallas.

EJ3 ----
El departamento de investigación de mercado de un fabricante de refrescos está
investigando la efectividad de un cupón de descuento en la compra de un producto de
bebida de dos litros. Se entregó una muestra de 5500 clientes con cupones de descuento
de precios variables entre 5 y 25 centavos. La variable de respuesta fue el número de
cupones en cada categoría de descuento de precio canjeados después de un mes. Los
datos se muestran a continuación.

𝐍ú𝐦𝐞𝐫𝐨 𝐝𝐞 𝐃𝐞𝐬𝐜𝐮𝐞𝐧𝐭𝐨, 𝐱 𝐓𝐚𝐦𝐚ñ𝐨 𝐝𝐞 𝐥𝐚 𝐌𝐮𝐞𝐬𝐭𝐫𝐚, 𝐧 𝐂𝐚𝐧𝐣𝐞𝐚𝐝𝐨𝐬, 𝐫


5 500 100
7 500 122
9 500 147
11 500 176
13 500 211
15 500 244
17 500 277
19 500 310
21 500 343
23 500 372
(a) Ajusta un modelo de regresión logística a los datos. Utiliza un modelo de regresión lineal
simple como estructura para el predictor lineal.

(b) ¿Es adecuado el modelo de regresión logística en la parte (a)?

Literal a:

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 7/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

In [10]: # Importar las bibliotecas necesarias


import pandas as pd
import statsmodels.api as sm
import numpy as np

# Crear los datos de ejemplo
descuento = [5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
muestra = [500] * 10
canjeados = [100, 122, 147, 176, 211, 244, 277, 310, 343, 372]

# Crear un DataFrame con los datos
datos = pd.DataFrame({'descuento': descuento, 'muestra': muestra, 'canjeado

# Calcular el 30% del tamaño de la muestra
porcentaje_muestra = 0.5
limite_canjeados = datos['muestra'] * porcentaje_muestra

# Asignar 0 o 1 en función del número de canjeados
datos['canjeados_binarios'] = np.where(datos['canjeados'] > limite_canjeado

# Añadir una constante para el término de intersección
X = sm.add_constant(datos['descuento'])

# Crear y entrenar el modelo de regresión logística
modelo_logistico = sm.Logit(datos['canjeados_binarios'], X)
resultado_modelo = modelo_logistico.fit()

# Imprimir el resumen del modelo
print(resultado_modelo.summary())

# Imprimir la ecuación del modelo
coef_intercepto, coef_descuento = resultado_modelo.params
ecuacion_modelo = f'P(Y=1) = 1 / (1 + e^(-({coef_intercepto:.4f} + {coef_de
print(f'\nEcuación del modelo de regresión logística:\n{ecuacion_modelo}')


8
Method: MLE Df Model:
1
Date: Thu, 14 Mar 2024 Pseudo R-squ.:
1.000
Time: 12:51:02 Log-Likelihood: -1.0
926e-07
converged: False LL-Null:
-6.7301
Covariance Type: nonrobust LLR p-value: 0.
0002437
=======================================================================
=======
coef std err z P>|z| [0.025
0.975]
-----------------------------------------------------------------------
-------
const 267.5315 4.84e+04 0.006 0.996 -9.46e+04
9.51e+04
descuento -16.7246 3031.173 -0.006 0.996 -5957.714 5

Literal b:

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 8/9
14/3/24, 12:54 17.Ejercicio-RegrecionLogistica - Jupyter Notebook

𝛽0 = 0𝛽0 ≠ 0
𝛽1 = 0 𝛽1 ≠ 0
Nivel de confianza: 0.05

b) El valor de p es 0.999, lo cual es significativamente más grande que 0.05 (nivel de


significancia), entonces no se rechaza por lo que no es estadísticamente significativo. Por
lo tanto, el modelo no es útil para predecir la variable dependiente, porque no existe una
fuerte relación entre ambos. En el contexto, se puede afirmar que el número de canejados
no tiene relación con el número de descuento

localhost:8888/notebooks/Downloads/17.Ejercicio-RegrecionLogistica.ipynb 9/9

También podría gustarte