Análsis previo de datos usando Pandas

Authors

Óscar Barquero Pérez (oscar.barquero@urjc.es), Carlos Figuera Pozuelo (carlos.figuera@urjc.es) y Rebeca Goya Esteban (rebeca.goyaesteban@urjc.es)

27 de marzo de 2016


Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.

1 Introducción a la práctica

El objetivo de esta lab es que el alumno se familiarice con los conceptos básicos de python para la adquisición y el preprocesado de datos, etapa previa para luego poder aplicar los algoritmos de machine learning. Sirva también para un primer acercamiento al lenguaje de programación de Python para aquellos que no hayan tenido un contacto previo.

No obstante, este lab no tiene intención de servir de tutorial para aprendizaje del lenguaje propiamente dicho, remitimos al alumno interesado a las diversas fuentes que se pueden encontrar en internet Python tutorial.

En este lab aprovechamos para recordar la nomenclatura y la estructura de datos que se utilizará en las restantes prácticas. Asimismo, introduciremos algunos paquetes importantes, como Numpy o Pandas.

2 Lectura y análisis previos con Pandas

El primer paso en todo proyecto de machine learning, entendido que la adquisición de datos ya se ha realizado, es leer los datos. Uno de los formatos más comunes es en ficheros tiplo CSV (comma-separated values). O bien, en formatos fácilmente convertibles en CSV.

Pandas es un módulo de python para data analisys open-source, que proporciona estructuras de datos fáciles de utilizar, así como herramientas para análisis de datos para Python Pandas

La base de datos que vamos a utilizar para aprender a manejar Pandas será una base de datos sobre diabetes. En esta base de datos se disponen de 442 individuos con diabetes. Para cada individuo se tienen las siguientes características.

* Age: edad.
* Sex: sexo del individuo.
* BMI: body mass index, índice de masa corporal.
* BP: Average blood pressure, presión sanguínea promedio.
* S1-S6: Seis mediciones sobre el suero sanguíneo.
* y: varible respuesta, es una medida cuantitativa de la progresión de la enfermedad un año después de la medición de las características.

Se pueden consultar más detalles en la siguiente publicación Paper Efron

Ejercicio 1

En este ejercicio el alumno deberá genera el código necesario para leer el fichero diabetes.csv y crear un objeto Pandas con nombre pd_diabetes


In [10]:
#Representar gráficas inline
%matplotlib inline
import matplotlib.pyplot as plt
#Importe el módulo de pandas
import pandas as pd
diabetes = pd.read_csv("diabetes.csv", delimiter=';')
print(diabetes)
#Lea el documento diabetes.csv. Recuerde que el fichero debe estar en el mismo directorio en el que esté creando el 
#notebook o bien debe indicar el path completo.


     AGE     SEX   BMI      BP   S1     S2  S3    S4      S5   S6    Y
