El tema a tratar en este post es el usar la programación en python para analizar el bajo rendimiento en matemáticas I en la UNEFA de los estudiantes de Ingeniería, ya que se ha observado un alto indice de repitencia en los primeros semestres, en las asignaturas de contenido Matemático: Matemáticas I,II,II, Algebra Lineal, Estadística, Geometría Analítica, Física, Programación, Cálculo Numérico entre otras. Para ello se aplico una encuesta a una muestra de 165 estudiantes con dos objetivos: (1) investigar que variables podrían influir en el bajo rendimiento y (2) construir un modelo predictivo de las calificaciones en matemáticas I (variable dependiente) basado inicialmente en 54 variables independientes que consideramos pudieran afectar en el rendimiento estudiantil.
Las variables consideradas en este estudio fueron:
| Nombre | Descripción |
| carrera0 | carrera del estudiante (nominal;: 0 Ing.Sistemas, 1:Ing.Civil) |
| edad1 | Edad del estudiante (tipo numérica entera con 6 valores: 17 ,18,19, 20, 21,22 ; 22 representa 22 años o más) |
| genero2 | Sexo del estudiante (nominal; binaria 0: Femenino, 1: Masculino) |
| zona3 | Zona donde reside el estudiante (nominal; binaria : 0: Urbana y 1:Rural |
| nb4 | Nota promedio de bachillerato (numérica continua) |
| tipolic5 | tipo de liceo (nominal; binaria 0: 0: Público, 1: Privado) |
| matcinu | Nota de matemáticas en el CINU (numérica continua) |
| rep | Repitencia en Matemáticas I (nominal; binaria 0: No repitió y 1:Si repitió |
| cal | Nota en Matemáticas I (numérica continua) |
| dedica9 | Horas semanales dedicadas al estudio de Mat I (numérica continua) |
| mcom10 | recursos complementarios para el estudio de Matemática I (nominal: 1 libros 2.internet 3 otros:profesores,asesorías etc) |
| asesoria11 | Hrs. semanales que recibe asesoría en Matemáticas (numérica con 4 valores 0 cero hrs,.1: 1hr, -2 :2hrs 3. 3 o mas hrs |
| cursoextra12 | Realiza o No curso extra (nominal; binaria 0: No, 1:Si) |
| Transporte13 | Medio de transporte utilizado la mayoría de las veces para ir a la universidad (nominal con 4 niveles, “1” Transporte universitario, “2” Transporte Público, “3” Transporte Privado, “4” Caminando) |
| tiempot | tiempo empleado para llegar a la universidad (numerica,1 –< =1hr.,2-entre 1> y <=2.hrs, 3 – > entre 2 y <=3.hrs. 4- 3 mas de 3 ) |
| autoest15 | auto-estima (nominal con 3 niveles; “1” Mucho, “2” Lo suficiente, “3” Poco) |
| motiv16 | Gusto por la matemática (nominal con 3 niveles; “1” tot desacuerdo, “2” parc de acuerdo, “3” tot. acuerdo) |
| trab17 | Si trabaja o No (nominal; binaria 0: No, 1:Si) |
| Alcohol18 | Consumo de alcohol (numérica; “0” .Nunca, “2”. Esporádicamente, “3” .una vez por semana) “4” ,Diario) |
| Tipohab19 | Tipo de habitación (nominal con 3 niveles; “1” De padres, “2” De un familiar, “3” Alquilada) |
| personas20 | Número de personas que conviven con el estudiante (numérica de 0 a 6, 6 representa 6 o mas) |
| Comidas21 | Número de comidas diarias que hace el estudiante (numérica de 1 a 4, 4 representa 4 o mas) |
| Sueldo22 | Sueldo familiar (numérica con valores 1,2,3,4) |
| nemadre23 | nivel educativo de la madre (numérica de 1 a 4) |
| nepadre24 | nivel educativo del padre (numérica de 1 a 4) |
| Trabma25 | situación laboral de la madre (nominal; binaria 0: No, 1:Si) |
| Trabpa26 | situación laboral del padre nominal; binaria 0: No, 1:Si) |
| pc27 | tenencia de computadora en casa (nominal; binaria 0: No, 1:Si ) |
| Internet28 | empleo de internet en sus estudios (nominal; binaria 0: No, 1:Si) |
| Libros29 | número de libros de matemáticas disponibles en casa (numérica; de 0 a 6, 6 representa 6 o más) |
| Lugar30 | disposición de un lugar para estudiar en casa (nominal; binaria 0: No, 1:Si) |
| ecpadres31 | estado civil de los padres (nominal; 1:Solteros, 2:casados,3:Divorciados,4:Viudos) |
| vivecon32 | Con cuál de los padres vive? (nominal; 1:Mama, 2:Papa,3:Ambos,4:Ninguno) |
| nherm33 | número de hermanos (numérica de 1 a 4, 4 representa 4 o mas) |
| relacionf34 | Relación familiar (nominal; 1:Buena, 2:Regular,3:Mala) |
| rdmati | Uso del profesor de material impreso (nominal; binaria 0: No, 1:Si) |
| rdpizarron | Uso del profesor de pizarrón ( nominal; binaria 0: No, 1:Si) |
| rdmataudiov | Uso del profesor de material audiovisual (nominal; binaria 0: No, 1:Si) |
| rdblog | Uso del profesor de blog educativo (nominal; binaria 0: No, 1:Si) |
| rdemail | Uso del profesor de email como recurso educativo ( nominal; binaria 0: No, 1:Si) |
| rdredes | Uso del profesor de redes sociales como recurso educativo (nominal; binaria 0: No, 1:Si) |
| rdinternet | Uso del profesor de internet como recurso educativo (nominal; binaria 0: No, 1:Si) |
| habilidoc36 | habilidades del docente de Matemáticas para promover la participación de los alumnos (nominal “1” tot desac, “2” parc de acuerdo, “3” tot. acuerdo) |
| dudasdoc37 | habilidad del docente de Matemáticas para aclarar dudas (nominal “1” tot desac, “2” parc de acuerdo, “3” tot. acuerdo) |
| evalprueba | Si el docente realiza pruebas como tipo de evaluación (nominal; binaria 0: No, 1:Si) |
| evaltall | Si el docente realiza talleres como tipo de evaluación (nominal; binaria 0: No, 1:Si) |
| evaltra | Si el docente realiza trabajos como tipo de evaluación (nominal; binaria 0: No, 1:Si) |
| evaltareas | Si el docente realiza tareas como tipo de evaluación (nominal; binaria 0: No, 1:Si) |
| niveeval39 | Si el nivel de evaluación en Matemáticas es adecuado (nominal “1” tot desac, “2” parc de acuerdo, “3” tot. acuerdo) |
| asistdoc40 | Si el docente asiste regularmente a clases (nominal “1” tot desac, “2” parc de acuerdo, “3” tot. acuerdo) |
| Promot41 | factores promotores de la enseñanza en Matemáticas |
| Detract42 | factores detractores de la enseñanza en Matemáticas. |
Objetivo1: Seleccion de variables que mas influyen en el rendimiento de matematicas I
Para ello procedemos a la lectura de la base de datos, buscamos su dimension, graficamos las variables independientes vs la variable dependiente, la correlacion de las variables independientes con la dependiente y calculamos su significancia p
```python
import pandas as pd
import seaborn as sb
```
```python
from pandas import ExcelFile
data1= pd.read_excel('jas19.xlsx')
data1.shape
```
(164, 55)
#Visualizacion de las variables
```python
sb.pairplot(data1,x_vars=['sueldo22','nb4','matcinu6','nemadre23','personas20','comidas21','nepadre24','libros29'],y_vars='cal8',kind='reg')
```
salida
<seaborn.axisgrid.PairGrid at 0x230d71d27b8>

# calculo de la correlacion de las variables X vs Y
from scipy.stats import pearsonr
def calculate_pvalues(df):
df = df.dropna()._get_numeric_data()
dfcols = pd.DataFrame(columns=df.columns)
pvalues = dfcols.transpose().join(dfcols, how='outer')
for r in df.columns:
for c in df.columns:
pvalues[r][c] = round(pearsonr(df[r], df[c])[1], 4)
return pvalues
df2_p=calculate_pvalues(data2)
co=df2_p['cal8']
print('p-values para la correlacion de las variables predictoras con la calificacion,(cal8)\n variable p-value\n', co)
p-values para la correlacion de las variables predictoras con la calificacion,(cal8) variable p-value carrera 0.0029 edad1 0.735 genero2 0.003 zona3 0.6863 nb4 0.0109 tipoIB5 0.5232 matcinu6 0.0003 dedica9 0 mcom10 0.5242 asesoria11 0.0472 cursoextra12 0.4926 transporte13 0.1715 tiempot 0.1295 autoest15 0.0056 motiv16 0.1262 trab17 0.4636 alcohol18 0.3391 tipohab19 0.6023 personas20 0.0567 comidas21 0.1775 sueldo22 0.7574 nemadre23 0.3761 nepadre24 0.0106 trabma25 0.455 trabpa26 0.4042 pc27 0.9026 internet28 0.5363 libros29 0.0245 lugar30 0.141 ecpadres31 0.8469 vivecon32 0.5581 nherm33 0.6479 relacionf34 0.0071 rdmati 0.0022 rdpizarron 0.1592 rdmaudiov 0.0014 rdblog 0.0363 rdemail 0.1819 rdredess 0.9552 rdinternet 0.8533 habilidoc36 0.8139 dudasdoc37 0.0016 evalprueba 0.0513 evaltall 0.436 evaltra 0.2734 evaltareas 0.0581 niveeval39 0.0503 asistdoc40 0.184 rep7 0 cal8 0 Name: cal8, dtype: object
Conclusión: Las variables con menor valor de p ( las que tienen mejor correlación), son:
X1: Promedio de notas de bachillerato (nb4)
X2: Notas de matematicas en el Cuso introductorio(matcinu6)
x3: dedicacion semanal al estudio fde matematicas(dedica9)
x4: autoestima(autoest15)
x5: nivel educativo del padre(nepadre24)
x6:Relacion familiar(relacionf34)
x7: uso de blogs como recurso didactico (rdblog)
x8: Aclaracion de las dudas por el docente(dudasdoc37)
x9: Nivel de repitencia(rep7)
Estas variables tienen correlación significativa con la variable dependiendente.
#Denotamos estas variables independientes con la letra X
X=data1[[ ‘nb4’, ‘matcinu6’, ‘dedica9′,’asesoria11’, ‘autoest15’,
nepadre24′, ‘relacionf34’, ‘rdmati’,’rdblog’,’dudasdoc37′,’rep7′ ]]
| Preprocesamiento de los datos |
| El preprocesamiento de los datos transforma las variables en |
| variables con media cero y varianza 1, lo cual permite un tratamiento insesgado de las variables |
| la libreria sklearn tiene este procedimiento automatizado, el cual invocamos a continuacion |
| from sklearn import preprocessing |
| X=preprocessing.normalize(X) |
| print(X.shape) |
| print(y.shape) salida: 164, 9) (164, 1) |
'''
Division de los datos
Ahora realizamos la division de los datos en forma aleatoria
Nuevamente invocamos sklearn
'''
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,
test_size=0.33, random_state=42)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
salida:
(109, 9)
(109, 1)
(55, 9)
(55, 1)
'''
Los datos de construccion fueron un total de 109,
mientras que los datos de prueba fueron 55.
Ahora, invocamos el modulo de Linear Regresion desde sklearn
y el modulo de metricas y luego entrenamos el modelo
'''
from sklearn.linear_model import LinearRegression
from sklearn import metrics
model = LinearRegression()
model.fit(X_train,y_train)
#Resultados
print('intercept: ',model.intercept_)
print ('Coefficients: ', model.coef_)
predy=model.predict(X_train)
print(metrics.r2_score(y_train,predy))
salida: intercepto, coeficientes y R2
intercept: [-48.01274719]
Coefficients:[39.88433889 39.96228126 39.85694224
-9.09651957 2.2309526 -13.2340093
62.48698455 -1.7206179 -82.16102567]]
R2=0.7778738689631319
Este ultimo resultado nos indica que el modelo es bastante bueno
ya que el porcentaje de explicación
del mismo es de 77%.
'''
| ”’ |
| EVALUACION DEL MODELO |
| La evaluación del modelo se realiza usando los datos |
| de prueba, primero hacemos la predicción de los datos |
| prueba que son datos no utilizados en la construcción |
| del modelo y luego |
| calculamos el R2 correspondiente. Logicamente este |
| R2 de prueba va a dar menor que el R2 correspondiente a |
| los datos de construcción. Pero si se mantiene alto, |
| podemos concluir que el modelo es exitoso para predecir y |
| en base X |
| ”’ |
| #Codigo para evaluar el modelo |
| predy_test=model.predict(X_test) |
| from sklearn import metrics |
| print(metrics.r2_score(y_test,predy_test)) |
| ”’ |
| Salida |
| 0.6642294077237553 |
| Este resultado valida el modelo ya que para los datos de prueba se produce un R2 de 66% que es bastante bueno si consideramos que los datos son de naturaleza social. |
| Podemos concluir que el modelo es exitoso para predecir y |
| en base X |
| ”’ |
| |
'RESUMEN DE RESULTADOS' import statsmodels.api as sm results=sm.OLS(y,sm.add_constant(X)).fit() print(results.summary())
OLS Regression Results
==============================================================================
Dep. Variable: cal8 R-squared: 0.629
Model: OLS Adj. R-squared: 0.594
Method: Least Squares F-statistic: 18.02
Date: Thu, 19 Sep 2019 Prob (F-statistic): 1.79e-25
Time: 15:17:48 Log-Likelihood: -413.74
No. Observations: 164 AIC: 857.5
Df Residuals: 149 BIC: 904.0
Df Model: 14
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 70.1220 25.383 2.763 0.006 19.964 120.280
x1 27.1233 13.078 2.074 0.040 1.281 52.966
x2 20.6945 12.755 1.622 0.107 -4.509 45.898
x3 -48.3959 19.011 -2.546 0.012 -85.962 -10.830
x4 -30.5542 16.254 -1.880 0.062 -62.672 1.563
x5 -8.2339 4.840 -1.701 0.091 -17.797 1.330
x6 -23.0505 8.538 -2.700 0.008 -39.922 -6.179
x7 8.5797 8.272 1.037 0.301 -7.765 24.925
x8 -9.5213 4.955 -1.922 0.057 -19.312 0.269
x9 -35.4267 9.528 -3.718 0.000 -54.255 -16.598
x10 49.9618 19.348 2.582 0.011 11.730 88.193
x11 -59.7699 22.982 -2.601 0.010 -105.183 -14.357
x12 -1.4117 34.497 -0.041 0.967 -69.578 66.755
x13 -0.0670 8.052 -0.008 0.993 -15.978 15.844
x14 -124.7283 11.672 -10.686 0.000 -147.792 -101.664
==============================================================================
Omnibus: 0.812 Durbin-Watson: 1.758
Prob(Omnibus): 0.666 Jarque-Bera (JB): 0.934
Skew: 0.125 Prob(JB): 0.627
Kurtosis: 2.727 Cond. No. 215.
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.