EJEMPLO DE REGRESION LINEAL MULTIPLE
El objetivo de este ejemplo fue analizar el desempeño académico en Matemáticas I de los estudiantes de Ingeniería de la UNEFA-NE (Universidad Nacional Experimental de las Fuerzas Armadas de Venezuela – Núcleo Nueva Esparta) utilizando el modelo de Regresión Múltiple. En este caso la variable dependiente y, fue el rendimiento académico general del estudiante en esa asignatura (en escala de 0-20) y las variables dependientes:
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 dependiente (detalles en la publicación#8 de este blog)
PROGRAMA EN PYTHON
#primero cargamos las librerias de python que utiliza el programa, leemos el archivo tipo excel y determinamos su dimension:
| import pandas as pd |
| from pandas import ExcelFile |
| data1= pd.read_excel(‘jas19.xlsx’) |
| data1.shape |
salida: (164×55)
”’
La dimension de la base de datos es 164×55, es decir 164 alumnos y 55 variables, las cuales se redujeron a 10, (9 independientes y 1 dependiente) tomando en cuenta como se dijo antes, las mayores correlaciones de las variables independientes con la variable dependiente.
Ahora definimos las 10 variables a usar
”’
| X=data1[[ ‘nb4’, ‘matcinu6’, ‘dedica9′,’asesoria11’, ‘autoest15’, ‘nepadre24’, ‘relacionf34’, ‘rdmati’,’rdblog’,’dudasdoc37′,’rep7′ ]] |
| y=data1[[‘cal8’]] |
| #Estan son las variables seleccionadas |
| 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 |
| ”’ |