0     59    male  32.1  101.00  157   93.2  38  4.00  48.598   87  151
1     48  female  21.6   87.00  183  103.2  70  3.00  38.918   69   75
2     72    male  30.5   93.00  156   93.6  41  4.00  46.728   85  141
3     24  female  25.3   84.00  198  131.4  40  5.00  48.903   89  206
4     50  female  23.0  101.00  192  125.4  52  4.00  42.905   80  135
5     23  female  22.6   89.00  139   64.8  61  2.00  41.897   68   97
6     36    male  22.0   90.00  160   99.6  50  3.00  39.512   82  138
7     66    male  26.2  114.00  255  185.0  56  4.55  42.485   92   63
8     60    male  32.1   83.00  179  119.4  42  4.00  44.773   94  110
9     29  female  30.0   85.00  180   93.4  43  4.00  53.845   88  310
10    22  female  18.6   97.00  114   57.6  46  2.00  39.512   83  101
11    56    male  28.0   85.00  184  144.8  32  6.00  35.835   77   69
12    53  female  23.7   92.00  186  109.2  62  3.00  43.041   81  179
13    50    male  26.2   97.00  186  105.4  49  4.00  50.626   88  185
14    61  female  24.0   91.00  202  115.4  72  3.00  42.905   73  118
15    34    male  24.7  118.00  254  184.2  39  7.00   5.037   81  171
16    47  female  30.3  109.00  207  100.2  70  3.00  52.149   98  166
17    68    male  27.5  111.00  214  147.0  39  5.00  49.416   91  144
18    38  female  25.4   84.00  162  103.0  42  4.00  44.427   87   97
19    41  female  24.7   83.00  187  108.2  60  3.00  45.433   78  168
20    35  female  21.1   82.00  156   87.8  50  3.00  45.109   95   68
21    25    male  24.3   95.00  162   98.6  54  3.00  38.501   87   49
22    25  female  26.0   92.00  187  120.4  56  3.00  39.703   88   68
23    61    male  32.0  103.67  210   85.2  35  6.00   6.107  124  245
24    31  female  29.7   88.00  167  103.4  48  4.00  43.567   78  184
25    30    male  25.2   83.00  178  118.4  34  5.00   4.852   83  202
26    19  female  19.2   87.00  124   54.0  57  2.00  41.744   90  137
27    42  female  31.9   83.00  158   87.6  53  3.00  44.659  101   85
28    63  female  24.4   73.00  160   91.4  48  3.00  46.347   78  131
29    67    male  25.8  113.00  158   54.2  64  2.00  52.933  104  283
..   ...     ...   ...     ...  ...    ...  ..   ...     ...  ...  ...
412   69  female  34.3  113.00  200  123.8  54  4.00  47.095  112  261
413   34  female  26.3   87.00  197  120.0  63  3.00  42.485   96  113
414   71    male  27.0   93.33  269  190.2  41  6.56  52.417   93  131
415   47  female  27.2   80.00  208  145.6  38  6.00   4.804   92  174
416   41  female  33.8  123.33  187  127.0  45  4.16  43.175  100  257
417   34  female  33.0   73.00  178  114.6  51  3.49  41.271   92   55
418   51  female  24.1   87.00  261  175.6  69  4.00  44.067   93   84
419   43  female  21.3   79.00  141   78.8  53  3.00  38.286   90   42
420   55  female  23.0   94.67  190  137.6  38  5.00  42.767  106  146
421   59    male  27.9  101.00  218  144.2  38  6.00  51.874   95  212
422   27    male  33.6  110.00  246  156.6  57  4.00  50.876   89  233
423   51    male  22.7  103.00  217  162.4  30  7.00  48.122   80   91
424   49    male  27.4   89.00  177  113.0  37  5.00  49.053   97  111
425   27  female  22.6   71.00  116   43.4  56  2.00  44.188   79  152
426   57    male  23.2  107.33  231  159.4  41  5.63  50.304  112  120
427   39    male  26.9   93.00  136   75.4  48  3.00  41.431   99   67
428   62    male  34.6  120.00  215  129.2  43  5.00   5.366  123  310
429   37  female  23.3   88.00  223  142.0  65  3.40  43.567   82   94
430   46  female  21.1   80.00  205  144.4  42  5.00  45.326   87  183
431   68    male  23.5  101.00  162   85.4  59  3.00  44.773   91   66
432   51  female  31.5   93.00  231  144.0  49  4.70  52.523  117  173
433   41  female  20.8   86.00  223  128.2  83  3.00  40.775   89   72
434   53  female  26.5   97.00  193  122.4  58  3.00  41.431   99   49
435   45  female  24.2   83.00  177  118.4  45  4.00  42.195   82   64
436   33  female  19.5   80.00  171   85.4  75  2.00  39.703   80   48
437   60    male  28.2  112.00  185  113.8  42  4.00  49.836   93  178
438   47    male  24.9   75.00  225  166.0  42  5.00  44.427  102  104
439   60    male  24.9   99.67  162  106.6  43  3.77  41.271   95  132
440   36  female  30.0   95.00  201  125.2  42  4.79  51.299   85  220
441   36  female  19.6   71.00  250  133.2  97  3.00  45.951   92   57

[442 rows x 11 columns]

Ejercicio 2

El primer paso, siempre que se trabaja con datos, es hacernos una idea de la forma que tiene nuestros datos. Lo primero que vamos a hacer es representar la matrix de datos que contiene el data frame. Para ello simplemente tenemos que repetir.

Responda a la siguiente pregunta. ¿Cuál es el valor de la presión arterial y el de la variable respuesta para el paciente número 415?


In [1]:
#Muestre la matriz de datos y responda a la pregunta

Ejercicio 3

A continuación, una buena práctica es intentar resumir toda la información posible de los datos. Habitualmente nos interesa saber la media y desviación estándar, posiblemente quartiles de cada una de las variables. Esto nos permitirá, por una lado, tener una idea de cómo son las ditribuciones de cada una de las variables y por otra, nos permitirá verificar si existen datos anómalos (outliers).

Existe en pandas una función que permite describir todos los datos de forma simultánea. Busque en la documentación la función y haga la llamada correspondiente.

Pregunta Identifique el valor media de la variable S5.

Pregunta Qué encuentra extraño en el resumen de la variable sex


In [11]:
#resumen de los datos
diabetes.describe()


Out[11]:
AGE BMI BP S1 S2 S3 S4 S5 S6 Y
count 442.000000 442.000000 442.000000 442.000000 442.000000 442.000000 442.000000 442.000000 442.000000 442.000000
mean 48.518100 26.375792 94.647014 189.140271 115.439140 49.788462 4.070249 41.336785 91.260181 152.133484
std 13.109028 4.418122 13.831283 34.608052 30.413081 12.934202 1.290450 14.235495 11.496335 77.093005
min 19.000000 18.000000 62.000000 97.000000 41.600000 22.000000 2.000000 3.912000 58.000000 25.000000
25% 38.250000 23.200000 84.000000 164.250000 96.050000 40.250000 3.000000 40.817000 83.250000 87.000000
50% 50.000000 25.700000 93.000000 186.000000 113.000000 48.000000 4.000000 44.659000 91.000000 140.500000
75% 59.000000 29.275000 105.000000 209.750000 134.500000 57.750000 5.000000 49.345000 98.000000 211.500000
max 79.000000 42.200000 133.000000 301.000000 242.400000 99.000000 9.090000 61.048000 124.000000 346.000000

Ejercicio 4

A pesar de que en el ejercicio anterior hemos visto un resumen de las características de los datos, conviene siempre hacer representaciones gráficas, que nos ofrecen, en general un mejor entendimiento de los datos. Para ello vamos a realizar en este ejercicio los histogramas de las variables: AGE, BMI, BP, S3, y Y

Pregunta: A la vista de las distribuciones, discuta la normalidad de cada una de ellas (media, skwennes, kurtosis)


In [12]:
#hist 
diabetes['AGE'].plot.hist(x = 'Age',alpha=0.5)


Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f6727961a90>

In [18]:
#hist 2
diabetes['BMI'].plot.hist(x = 'Age',alpha=0.5)


Out[18]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f671ded6610>

In [19]:
#hist 3
diabetes['BP'].plot.hist(x = 'Age',alpha=0.5)


Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f6725da9a50>

In [20]:
#hist 4
diabetes['S3'].plot.hist(x = 'Age',alpha=0.5)


Out[20]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f67176250d0>

In [17]:
#hist 5
diabetes['Y'].plot.hist(x = 'Age',alpha=0.5)


Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f671daeda10>

Ejercicio 5

Una vez que hemos analizado cada una de las variables por separado, el siguiente paso en un análisis exploratorio sería el entender las relaciones entre cada una de las variables y la variable respuesta. En un paso posterior analizaremos las relaciones entre cada una de las variables, pero dado que nuestro objetivo es modelar la variable respuesta con las variables explicativas, vamos en primer lugar a analizar estas relaciones.

Para ello vamos a representar un scatter plot con la variable respuesta como variable dependiente y cada una de las variables explicativas como variable independiente. En el caso de la variabel sex, dado que esta es una variable cualitativa binaria, vamos a utilizar un boxplot.

Haga las 10 representaciones y responda a las siguientes preguntas.

Pregunta: ¿Cómo definiría la relación existente entre la variables respuesta, progresión de la diabetes, con respecto a la edad del sujeto?

Pregunta: ¿Existe alguna variación significativa de la progresión de la enfermedad que se pueda atribuir sólo al sexo?

Pregunta ¿Cómo es la relación entre BMI y la progresión de la enfermedad? Si nuestro objetivo es analizar mediante regresión lineal la relación, se le ocurre algún tipo de transformación de la variable BMI para poder explotar la relación lineal.

Pregunta ¿Cómo define la relación entre BP y la progresión de la enfermedad?

Pregunta Una de las variables S presenta una relación opuesta a la de las otras variables, indique cuál de ellas es y explique en que consiste la relación con la variable respuesta.

Pregunta Una de las variables S presenta un pratón diferente que las demás, indique de qué variable estamos hablando y en qué consiste ese patrón diferente.


In [14]:
import numpy as np
#representa la variable respueta vs cada una de las variables explicativas
#Y vs AGE, scatter plot
diabetes.plot(kind = "scatter", x="AGE", y="Y")
#Y vs SEX, scatter plot
diabetes.boxplot(by = "SEX", column="Y")
#Y vs BMI, scatter plot
diabetes.plot(kind = "scatter", x="BMI", y="Y")

#Y vs BP, scatter plot
diabetes.plot(kind = "scatter", x="BP", y="Y")


#Y vs S1, scatter plot
diabetes.plot(kind = "scatter", x="S1", y="Y")


#Y vs S2, scatter plot

diabetes.plot(kind = "scatter", x="S2", y="Y")

#Y vs S3, scatter plot
diabetes.plot(kind = "scatter", x="S3", y="Y")


#Y vs S4, scatter plot
diabetes.plot(kind = "scatter", x="S4", y="Y")


#Y vs S5, scatter plot
diabetes.plot(kind = "scatter", x="S5", y="Y")


#Y vs S6, scatter plot
diabetes.plot(kind = "scatter", x="S6", y="Y")


Out[14]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f672772ce50>

Ejercicio 6

Una vez que hemos hecho todo los análisis exploratorios correspondiente, podemos pasar a evaluar las correlaciones entre las diferente variables del problema. Habitualmente, esto nos puede servir para identificar posible características que estén altamente correlacionadas. La correlación entre variables explicativas puede dar problemas en los algoritmos de aprendizaje máquina, por ejemplo como el caso de la regresión lineal, pues introduce problemas de singularidad en la matrix $X$, que nos darán estimaciones de los parámetros con un gran error. Podemos evaluar el coeficiente de correlación, $\rho$ entre las diferentes variables y descartar alguna de las que tengan un $\rho$ superior a un umbral que establezcamos. Los problemas de alta correlación se conocen con el nombre de colinealidad.

En el ejercicio el alumno debera representar lo que se conoce como scatter matrix

Pregunta Si tuviese que descartar un variable para evitar problemas de colinealidad, cuál eliminaría.


In [16]:
#representar la scatter matrix
from pandas.tools.plotting import scatter_matrix
scatter_matrix(diabetes, alpha=0.2, figsize = (12, 12), diagonal = 'kde')

diabetes.corr() #Correlacion con todas las variables, S4 es como discreta, S5 tiene una gran separacion y 
# la correlacion S2-S1 tiene una correlacion como muy alta


Out[16]:
AGE BMI BP S1 S2 S3 S4 S5 S6 Y
AGE 1.000000 0.185085 0.335428 0.260061 0.219243 -0.075181 0.203841 0.100407 0.301731 0.187889
BMI 0.185085 1.000000 0.395411 0.249777 0.261170 -0.366811 0.413807 0.129509 0.388680 0.586450
BP 0.335428 0.395411 1.000000 0.242464 0.185548 -0.178762 0.257650 0.116787 0.390430 0.441482
S1 0.260061 0.249777 0.242464 1.000000 0.896663 0.051519 0.542207 0.074445 0.325717 0.212022
S2 0.219243 0.261170 0.185548 0.896663 1.000000 -0.196455 0.659817 0.021832 0.290600 0.174054
S3 -0.075181 -0.366811 -0.178762 0.051519 -0.196455 1.000000 -0.738493 -0.090445 -0.273697 -0.394789
S4 0.203841 0.413807 0.257650 0.542207 0.659817 -0.738493 1.000000 0.133006 0.417212 0.430453
S5 0.100407 0.129509 0.116787 0.074445 0.021832 -0.090445 0.133006 1.000000 0.089728 0.103233
S6 0.301731 0.388680 0.390430 0.325717 0.290600 -0.273697 0.417212 0.089728 1.000000 0.382483
Y 0.187889 0.586450 0.441482 0.212022 0.174054 -0.394789 0.430453 0.103233 0.382483 1.000000

Conversión data frame para trabajar en sklearn

Uno de los probemas que se pueden presentar cuando se trabajar con bases de datos heterogéneas es cómo tratar las variables categorícas que tiene más de dos niveles.

A menudo, muchas características son categóricas: ["from Europe", "from US", "from Asia"], ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"].

EStas variables se pueden procesar utilizando un esquema de conversión llamado one-hot encoding. De esta forma, se pasará a tener tantas variables como diferentes niveles tuviese la variable categórica. Cada nueva variable (llamada dummy variable) será binaria, 1 o 0, indicando si para ese caso en particular se cumple o no la condición indicada por el nivel de la variable categórica.

Así, para el caso de una variable categórica que indicase el navegador utilizado se tendrían cuatro nuevas dummy variables.

  • uses Firefox: [1,0], donde 1 indica que se utiliza y cero en caso contrario.
  • uses Chrome: [1,0]
  • uses Safari: [1,0]
  • uses IE: [1,0]

Este tipo de codificación es la más recomendable para el caso de sklearn, que no trabaja con variables categóricas. Desde pandas se pueden crear este tipo de variables utilizando el método get_dummies, o bien desde sklearn utilizando OneHotEncoder

Ejercicio 7

En este ejercicio se pide convertir la variable sexo en dos variable dummies


In [22]:
diabetes_dummy = pd.get_dummies(diabetes)
diabetes_dummy


Out[22]:
AGE BMI BP S1 S2 S3 S4 S5 S6 Y SEX_female SEX_male
0 59 32.1 101.00 157 93.2 38 4.00 48.598 87 151 0 1
1 48 21.6 87.00 183 103.2 70 3.00 38.918 69 75 1 0
2 72 30.5 93.00 156 93.6 41 4.00 46.728 85 141 0 1
3 24 25.3 84.00 198 131.4 40 5.00 48.903 89 206 1 0
4 50 23.0 101.00 192 125.4 52 4.00 42.905 80 135 1 0
5 23 22.6 89.00 139 64.8 61 2.00 41.897 68 97 1 0
6 36 22.0 90.00 160 99.6 50 3.00 39.512 82 138 0 1
7 66 26.2 114.00 255 185.0 56 4.55 42.485 92 63 0 1
8 60 32.1 83.00 179 119.4 42 4.00 44.773 94 110 0 1
9 29 30.0 85.00 180 93.4 43 4.00 53.845 88 310 1 0
10 22 18.6 97.00 114 57.6 46 2.00 39.512 83 101 1 0
11 56 28.0 85.00 184 144.8 32 6.00 35.835 77 69 0 1
12 53 23.7 92.00 186 109.2 62 3.00 43.041 81 179 1 0
13 50 26.2 97.00 186 105.4 49 4.00 50.626 88 185 0 1
14 61 24.0 91.00 202 115.4 72 3.00 42.905 73 118 1 0
15 34 24.7 118.00 254 184.2 39 7.00 5.037 81 171 0 1
16 47 30.3 109.00 207 100.2 70 3.00 52.149 98 166 1 0
17 68 27.5 111.00 214 147.0 39 5.00 49.416 91 144 0 1
18 38 25.4 84.00 162 103.0 42 4.00 44.427 87 97 1 0
19 41 24.7 83.00 187 108.2 60 3.00 45.433 78 168 1 0
20 35 21.1 82.00 156 87.8 50 3.00 45.109 95 68 1 0
21 25 24.3 95.00 162 98.6 54 3.00 38.501 87 49 0 1
22 25 26.0 92.00 187 120.4 56 3.00 39.703 88 68 1 0
23 61 32.0 103.67 210 85.2 35 6.00 6.107 124 245 0 1
24 31 29.7 88.00 167 103.4 48 4.00 43.567 78 184 1 0
25 30 25.2 83.00 178 118.4 34 5.00 4.852 83 202 0 1
26 19 19.2 87.00 124 54.0 57 2.00 41.744 90 137 1 0
27 42 31.9 83.00 158 87.6 53 3.00 44.659 101 85 1 0
28 63 24.4 73.00 160 91.4 48 3.00 46.347 78 131 1 0
29 67 25.8 113.00 158 54.2 64 2.00 52.933 104 283 0 1
... ... ... ... ... ... ... ... ... ... ... ... ...
412 69 34.3 113.00 200 123.8 54 4.00 47.095 112 261 1 0
413 34 26.3 87.00 197 120.0 63 3.00 42.485 96 113 1 0
414 71 27.0 93.33 269 190.2 41 6.56 52.417 93 131 0 1
415 47 27.2 80.00 208 145.6 38 6.00 4.804 92 174 1 0
416 41 33.8 123.33 187 127.0 45 4.16 43.175 100 257 1 0
417 34 33.0 73.00 178 114.6 51 3.49 41.271 92 55 1 0
418 51 24.1 87.00 261 175.6 69 4.00 44.067 93 84 1 0
419 43 21.3 79.00 141 78.8 53 3.00 38.286 90 42 1 0
420 55 23.0 94.67 190 137.6 38 5.00 42.767 106 146 1 0
421 59 27.9 101.00 218 144.2 38 6.00 51.874 95 212 0 1
422 27 33.6 110.00 246 156.6 57 4.00 50.876 89 233 0 1
423 51 22.7 103.00 217 162.4 30 7.00 48.122 80 91 0 1
424 49 27.4 89.00 177 113.0 37 5.00 49.053 97 111 0 1
425 27 22.6 71.00 116 43.4 56 2.00 44.188 79 152 1 0
426 57 23.2 107.33 231 159.4 41 5.63 50.304 112 120 0 1
427 39 26.9 93.00 136 75.4 48 3.00 41.431 99 67 0 1
428 62 34.6 120.00 215 129.2 43 5.00 5.366 123 310 0 1
429 37 23.3 88.00 223 142.0 65 3.40 43.567 82 94 1 0
430 46 21.1 80.00 205 144.4 42 5.00 45.326 87 183 1 0
431 68 23.5 101.00 162 85.4 59 3.00 44.773 91 66 0 1
432 51 31.5 93.00 231 144.0 49 4.70 52.523 117 173 1 0
433 41 20.8 86.00 223 128.2 83 3.00 40.775 89 72 1 0
434 53 26.5 97.00 193 122.4 58 3.00 41.431 99 49 1 0
435 45 24.2 83.00 177 118.4 45 4.00 42.195 82 64 1 0
436 33 19.5 80.00 171 85.4 75 2.00 39.703 80 48 1 0
437 60 28.2 112.00 185 113.8 42 4.00 49.836 93 178 0 1
438 47 24.9 75.00 225 166.0 42 5.00 44.427 102 104 0 1
439 60 24.9 99.67 162 106.6 43 3.77 41.271 95 132 0 1
440 36 30.0 95.00 201 125.2 42 4.79 51.299 85 220 1 0
441 36 19.6 71.00 250 133.2 97 3.00 45.951 92 57 1 0

442 rows × 12 columns

Conclusión

Existen muchas más herramientas para hacer análisis exploratorio de datos, por ejemplo, podríamos usar algún algoritmo no supervisado de clustering Hierarchical clustering, o bien de descomposción en componentes principales Principal Component Analysis, PCA. Estas herramientas son un poco más sofisticadas, pero nos permiten aumentar nuestro conocimiento sobre como es la estructura de datos. Suelen utilizarse también como paso previo a la utilización del algoritmo supervisado propiamente dicho, en el caso de PCA nos permite eliminar colinealidad, y en algún caso hacer una selección de características utilizando sólo las componentes que mejor expliquen la varianza de los datos.

Nosotros nos vamos a quedar en este punto, pues con las herramientas de análisis exploratorio que hemos visto hemos conseguido aumentar nuestro conocimiento de los datos lo suficiente como para utilizar las herramientas de aprendizaje máquina con la seguridad de entender los resultados que nos ofrezca, así como de poder identificar posibles inconsistencias en los resultados. Por ejemplo, en el ejercicio 5 hemos analizado la relación entre las variables AGE vs Y; Y vs S5, a la vista de los scatter plot, sería raro que el modelo de regresión lineal indicase cómo resultado que la relación entre AGE vs Y es más intensa que la que tiene con S5.


In [ ]: